# ============================================================
# Moments Blog — 生产部署配置(预构建镜像版,单容器)
# 数据通过目录映射持久化,数据目录在 ./data/ 下
#
# 快速部署:
# 1. cp .env.example .env 并填写 JWT_SECRET
# 2. docker compose -f docker-compose.release.yml up -d
# 3. 访问 http://你的IP/admin 初始账号: admin / Strong1passwd!
# ============================================================
services:
moments-blog:
image: koalalove/moments-blog:latest
container_name: moments-blog
restart: unless-stopped
ports:
- "${HOST_PORT:-80}:80"
volumes:
# PostgreSQL 数据(首次启动自动初始化,迁移备份直接 cp 即可)
- ./data/postgres:/var/lib/postgresql/data
# 媒体上传文件
- ./data/uploads:/data/uploads
# 运行日志
- ./data/logs:/data/logs
environment:
# ── 必填:上线前务必修改 ──
- JWT_SECRET=${JWT_SECRET}
# ── 数据库(连接容器内 PostgreSQL 15)──
- DATABASE_URL=postgresql://${DB_USER:-moments}:${DB_PASSWORD:-moments_password}@127.0.0.1:5432/${DB_NAME:-moments}
# ── 运行环境 ──
- NODE_ENV=production
- PORT=3001
- UPLOAD_DIR=/data/uploads
- INTERNAL_API_URL=http://localhost:3001
- PGDATA=/var/lib/postgresql/data
# ── 反向代理跳数(决定 req.ip 取真实访客 IP,影响限流与点赞去重)──
# 默认 1:仅容器内置 Nginx。外层再加一层代理(如 Caddy)时设为 2;
# 若外层还有 CDN(如 Cloudflare)再相应 +1。
- TRUST_PROXY=${TRUST_PROXY:-1}
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "5"
# ── Moments Blog — Environment Variables ──
# cp .env.example .env
# ── Port ──
HOST_PORT=80
# ── 反向代理跳数(获取访客真实 IP;影响限流与访客点赞去重)──
# 容器内已自带一层 Nginx,默认 1 即可。
# 若你在容器前再加了一层反代(如 Caddy / 宿主机 Nginx),设为 2;
# 若外层还套了 CDN(如 Cloudflare),再相应 +1(即 3)。
# 安全前提:容器端口不要直接对公网暴露,只能经你的反代访问,否则 IP 可被伪造。
TRUST_PROXY=1
# ── JWT(必填!请用以下命令生成,不能留空)──
# openssl rand -hex 64
JWT_SECRET=
# ── 内置 PostgreSQL 数据库配置(可选,修改默认值)──
DB_NAME=moments
DB_USER=moments
DB_PASSWORD=moments_password
# ── 初始管理员账号:admin / Strong1passwd! ──
# 登录后请前往后台「账号设置」修改密码
Content type
Image
Digest
sha256:d1b73a40b…
Size
264.1 MB
Last updated
3 months ago
docker pull koalalove/moments-blog