Files
youlegames/codes/agent/game-docker/docs/01-deployment.md

6.6 KiB
Raw Blame History

快速部署指南

首次将 YouleGames Docker 版部署到服务器的完整步骤。


前置要求

  • Linux 服务器(推荐 Ubuntu 22.04 / CentOS 8+,最低 2C 2G
  • 域名已解析到服务器 IP3 个域名API / DLWEB / wxserver
  • 服务器 80 和 443 端口可用
  • Docker 和 Docker Compose如未安装deploy.sh 会自动安装并配置国内镜像加速)

步骤 0配置 SSH 密钥认证(必须)

sync.ps1 每次执行会调用多次 scp / ssh,如果未配置密钥认证,每条命令都会弹出密码提示导致脚本中断。以下步骤在 Windows PowerShell 中完成Windows 10/11 内置 OpenSSH 客户端,无需额外安装)。

第一步:检查是否已有 SSH 密钥

# 默认密钥路径
Test-Path "$env:USERPROFILE\.ssh\id_ed25519"
# 输出 True 表示已有密钥,可跳到第三步

如果已有 RSA 旧密钥(id_rsa),同样可用,把下面命令中的 id_ed25519 替换为 id_rsa

第二步:生成密钥对

# 生成 Ed25519 密钥(更安全、更短)
ssh-keygen -t ed25519 -C "youle-deploy" -f "$env:USERPROFILE\.ssh\id_ed25519"
# 提示 passphrase 时直接回车两次(不设密码,脚本才能自动运行)

执行后生成两个文件:

文件 说明
~/.ssh/id_ed25519 私钥,绝不上传服务器,本地保管
~/.ssh/id_ed25519.pub 公钥,要发给服务器

第三步:将公钥上传到服务器

此步骤会要求输入一次密码,之后不再需要。

# 一行命令:读取公钥 → 追加到服务器 authorized_keys
cat "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh root@47.98.203.17 `
  "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

第四步:验证免密登录

# 直接登录,不弹密码提示则成功
ssh root@47.98.203.17 "echo 'SSH key auth OK'"

输出 SSH key auth OK 即表示配置成功,sync.ps1 可正常使用。

可选:配置 SSH 别名(简化命令)

C:\Users\<你的用户名>\.ssh\config(文件不存在则新建)中添加:

Host youle
    HostName 47.98.203.17
    User root
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

配置后可使用短名称操作:

ssh youle                           # 直接登录
# sync.ps1 使用别名
.\sync.ps1 -Server youle

可选:多台电脑共用同一台服务器

把每台电脑生成的 id_ed25519.pub 内容都追加到服务器的 ~/.ssh/authorized_keys(一行一个),不需要删除旧的公钥:

# 在第二台电脑上执行同样的上传命令即可(>> 追加而不是覆盖)
cat "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh root@47.98.203.17 `
  "cat >> ~/.ssh/authorized_keys"

步骤 1检查并修复行尾符LF

为什么需要这步? Windows 的 Git 默认 core.autocrlf=true,可能将脚本文件写成 CRLF。CRLF 格式的 shell 脚本在 Linux 容器中会报 not found / syntax error 错误,导致容器无法启动。

在上传前运行 fix-lf.ps1,自动扫描所有关键文件并修复:

.\fix-lf.ps1

根本修复(一次性,之后无需再跑): 执行以下命令让 .gitattributes 永久接管行尾符,此后任何机器 clone 均自动生效:

git config core.autocrlf false
git add --renormalize .
git commit -m "fix: normalize all line endings to LF"
git push

步骤 2上传项目到服务器

game-docker 目录上传到服务器 /opt/youle/ 下:

# 推荐:使用 sync.ps1tar 压缩单连接,比 scp -r 快约 10-50 倍)
# 首次部署用 full 模式,上传全部文件(约 10 MB 压缩包)
.\sync.ps1 -Mode full

# 日常代码更新用 app 模式(排除文档/测试,约 7 MB
.\sync.ps1

# 仅更新 Docker 配置文件docker-compose.yml、deploy.sh 等,不到 1 MB
.\sync.ps1 -Mode config

前提: 已完成步骤 0 的 SSH 密钥认证配置,否则 sync.ps1 会反复弹密码提示。

sync.ps1 会自动在服务器上创建 /opt/youle/game-docker/ 目录(如不存在)。

如不使用 sync.ps1,也可手动上传:

# 从 Git 仓库拉取
ssh root@your-server-ip
mkdir -p /opt/youle
cd /opt/youle
git clone <仓库地址> game-docker

上传后服务器上的目录结构:

/opt/youle/game-docker/
├── .env.example
├── docker-compose.yml
├── deploy.sh
├── init-ssl.sh
├── api/
├── dlweb/
├── wxserver_daoqi/
└── docker/

步骤 3准备环境变量

cd /opt/youle/game-docker
cp .env.example .env
vim .env

必须修改的关键配置:

# 父域名(三个子域名自动推导,无需单独配置)
# 将自动生成: api.<ROOT_DOMAIN>  dlapi.<ROOT_DOMAIN>
ROOT_DOMAIN=yourdomain.com

# 数据库(各服务数据库连接)
API_DB_HOST=your-rds-host
API_DB_PASSWORD=your-password
DLWEB_DB_HOST=your-rds-host
DLWEB_DB_PASSWORD=your-password
# ... 其他数据库配置

# 微信配置
WX_MINI_APPID=your-appid
WX_MINI_APPSECRET=your-secret
WX_PAY_MCHID=your-mchid
WX_PAY_KEY=your-key

# SSL 邮箱
SSL_EMAIL=your-email@example.com

完整变量说明见 环境变量配置


步骤 4首次申请 SSL 证书

chmod +x deploy.sh init-ssl.sh

# 先测试(不真正申请,验证域名解析是否正确)
./deploy.sh ssl-init --dry-run

# 正式申请
./deploy.sh ssl-init

SSL 证书详细管理见 SSL 证书管理


步骤 5启动所有服务

./deploy.sh up

启动后验证:

# 查看所有容器状态
./deploy.sh status

# 查看特定服务日志
./deploy.sh logs api
./deploy.sh logs dlweb
./deploy.sh logs syncjob
./deploy.sh logs cronjob

步骤 6部署命令速查

命令 说明
./deploy.sh up 构建并启动所有服务
./deploy.sh down 停止并移除所有容器
./deploy.sh restart 重启所有服务
./deploy.sh rebuild 无缓存重建所有镜像
./deploy.sh rebuild api 只重建指定服务
./deploy.sh logs [service] 查看日志(支持 -f 实时跟踪)
./deploy.sh status 查看容器运行状态
./deploy.sh ssl-init 首次申请 SSL 证书
./deploy.sh ssl-init --staging 用 Let's Encrypt 测试环境申请
./deploy.sh ssl-renew 手动续签证书
./deploy.sh ssl-status 查看证书到期时间