File size: 2,160 Bytes
a4bef0b 12e3afc 8a398ad 8f2f82d 8a398ad 8f2f82d 53d8b27 8a398ad 8f2f82d a300380 8f2f82d a300380 53d8b27 a4bef0b 53d8b27 8f2f82d 53d8b27 8f2f82d 53d8b27 8f2f82d e3a6f0b a4bef0b 12e3afc a4bef0b 12e3afc 070b654 12e3afc 070b654 a4bef0b 12e3afc e3a6f0b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
#!/bin/bash
set -e
echo "Starting Dify services..."
# Enhanced database connection check with timeout
check_postgres() {
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
echo "Checking PostgreSQL connection to ${DB_HOST}:${DB_PORT} (attempt $attempt/$max_attempts)..."
if pg_isready -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USERNAME}" -d "${DB_DATABASE}"; then
return 0
fi
attempt=$((attempt + 1))
sleep 5
done
return 1
}
# Try to connect with timeout
if ! check_postgres; then
echo "Failed to connect to PostgreSQL after multiple attempts. Exiting."
exit 1
fi
check_redis() {
redis-cli -h "${REDIS_HOST}" -p "${REDIS_PORT}" -a "${REDIS_PASSWORD}" ping > /dev/null 2>&1
}
echo "Waiting for Redis to be ready..."
until check_redis; do
echo "Redis is unavailable (host: ${REDIS_HOST}, port: ${REDIS_PORT}) - retrying..."
sleep 5
done
echo "Redis is ready!"
# Initialize database if needed
cd /app/api
if [ ! -f ".db_initialized" ]; then
echo "Running database migrations..."
flask db upgrade
if [ $? -eq 0 ]; then
touch .db_initialized
echo "Database initialization completed successfully"
else
echo "Database initialization failed"
exit 1
fi
fi
# Start services
echo "Starting API server on port 7860..."
gunicorn --bind 0.0.0.0:7860 \
--workers 1 \
--worker-class gevent \
--timeout 200 \
--preload \
app:app &
# Start Next.js web server
cd /app/web
echo "Starting Next.js server on port 3000..."
# Ensure standalone directory exists
if [ ! -d ".next/standalone" ]; then
echo "Error: Next.js standalone build not found"
exit 1
fi
# Copy static files if they exist
if [ -d ".next/static" ]; then
mkdir -p .next/standalone/.next
cp -r .next/static .next/standalone/.next/
fi
# Copy public files if they exist
if [ -d "public" ]; then
cp -r public .next/standalone/
fi
cd .next/standalone
echo "Starting Next.js standalone server..."
NODE_ENV=production \
NEXT_TELEMETRY_DISABLED=1 \
node server.js &
# Wait for both processes
wait |