#!/usr/bin/env bash set -euo pipefail REPO_URL="git@gitee.com:hezhaohui123/gen2d.git" INSTALL_DIR="${GEN2D_DIR:-$HOME/gen2d}" PORT="${GEN2D_PORT:-10000}" echo "==> gen2d 一键部署脚本" # 1. 安装依赖检查 for cmd in git docker; do if ! command -v "$cmd" &>/dev/null; then echo "错误: 未找到 $cmd,请先安装" exit 1 fi done if ! docker compose version &>/dev/null && ! docker-compose version &>/dev/null; then echo "错误: 未找到 docker compose,请先安装" exit 1 fi # 2. 拉取代码 if [ -d "$INSTALL_DIR/.git" ]; then echo "==> 目录 $INSTALL_DIR 已存在,拉取最新代码..." cd "$INSTALL_DIR" git pull else echo "==> 克隆仓库到 $INSTALL_DIR ..." git clone "$REPO_URL" "$INSTALL_DIR" cd "$INSTALL_DIR" fi # 3. 环境变量检查 ENV_FILE="$INSTALL_DIR/backend/.env" ENV_EXAMPLE="$INSTALL_DIR/backend/.env.example" if [ ! -f "$ENV_FILE" ]; then if [ -f "$ENV_EXAMPLE" ]; then echo "==> 未找到 backend/.env,已从 .env.example 复制模板" cp "$ENV_EXAMPLE" "$ENV_FILE" echo " 请编辑 $ENV_FILE 填入实际配置后重新运行本脚本" exit 0 else echo "错误: backend/.env 和 .env.example 均不存在,请手动创建" exit 1 fi fi # 4. 构建并启动 echo "==> 构建并启动 Docker 容器..." if docker compose version &>/dev/null; then COMPOSE_CMD="docker compose" else COMPOSE_CMD="docker-compose" fi GEN2D_PORT="$PORT" $COMPOSE_CMD up -d --build # 获取公网 IP PUBLIC_IP=$(curl -s --connect-timeout 3 https://ifconfig.me 2>/dev/null || \ curl -s --connect-timeout 3 https://api.ipify.org 2>/dev/null || \ echo "YOUR_SERVER_IP") echo "" echo "==> 部署完成!" echo " 前端访问: http://$PUBLIC_IP:$PORT" echo " 后端健康检查: http://$PUBLIC_IP:$PORT/api/v1/health" echo "" echo "常用命令:" echo " 查看日志: cd $INSTALL_DIR && $COMPOSE_CMD logs -f" echo " 停止服务: cd $INSTALL_DIR && $COMPOSE_CMD down" echo " 重启服务: cd $INSTALL_DIR && $COMPOSE_CMD restart"