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