API/deploy-prod.sh
chenpei 08dd1c7f75 初始提交:添加充值记录和发票管理功能
功能特性:
- 用户端充值记录页面,从使用日志中分离
- 充值记录中的去开发票功能
- 管理员发票管理页面
- 发票申请、处理、邮件通知功能
- 侧边栏菜单更新
- UI优化和控制台清理
- Docker部署配置
- 生产环境安全配置
2025-09-04 18:07:16 +08:00

129 lines
3.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# NewAPI 生产环境部署脚本
set -e # 遇到错误立即退出
echo "🚀 NewAPI 生产环境部署脚本"
echo "==============================="
# 检查必要的文件
echo "📋 检查必要文件..."
if [ ! -f ".env.prod" ]; then
echo "❌ 未找到 .env.prod 文件!"
echo "请复制 env.prod.example 为 .env.prod 并填写正确的配置"
echo ""
echo "cp env.prod.example .env.prod"
echo "nano .env.prod # 编辑配置文件"
exit 1
fi
# 检查关键环境变量
echo "🔐 检查环境变量配置..."
source .env.prod
required_vars=("MYSQL_ROOT_PASSWORD" "MYSQL_PASSWORD" "REDIS_PASSWORD" "SESSION_SECRET")
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
echo "❌ 环境变量 $var 未设置!请检查 .env.prod 文件"
exit 1
fi
done
# 检查密码强度
if [ ${#MYSQL_ROOT_PASSWORD} -lt 12 ]; then
echo "⚠️ 警告: MySQL root密码长度不足12位,建议使用更强的密码"
fi
if [ ${#SESSION_SECRET} -lt 32 ]; then
echo "❌ SESSION_SECRET 长度必须至少32位!"
exit 1
fi
echo "✅ 环境变量检查通过"
# 检查Docker和Docker Compose
if ! command -v docker &> /dev/null; then
echo "❌ Docker 未安装!"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose 未安装!"
exit 1
fi
echo "✅ Docker 环境检查通过"
# 创建必要的目录
echo "📁 创建必要目录..."
mkdir -p data logs
# 停止现有服务
echo "🛑 停止现有服务..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod down 2>/dev/null || true
# 备份数据(如果存在)
if [ -d "data" ] && [ "$(ls -A data)" ]; then
backup_dir="backup-$(date +%Y%m%d-%H%M%S)"
echo "💾 备份现有数据到 $backup_dir..."
cp -r data "$backup_dir"
echo "✅ 数据已备份到 $backup_dir"
fi
# 构建镜像
echo "🔨 构建生产环境镜像..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod build --no-cache
# 启动服务
echo "🚀 启动生产环境服务..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod up -d
# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 30
# 检查服务状态
echo "📊 检查服务状态..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod ps
# 检查健康状态
echo "🔍 检查服务健康状态..."
max_attempts=10
attempt=1
while [ $attempt -le $max_attempts ]; do
echo "尝试 $attempt/$max_attempts..."
if curl -s http://localhost:3000/api/status > /dev/null; then
echo "✅ NewAPI 服务启动成功!"
echo ""
echo "🌐 访问信息:"
echo " Web界面: http://localhost:3000"
echo " API接口: http://localhost:3000/api/"
echo ""
echo "📋 后续步骤:"
echo "1. 配置反向代理(如nginx)"
echo "2. 设置SSL证书"
echo "3. 配置防火墙规则"
echo "4. 设置定期备份"
echo ""
echo "📊 查看日志: docker-compose -f docker-compose.prod.yml --env-file .env.prod logs -f"
echo "🛑 停止服务: docker-compose -f docker-compose.prod.yml --env-file .env.prod down"
break
fi
if [ $attempt -eq $max_attempts ]; then
echo "❌ 服务启动失败,请检查日志:"
echo "docker-compose -f docker-compose.prod.yml --env-file .env.prod logs"
exit 1
fi
sleep 10
((attempt++))
done
echo ""
echo "🎉 生产环境部署完成!"