- 将配置文件同步步骤从脚本改为使用,简化了部署过程 - 新增备份现有配置和生成新的及文件的逻辑 - 提升了配置文件的管理和部署效率 此更改优化了生产环境的配置文件处理流程。
This commit is contained in:
@ -157,28 +157,143 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 📦 同步配置文件
|
- name: 📦 同步配置文件
|
||||||
run: |
|
uses: appleboy/ssh-action@v1.0.0
|
||||||
# 使用国内镜像源安装sshpass
|
with:
|
||||||
echo "🔄 使用国内镜像源..."
|
host: ${{ secrets.HOST }}
|
||||||
sudo sed -i 's|http://.*.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
|
username: ${{ secrets.TYY_USER }}
|
||||||
sudo apt-get update -o Acquire::Retries=3 -o Acquire::http::Timeout=30
|
password: ${{ secrets.TYY_PWD }}
|
||||||
sudo apt-get install -y --allow-unauthenticated sshpass
|
port: ${{ secrets.PORT }}
|
||||||
|
script: |
|
||||||
|
echo "📦 开始同步配置文件..."
|
||||||
|
|
||||||
# 同步配置文件到服务器
|
# 创建目录
|
||||||
echo "📋 同步配置文件到服务器..."
|
mkdir -p /data/docker/photography/backend
|
||||||
export SSHPASS=${{ secrets.TYY_PWD }}
|
cd /data/docker/photography/backend
|
||||||
sshpass -e scp -o StrictHostKeyChecking=no -P ${{ secrets.PORT }} backend/docker-compose.prod.yml ${{ secrets.TYY_USER }}@${{ secrets.HOST }}:/data/docker/photography/backend/docker-compose.yml
|
|
||||||
|
|
||||||
# 创建生产环境配置文件
|
# 备份现有配置
|
||||||
echo "📋 创建生产环境配置..."
|
if [ -f docker-compose.yml ]; then
|
||||||
sed -e "s/DB_USER=.*/DB_USER=${{ secrets.POSTGRES_PHOTO_USER }}/" \
|
cp docker-compose.yml docker-compose.yml.backup.$(date +%Y%m%d-%H%M%S)
|
||||||
-e "s/DB_PASSWORD=.*/DB_PASSWORD=${{ secrets.POSTGRES_PHOTO_PWD }}/" \
|
echo "📋 已备份现有配置"
|
||||||
-e "s/DB_HOST=.*/DB_HOST=localhost/" \
|
fi
|
||||||
-e "s/APP_ENV=.*/APP_ENV=production/" \
|
|
||||||
backend/.env.example > /tmp/production.env
|
# 生成新的配置文件
|
||||||
|
cat > docker-compose.yml << 'EOF'
|
||||||
|
# Photography Portfolio Backend - Production Docker Compose
|
||||||
|
# 生产环境配置 - 使用现有 PostgreSQL 和 Redis 服务
|
||||||
|
|
||||||
|
services:
|
||||||
|
# 后端API服务 (仅API服务,无数据库)
|
||||||
|
api:
|
||||||
|
image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||||
|
container_name: photography-api
|
||||||
|
environment:
|
||||||
|
# 数据库配置 (连接现有服务)
|
||||||
|
DB_HOST: localhost
|
||||||
|
DB_PORT: 5432
|
||||||
|
DB_NAME: photography
|
||||||
|
DB_USER: ${{ secrets.POSTGRES_PHOTO_USER }}
|
||||||
|
DB_PASSWORD: ${{ secrets.POSTGRES_PHOTO_PWD }}
|
||||||
|
DB_SSL_MODE: disable
|
||||||
|
|
||||||
|
# Redis配置 (连接现有服务)
|
||||||
|
REDIS_HOST: localhost
|
||||||
|
REDIS_PORT: 6379
|
||||||
|
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
|
||||||
|
REDIS_DB: 0
|
||||||
|
|
||||||
|
# JWT配置
|
||||||
|
JWT_SECRET: ${{ secrets.JWT_SECRET }}
|
||||||
|
JWT_EXPIRE: 24h
|
||||||
|
|
||||||
|
# 服务配置
|
||||||
|
APP_ENV: production
|
||||||
|
APP_PORT: 8080
|
||||||
|
APP_HOST: 0.0.0.0
|
||||||
|
|
||||||
|
# CORS配置
|
||||||
|
CORS_ORIGINS: https://photography.iriver.top
|
||||||
|
|
||||||
|
# 文件上传配置
|
||||||
|
UPLOAD_PATH: /app/uploads
|
||||||
|
UPLOAD_MAX_SIZE: 10485760
|
||||||
|
|
||||||
|
# 日志配置
|
||||||
|
LOG_LEVEL: info
|
||||||
|
LOG_FORMAT: json
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
networks:
|
||||||
|
- app_network
|
||||||
|
volumes:
|
||||||
|
- uploads_data:/app/uploads
|
||||||
|
- logs_data:/app/logs
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "/usr/local/bin/health-check.sh"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
# 数据库迁移服务 (一次性运行)
|
||||||
|
migrate:
|
||||||
|
image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||||
|
container_name: photography-migrate
|
||||||
|
environment:
|
||||||
|
DB_HOST: localhost
|
||||||
|
DB_PORT: 5432
|
||||||
|
DB_NAME: photography
|
||||||
|
DB_USER: ${{ secrets.POSTGRES_PHOTO_USER }}
|
||||||
|
DB_PASSWORD: ${{ secrets.POSTGRES_PHOTO_PWD }}
|
||||||
|
DB_SSL_MODE: disable
|
||||||
|
entrypoint: ["/migrate", "up"]
|
||||||
|
restart: "no"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
uploads_data:
|
||||||
|
driver: local
|
||||||
|
logs_data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
app_network:
|
||||||
|
external: true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 创建环境变量文件
|
||||||
|
cat > .env << 'EOF'
|
||||||
|
# 生产环境配置
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_NAME=photography
|
||||||
|
DB_USER=${{ secrets.POSTGRES_PHOTO_USER }}
|
||||||
|
DB_PASSWORD=${{ secrets.POSTGRES_PHOTO_PWD }}
|
||||||
|
DB_SSL_MODE=disable
|
||||||
|
|
||||||
|
REDIS_HOST=localhost
|
||||||
|
REDIS_PORT=6379
|
||||||
|
REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
|
||||||
|
REDIS_DB=0
|
||||||
|
|
||||||
|
JWT_SECRET=${{ secrets.JWT_SECRET }}
|
||||||
|
JWT_EXPIRE=24h
|
||||||
|
|
||||||
|
APP_ENV=production
|
||||||
|
APP_PORT=8080
|
||||||
|
APP_HOST=0.0.0.0
|
||||||
|
|
||||||
|
CORS_ORIGINS=https://photography.iriver.top
|
||||||
|
|
||||||
|
UPLOAD_PATH=/app/uploads
|
||||||
|
UPLOAD_MAX_SIZE=10485760
|
||||||
|
|
||||||
|
LOG_LEVEL=info
|
||||||
|
LOG_FORMAT=json
|
||||||
|
EOF
|
||||||
|
|
||||||
sshpass -e scp -o StrictHostKeyChecking=no -P ${{ secrets.PORT }} /tmp/production.env ${{ secrets.TYY_USER }}@${{ secrets.HOST }}:/data/docker/photography/backend/.env
|
|
||||||
echo "✅ 配置文件同步完成"
|
echo "✅ 配置文件同步完成"
|
||||||
|
echo "📋 已部署以下文件:"
|
||||||
|
ls -la /data/docker/photography/backend/
|
||||||
|
|
||||||
- name: 🚀 部署到生产环境
|
- name: 🚀 部署到生产环境
|
||||||
uses: appleboy/ssh-action@v1.0.0
|
uses: appleboy/ssh-action@v1.0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user