#!/bin/sh # Docker 容器启动脚本 # # 功能: # 1. 自动执行数据库迁移 # 2. 自动初始化系统数据(内置模板等) # 3. 启动 Next.js 应用 # # 客户无需任何手动操作,只需启动容器即可 set -e echo "==========================================" echo "FLNXI 素材库系统启动中..." echo "==========================================" # 1. 等待数据库就绪 echo "[1/3] 检查数据库连接..." MAX_RETRIES=30 RETRY_COUNT=0 while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do if echo "SELECT 1" | npx prisma db execute --stdin > /dev/null 2>&1; then echo "✓ 数据库连接成功" break fi RETRY_COUNT=$((RETRY_COUNT + 1)) echo "等待数据库就绪... ($RETRY_COUNT/$MAX_RETRIES)" sleep 2 done if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then echo "✗ 数据库连接超时,请检查 DATABASE_URL 配置" exit 1 fi # 2. 执行数据库迁移 echo "[2/3] 执行数据库迁移..." if npx prisma migrate deploy; then echo "✓ 数据库迁移完成" else echo "✗ 数据库迁移失败,已停止启动以保护数据一致性" echo "请先检查迁移日志、数据库连接和备份状态,修复后再重新启动容器" exit 1 fi # 3. 启动应用(系统初始化会在首次请求时自动执行) echo "[3/3] 启动应用服务..." echo "==========================================" echo "系统启动完成!" echo "访问地址: http://localhost:${PORT:-3000}" echo "==========================================" exec node server.js