dify / docker /entrypoint.sh
Severian's picture
feat: optimize Dockerfile for HuggingFace Spaces deployment
0848c81
raw
history blame
1.71 kB
#!/bin/bash
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