feat: 双环境自动化部署(生产 + 测试)

- 新增 docker-compose.prod.yml / docker-compose.test.yml 双环境配置
- 新增 docker-compose.gateway.yml Nginx 网关按域名路由
- 新增 Dockerfile.website 官网镜像构建
- 新增 gateway.conf 支持 8 个域名路由
- 更新 .gitlab-ci.yml 支持 prod/test 双分支自动部署
- 更新 Makefile 新增 prod-/test-/gateway- 快捷命令
- 新增 scripts/setup-server.sh 服务器一键初始化脚本
- 修复 Nginx 配置服务名不匹配问题
- 修复前端 Dockerfile 缺少 packages/ 导致构建失败
- 删除旧的 docker-compose.yml

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-01 19:12:32 +08:00
parent 0bbbe20ec7
commit bcf16fe53d
10 changed files with 786 additions and 169 deletions
+107
View File
@@ -0,0 +1,107 @@
#!/bin/bash
set -e
echo "============================================"
echo " 品居会 - 服务器首次初始化"
echo "============================================"
echo ""
# ===== 1. 系统更新 =====
echo ">>> 更新系统包..."
sudo apt update && sudo apt upgrade -y
# ===== 2. 安装 Docker =====
if ! command -v docker &> /dev/null; then
echo ">>> 安装 Docker..."
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
echo "Docker 已安装。可能需要重新登录以生效。"
else
echo ">>> Docker 已安装,跳过。"
fi
# ===== 3. 验证 Docker Compose =====
if ! docker compose version &> /dev/null; then
echo ">>> 安装 Docker Compose 插件..."
sudo apt install -y docker-compose-plugin
else
echo ">>> Docker Compose 已安装,跳过。"
fi
# ===== 4. 安装 Git =====
if ! command -v git &> /dev/null; then
echo ">>> 安装 Git..."
sudo apt install -y git
else
echo ">>> Git 已安装,跳过。"
fi
# ===== 5. 安装 pnpm =====
if ! command -v pnpm &> /dev/null; then
echo ">>> 安装 pnpm..."
npm install -g pnpm 2>/dev/null || { echo "需要先安装 Node.js"; exit 1; }
else
echo ">>> pnpm 已安装,跳过。"
fi
# ===== 6. 配置环境变量 =====
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
ENV_FILE="$PROJECT_DIR/deploy/docker/.env"
if [ ! -f "$ENV_FILE" ]; then
echo ">>> 创建 .env 文件..."
cp "$PROJECT_DIR/deploy/docker/.env.example" "$ENV_FILE"
echo ""
echo " *** 重要 ***"
echo " 请编辑 $ENV_FILE 填入真实密码和密钥。"
echo " 必填变量:"
echo " - PROD_DB_PASSWORD 生产环境数据库密码"
echo " - PROD_JWT_SECRET 生产环境 JWT 密钥"
echo " - TEST_DB_PASSWORD 测试环境数据库密码"
echo " - TEST_JWT_SECRET 测试环境 JWT 密钥"
echo ""
read -p " 按 Enter 打开编辑器,或 Ctrl+C 退出手动编辑..."
${EDITOR:-vi} "$ENV_FILE"
else
echo ">>> .env 文件已存在,跳过。"
fi
# ===== 7. 创建 Docker 网络 =====
echo ">>> 创建 Docker 网络..."
docker network create rent-prod 2>/dev/null || echo " rent-prod 网络已存在。"
docker network create rent-test 2>/dev/null || echo " rent-test 网络已存在。"
# ===== 8. 启动网关 =====
echo ">>> 启动 Gateway Nginx..."
cd "$PROJECT_DIR"
docker compose -f deploy/docker/docker-compose.gateway.yml up -d
echo ""
echo "============================================"
echo " 初始化完成!"
echo "============================================"
echo ""
echo "后续步骤:"
echo " 1. 确认 .env 中的密码已正确填写"
echo " 2. 部署生产环境:make prod-deploy"
echo " 3. 部署测试环境:make test-deploy"
echo ""
echo " 配置以下 DNS 记录指向本服务器 IP:"
echo ""
echo " 生产环境:"
echo " api.pinzhuhui.com"
echo " www.pinzhuhui.com"
echo " merchant.pinzhuhui.com"
echo " platform-admin.pinzhuhui.com"
echo ""
echo " 测试环境:"
echo " api-test.pinzhuhui.com"
echo " test.pinzhuhui.com"
echo " merchant-test.pinzhuhui.com"
echo " platform-admin-test.pinzhuhui.com"
echo ""
echo " 4. (可选)配置 SSL 证书:"
echo " sudo apt install certbot"
echo " sudo certbot certonly --standalone -d api.pinzhuhui.com -d www.pinzhuhui.com ..."
echo ""