功能特性: - 用户端充值记录页面,从使用日志中分离 - 充值记录中的去开发票功能 - 管理员发票管理页面 - 发票申请、处理、邮件通知功能 - 侧边栏菜单更新 - UI优化和控制台清理 - Docker部署配置 - 生产环境安全配置
129 lines
3.5 KiB
Bash
Executable File
129 lines
3.5 KiB
Bash
Executable File
#!/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 "🎉 生产环境部署完成!"
|