Files
mce/docs/deployment.md
Victor_Jay 786f463613 docs: 快速开始(含 DB 迁移步骤) + 生产部署指南
README.md:
  - 补充环境要求(Go 1.26 / PG 16 / Redis 7)
  - 添加数据库初始化迁移步骤
  - 说明 .env 敏感信息注入
  - 链接到部署文档

docs/deployment.md (新增):
  - 编译 + systemd 服务
  - Nginx HTTPS 反向代理配置
  - 生产环境 config.yaml 关键调整
  - 首次注册站长 + 备份建议
2026-06-22 02:46:49 +08:00

2.9 KiB
Raw Blame History

生产环境部署指南

环境要求

依赖 最低版本 用途
Go 1.26 编译
PostgreSQL 16 主数据库(用户、帖子、通知等)
Redis 7 会话存储(推荐)
Nginx 1.24+ 反向代理 + 静态资源

1. 编译

CGO_ENABLED=0 go build -ldflags="-s -w" -o /usr/local/bin/mce cmd/server/main.go

2. 数据库初始化

# 创建数据库
sudo -u postgres createuser metazone -P
sudo -u postgres createdb metalab_prod -O metazone

# 执行迁移
for f in docs/migrations/0*.sql; do
    psql -U metazone -d metalab_prod -f "$f"
done

3. 配置

复制并修改生产配置:

cp config.yaml /etc/mce/config.yaml

生产环境关键调整:

server:
  mode: release                  # 关闭 debug 日志
  cookie_secure: true            # HTTPS 下启用

session:
  idle_timeout: 120              # 2 小时
  remember_timeout: 43200        # 30 天

redis:
  enabled: true                  # 生产环境建议启用

敏感信息通过环境变量注入(不写进配置文件):

export DB_PASSWORD="..."
export REDIS_PASSWORD="..."

4. systemd 服务

创建 /etc/systemd/system/mce.service

[Unit]
Description=MetaZone Community Engine
After=network.target postgresql.service redis.service

[Service]
Type=simple
User=mce
WorkingDirectory=/opt/mce
EnvironmentFile=-/etc/mce/env
ExecStart=/usr/local/bin/mce
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

/etc/mce/env

DB_PASSWORD=your_db_password
REDIS_PASSWORD=your_redis_password

启动:

sudo systemctl daemon-reload
sudo systemctl enable --now mce

5. Nginx 反向代理

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate     /etc/ssl/certs/your-domain.pem;
    ssl_certificate_key /etc/ssl/private/your-domain.key;

    # 静态资源Gin 不处理)
    location /static/ {
        root /opt/mce/templates/MetaLab-2026;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

6. 验证

# 服务状态
sudo systemctl status mce

# 日志
sudo journalctl -u mce -f

# 健康检查
curl -I https://your-domain.com

首次注册站长

部署后首个注册用户自动获得 owner(站长)权限,可访问 /admin 管理后台。

备份建议

# 数据库备份
pg_dump -U metazone metalab_prod | gzip > backup_$(date +%Y%m%d).sql.gz

# 上传文件备份
rsync -av /opt/mce/storage/ /backup/storage/