|
#!/bin/bash |
|
set -e |
|
|
|
echo "Starting Dify services..." |
|
|
|
|
|
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}" |
|
|
|
|
|
until pg_isready -h "$PGHOST" -p "$PGPORT" -U "$PGUSER"; do |
|
echo "PostgreSQL is unavailable - sleeping" |
|
sleep 2 |
|
done |
|
|
|
|
|
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 |
|
|
|
|
|
cd /app/api |
|
if [ ! -f ".db_initialized" ]; then |
|
echo "Initializing database..." |
|
flask db upgrade |
|
touch .db_initialized |
|
fi |
|
|
|
|
|
echo "Starting API server on port 7860..." |
|
gunicorn --bind 0.0.0.0:7860 \ |
|
--workers 1 \ |
|
--worker-class gevent \ |
|
--timeout 200 \ |
|
--preload \ |
|
app:app & |
|
|
|
|
|
cd /app/web |
|
echo "Starting Next.js server on port 3000..." |
|
|
|
|
|
if [ ! -d ".next/standalone" ]; then |
|
echo "Error: Next.js standalone build not found" |
|
exit 1 |
|
fi |
|
|
|
|
|
if [ -d ".next/static" ]; then |
|
mkdir -p .next/standalone/.next |
|
cp -r .next/static .next/standalone/.next/ |
|
fi |
|
|
|
|
|
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 |