- internal/config 新增 ResolveSessionSecret:显式配置优先;未配置则读 <数据目录>/session_secret,不存在或内容损坏就生成 32 字节随机密钥(64 字符,0600,先写临时文件再改名、写后显式 Chmod) - FONU_SESSION_SECRET 默认值由 change-me-in-production 改为空(空 = 未配置 → 自动生成);启动日志打印密钥来源。注意该密钥同时是 secret.NewBox 的加密密钥,因此不替换已配置的值(含历史默认值,只提示)——替换会让库里已加密的凭据无法解密 - 三个 compose 统一 \;docker-compose.hub.yml 单文件部署不再需要 .env,直接 docker compose up -d --build - .gitignore 补 .env 与 .env.local;测试 4 例(生成复用/权限/显式优先/历史默认值保留/损坏重生成),go build/vet/test 全绿
37 lines
1.5 KiB
YAML
37 lines
1.5 KiB
YAML
# 固定项目名:不改的话,改了目录名/项目名后 compose 会把它当成新项目,
|
||
# fonu-data 会变成新空卷(看起来像「数据丢了」)。
|
||
name: fonu
|
||
|
||
# 本地项目:用源码构建镜像(镜像名随 VERSION 变,便于回滚;也便于导出 / 备份)
|
||
# 升级:docker compose up -d --build(或在部署机跑 scripts/upgrade.sh)
|
||
# 回滚:FONU_VERSION=上一个版本号 docker compose up -d(镜像 tag 还在本地)
|
||
services:
|
||
fonu:
|
||
build:
|
||
context: .
|
||
args:
|
||
NODE_IMAGE: ${NODE_IMAGE:-docker.m.daocloud.io/library/node:22-alpine}
|
||
GO_IMAGE: ${GO_IMAGE:-docker.m.daocloud.io/library/golang:1.23-bookworm}
|
||
RUNTIME_IMAGE: ${RUNTIME_IMAGE:-docker.m.daocloud.io/library/debian:bookworm-slim}
|
||
GOPROXY: ${GOPROXY:-https://goproxy.cn,direct}
|
||
image: fonu:${FONU_VERSION:-local}
|
||
container_name: fonu
|
||
restart: unless-stopped
|
||
ports:
|
||
- "6893:6893"
|
||
- "18080:80"
|
||
- "9443:443"
|
||
volumes:
|
||
- fonu-data:/data
|
||
environment:
|
||
FONU_DATA_DIR: /data
|
||
FONU_LISTEN: :6893
|
||
# 留空即自动:应用会在数据目录里生成并持久化 <DataDir>/session_secret(0600)
|
||
# 想自己指定就设这个变量;注意它同时是凭据加密密钥,已有数据后不要随意更换
|
||
FONU_SESSION_SECRET: ${FONU_SESSION_SECRET:-}
|
||
# 时区:通知消息时间按此显示(默认东八区)
|
||
TZ: ${TZ:-Asia/Shanghai}
|
||
|
||
volumes:
|
||
fonu-data:
|