Spaces:
Paused
Paused
set -e | |
echo "Starting Dify services..." | |
# Set database connection variables from environment | |
export PGHOST="${DB_HOST:-db}" | |
export PGPORT="${DB_PORT:-5432}" | |
export PGUSER="${DB_USERNAME:-postgres}" | |
export PGPASSWORD="${DB_PASSWORD:-difyai123456}" | |
export PGDATABASE="${DB_DATABASE:-dify}" | |
# Wait for PostgreSQL with proper credentials | |
until pg_isready -h "$PGHOST" -p "$PGPORT" -U "$PGUSER"; do | |
echo "PostgreSQL is unavailable - sleeping" | |
sleep 2 | |
done | |
# Wait for Redis with proper credentials | |
until redis-cli -h "${REDIS_HOST:-redis}" -p "${REDIS_PORT:-6379}" \ | |
-a "${REDIS_PASSWORD:-difyai123456}" ping; do | |
echo "Redis is unavailable - sleeping" | |
sleep 2 | |
done | |
# Initialize database if needed | |
cd /app/api | |
if [ ! -f ".db_initialized" ]; then | |
echo "Initializing database..." | |
flask db upgrade | |
touch .db_initialized | |
fi | |
# Start API server in background | |
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 |