name: 部署到服务器 on: push: branches: [main, master] workflow_dispatch: env: TARGET_DIR: /home/quant/data/dev/checkin jobs: deploy: runs-on: ubuntu steps: - name: 安装 sshpass run: | sudo apt-get update sudo apt-get install -y sshpass - name: 在服务器上部署 env: SERVER_HOST: ${{ secrets.SERVER_HOST }} SERVER_USER: ${{ secrets.SERVER_USER }} SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }} SERVER_PORT: ${{ secrets.SERVER_PORT }} TARGET_DIR: ${{ env.TARGET_DIR }} ALIYUN_ACCESS_KEY_ID: ${{ secrets.ALIYUN_ACCESS_KEY_ID }} ALIYUN_ACCESS_KEY_SECRET: ${{ secrets.ALIYUN_ACCESS_KEY_SECRET }} ALIYUN_TINGWU_APP_KEY: ${{ secrets.ALIYUN_TINGWU_APP_KEY }} DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }} run: | sshpass -p "$SERVER_PASSWORD" ssh -p "$SERVER_PORT" -o StrictHostKeyChecking=no "${SERVER_USER}@${SERVER_HOST}" << EOF set -e run_sudo() { echo "$SERVER_PASSWORD" | sudo -S -p '' "\$@" } echo "===== 切换到目标目录: $TARGET_DIR =====" cd $TARGET_DIR || { echo "错误:目录 $TARGET_DIR 不存在!" exit 1 } echo -e "\n===== 停止并清理 Docker =====" run_sudo docker compose down || true echo -e "\n===== 拉取 Git 代码 =====" if ! git pull; then echo "警告:Git pull 失败,尝试强制同步远程代码..." git fetch --all CURRENT_BRANCH=\$(git rev-parse --abbrev-ref HEAD) git reset --hard origin/\$CURRENT_BRANCH git pull fi echo -e "\n===== 配置环境变量 =====" cat > backend/.env <<'ENVEOF' ALIYUN_ACCESS_KEY_ID=$ALIYUN_ACCESS_KEY_ID ALIYUN_ACCESS_KEY_SECRET=$ALIYUN_ACCESS_KEY_SECRET ALIYUN_OSS_ENDPOINT=https://oss-cn-shanghai.aliyuncs.com ALIYUN_OSS_BUCKET_NAME=tangledup-ai-staging ALIYUN_OSS_INTERNAL_ENDPOINT=https://oss-cn-shanghai-internal.aliyuncs.com ALIYUN_TINGWU_APP_KEY=$ALIYUN_TINGWU_APP_KEY DASHSCOPE_API_KEY=$DASHSCOPE_API_KEY ENVEOF echo -e "\n===== 启动 Docker 容器 =====" run_sudo docker compose up -d --build echo -e "\n===== 操作完成!=====" EOF