diff --git a/.woodpecker.yml b/.woodpecker.yml index 09dbd0f..36bdf7d 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -146,13 +146,9 @@ steps: - ssh -o StrictHostKeyChecking=no root@139.155.109.62 "echo Server connection OK" - ssh -o StrictHostKeyChecking=no root@139.155.109.62 "df -h / /home | head -3" - echo "Syncing build artifacts to production server" - - "rsync -avz --delete -e \"ssh -o StrictHostKeyChecking=no\" dist/ root@139.155.109.62:/home/novalon/docker-app/novalon-website/dist/" - - "rsync -avz -e \"ssh -o StrictHostKeyChecking=no\" public/ root@139.155.109.62:/home/novalon/docker-app/novalon-website/public/" - - "rsync -avz -e \"ssh -o StrictHostKeyChecking=no\" package.json package-lock.json root@139.155.109.62:/home/novalon/docker-app/novalon-website/" - - "rsync -avz -e \"ssh -o StrictHostKeyChecking=no\" Dockerfile.prod docker-compose.server.yml root@139.155.109.62:/home/novalon/docker-app/novalon-website/" - - "rsync -avz -e \"ssh -o StrictHostKeyChecking=no\" scripts/deploy-production.sh root@139.155.109.62:/home/novalon/docker-app/novalon-website/scripts/" - - "if [ -f .env.production ]; then rsync -avz -e \"ssh -o StrictHostKeyChecking=no\" .env.production root@139.155.109.62:/home/novalon/docker-app/novalon-website/; else echo \"No .env.production file\"; fi" - - "ssh -o StrictHostKeyChecking=no root@139.155.109.62 \"cd /home/novalon/docker-app/novalon-website && [ -f docker-compose.server.yml ] && mv docker-compose.server.yml docker-compose.yml; chmod +x scripts/deploy-production.sh && ./scripts/deploy-production.sh\"" + - chmod +x scripts/sync-to-production.sh + - ./scripts/sync-to-production.sh + - ssh -o StrictHostKeyChecking=no root@139.155.109.62 "cd /home/novalon/docker-app/novalon-website && test -f docker-compose.server.yml && mv docker-compose.server.yml docker-compose.yml; chmod +x scripts/deploy-production.sh && ./scripts/deploy-production.sh" - echo "Production deployment completed" volumes: - /tmp/npm-cache:/root/.npm diff --git a/scripts/sync-to-production.sh b/scripts/sync-to-production.sh new file mode 100755 index 0000000..a05bbc4 --- /dev/null +++ b/scripts/sync-to-production.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -e + +SERVER="root@139.155.109.62" +DEPLOY_PATH="/home/novalon/docker-app/novalon-website" +SSH_OPTS="-o StrictHostKeyChecking=no" + +echo "=== 同步构建产物到生产服务器 ===" + +echo "1. 同步dist目录..." +rsync -avz --delete -e "ssh $SSH_OPTS" dist/ ${SERVER}:${DEPLOY_PATH}/dist/ + +echo "2. 同步public目录..." +rsync -avz -e "ssh $SSH_OPTS" public/ ${SERVER}:${DEPLOY_PATH}/public/ + +echo "3. 同步package文件..." +rsync -avz -e "ssh $SSH_OPTS" package.json package-lock.json ${SERVER}:${DEPLOY_PATH}/ + +echo "4. 同步Docker配置..." +rsync -avz -e "ssh $SSH_OPTS" Dockerfile.prod docker-compose.server.yml ${SERVER}:${DEPLOY_PATH}/ + +echo "5. 同步部署脚本..." +rsync -avz -e "ssh $SSH_OPTS" scripts/deploy-production.sh ${SERVER}:${DEPLOY_PATH}/scripts/ + +echo "6. 同步环境配置(如果存在)..." +if [ -f .env.production ]; then + rsync -avz -e "ssh $SSH_OPTS" .env.production ${SERVER}:${DEPLOY_PATH}/ + echo "✅ .env.production已同步" +else + echo "⚠️ 没有.env.production文件" +fi + +echo "" +echo "✅ 所有构建产物已成功同步到生产服务器"