#!/bin/bash # 洪荒大陆 - WSL 部署脚本 # 目标机器:win.xuqinmin.com (WSL2 Ubuntu) # 用法:从本地执行 ssh -i ~/.ssh/id_rsa -p 2222 xuqm@jenkins.xuqinmin.com "wsl -d Ubuntu -- bash -s" < scripts/deploy-wsl.sh set -e echo "==========================================" echo " 洪荒大陆 - WSL 部署脚本" echo "==========================================" # 1. 检查环境 echo "" echo "[1/6] 检查环境..." echo " 系统: $(uname -s) $(uname -m)" echo " 内存: $(free -h | awk '/Mem:/ {print $7}') 可用" echo " 磁盘: $(df -h / | awk 'NR==2 {print $4}') 可用" # 2. 安装 Go(如果未安装) echo "" echo "[2/6] 检查 Go..." if command -v go &> /dev/null; then echo " Go 已安装: $(go version)" else echo " 安装 Go 1.22..." wget -q https://go.dev/dl/go1.22.4.linux-amd64.tar.gz -O /tmp/go.tar.gz sudo tar -C /usr/local -xzf /tmp/go.tar.gz rm /tmp/go.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc export PATH=$PATH:/usr/local/go/bin echo " Go 安装完成: $(go version)" fi # 3. 克隆代码(如果不存在) echo "" echo "[3/6] 检查代码..." DEPLOY_DIR="$HOME/lawless" if [ -d "$DEPLOY_DIR" ]; then echo " 代码目录已存在: $DEPLOY_DIR" cd "$DEPLOY_DIR" git pull origin main 2>/dev/null || echo " 跳过 git pull(可能未配置远程)" else echo " 克隆代码到 $DEPLOY_DIR..." # TODO: 替换为实际的 git 仓库地址 # git clone https://xuqinmin.com/xxx/lawless.git "$DEPLOY_DIR" echo " 请手动克隆代码到 $DEPLOY_DIR" echo " 命令: git clone <仓库地址> $DEPLOY_DIR" exit 1 fi # 4. 配置环境变量 echo "" echo "[4/6] 配置环境变量..." if [ ! -f .env ]; then cat > .env << 'EOF' # 数据库配置 DATABASE_URL=postgres://postgres:postgres@localhost:5432/honghuang?sslmode=disable # Nakama 配置 NAKAMA_SERVER_KEY=defaultkey NAKAMA_SECRET=mysecretkey # Redis/Valkey 配置 REDIS_URL=redis://localhost:6379 # Nacos 配置 NACOS_SERVER_ADDR=localhost:8848 NACOS_NAMESPACE=dev # 环境标识 ENV=development EOF echo " .env 文件已创建" else echo " .env 文件已存在" fi # 5. 启动 Docker 服务 echo "" echo "[5/6] 启动 Docker 服务..." cd "$DEPLOY_DIR" # 检查 docker-compose.yml 是否存在 if [ ! -f docker-compose.yml ]; then echo " 错误: docker-compose.yml 不存在" exit 1 fi # 启动服务(使用独立的项目名,避免与其他服务冲突) docker compose -p lawless -f docker-compose.yml up -d echo " 等待服务启动..." sleep 10 # 检查服务状态 echo " 服务状态:" docker compose -p lawless ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}" # 6. 数据库迁移 echo "" echo "[6/6] 数据库迁移..." cd "$DEPLOY_DIR" # 等待 PostgreSQL 就绪 echo " 等待 PostgreSQL 就绪..." for i in {1..30}; do if docker compose -p lawless exec -T postgres pg_isready -U postgres 2>/dev/null; then echo " PostgreSQL 已就绪" break fi sleep 2 done # 执行迁移 if [ -f scripts/migrate.sh ]; then echo " 执行数据库迁移..." bash scripts/migrate.sh fi # 执行 seed if [ -f scripts/seed.sh ]; then echo " 执行数据填充..." bash scripts/seed.sh fi echo "" echo "==========================================" echo " 部署完成!" echo "==========================================" echo "" echo "服务访问地址:" echo " PostgreSQL: localhost:5432" echo " Valkey: localhost:6379" echo " Nakama: localhost:7350 (gRPC) / localhost:7351 (HTTP)" echo " Nacos: localhost:8848" echo "" echo "常用命令:" echo " 查看日志: docker compose -p lawless logs -f" echo " 停止服务: docker compose -p lawless down" echo " 重启服务: docker compose -p lawless restart" echo " 构建服务端: cd server && make build" echo "" echo "外网访问配置:" echo " 如需外网访问,请在云服务器 nginx 中添加反代配置" echo " 或通过 frp 隧道暴露端口"