diff --git a/docker/.env.example b/docker/.env.example index a5c9252..adfecb3 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -11,30 +11,36 @@ # ===== 应用 ===== APP_PORT=8000 + +# JWT 签名密钥(生产必改):要求 ≥32 字节密码学随机,禁止词典词/项目名 +# 生成方式(任选其一,生成后替换下方示例值): +# Linux 部署机: openssl rand -hex 32 +# 无 openssl 时: python3 -c "import secrets; print(secrets.token_hex(32))" +# Windows: [Convert]::ToBase64String([Security.Cryptography.RandomNumberGenerator]::GetBytes(32)) +# 生成示例:a3f8c2d91e4b7f05...(64 位十六进制,各环境独立生成、勿复用同一值) +# 注意:轮换此值后所有已签发令牌立即失效,用户需重新登录(安排发版窗口执行) JWT_SECRET=please-change-this-jwt-secret # ===== MySQL ===== -# 数据库地址(容器网络内地址,非宿主机映射端口) +# 数据库地址(容器网络内地址) # 连 compose 自带 mysql 服务:保持默认服务名 mysql # 连宿主机数据库:Mac/Windows Docker Desktop 用 host.docker.internal, # Linux 用宿主机实际 IP 或 --add-host=host.docker.internal:host-gateway # 注意:容器内 127.0.0.1 指向容器自身,连不上宿主机数据库 MYSQL_HOST=mysql -# 目标库监听端口(连接串内的端口;连外部库时填外部库端口,与下面的宿主映射端口无关) -MYSQL_HOST_PORT=3306 +# 数据库监听端口(进连接串;连外部库时填外部库端口) +# 注:自带 mysql/redis 服务的宿主映射端口已在 compose 写死(3306/6379), +# 仅供宿主机客户端直连调试,占用冲突时改 compose 的 ports +MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=root MYSQL_DATABASE=easygoadmin.goframe.elevue -# 宿主机映射端口(仅 compose 自带 mysql 服务对外暴露时使用) -MYSQL_PORT=3306 # ===== Redis ===== # 同 MYSQL_HOST 规则;容器内 127.0.0.1 指向容器自身,连不上宿主机 Redis REDIS_HOST=redis # 连宿主机 Redis 时改为(Windows/Mac Docker Desktop): # REDIS_HOST=host.docker.internal -# 目标 Redis 监听端口(连外部库时填外部端口) -REDIS_HOST_PORT=6379 -# 宿主机映射端口(仅 compose 自带 redis 服务对外暴露时使用) +# Redis 监听端口(进连接串;连外部库时填外部端口) REDIS_PORT=6379 REDIS_PASSWORD=123456 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 1789362..94d0d17 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -25,8 +25,8 @@ services: # (GF_ 键名 = 配置路径大写下划线,如 file.uploadDir → GF_FILE_UPLOADDIR) environment: TZ: Asia/Shanghai - GF_DATABASE_DEFAULT_LINK: "mysql:${MYSQL_USER:-root}:${MYSQL_PASSWORD:-root}@tcp(${MYSQL_HOST:-mysql}:${MYSQL_HOST_PORT:-3306})/${MYSQL_DATABASE:-easygoadmin.goframe.elevue}?charset=utf8mb4&parseTime=true&loc=Local" - GF_REDIS_DEFAULT_ADDRESS: "${REDIS_HOST:-redis}:${REDIS_HOST_PORT:-6379}" + GF_DATABASE_DEFAULT_LINK: "mysql:${MYSQL_USER:-root}:${MYSQL_PASSWORD:-root}@tcp(${MYSQL_HOST:-mysql}:${MYSQL_PORT:-3306})/${MYSQL_DATABASE:-easygoadmin.goframe.elevue}?charset=utf8mb4&parseTime=true&loc=Local" + GF_REDIS_DEFAULT_ADDRESS: "${REDIS_HOST:-redis}:${REDIS_PORT:-6379}" GF_REDIS_DEFAULT_PASS: "${REDIS_PASSWORD:-123456}" GF_FILE_UPLOADDIR: "/data/upload" GF_JWT_SECRET: "${JWT_SECRET:-please-change-this-jwt-secret}" @@ -60,7 +60,8 @@ services: MYSQL_DATABASE: ${MYSQL_DATABASE:-easygoadmin.goframe.elevue} TZ: Asia/Shanghai ports: - - "${MYSQL_PORT:-3306}:3306" + # 宿主映射端口写死(仅供宿主机客户端直连调试;宿主机 3306 被占用时改此处) + - "3306:3306" volumes: - mysql-data:/var/lib/mysql # 首次初始化:导入定稿 SQL(仅空数据卷时执行一次) @@ -89,7 +90,8 @@ services: restart: always command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:-123456}", "--appendonly", "yes"] ports: - - "${REDIS_PORT:-6379}:6379" + # 宿主映射端口写死(仅供宿主机客户端直连调试;宿主机 6379 被占用时改此处) + - "6379:6379" volumes: - redis-data:/data healthcheck: