Severian commited on
Commit
b9bc222
·
verified ·
1 Parent(s): fdb0511

Update entrypoint.sh

Browse files
Files changed (1) hide show
  1. entrypoint.sh +99 -40
entrypoint.sh CHANGED
@@ -1,40 +1,99 @@
1
- #!/bin/bash
2
-
3
- set -e
4
-
5
- if [[ "${MIGRATION_ENABLED}" == "true" ]]; then
6
- echo "Running migrations"
7
- cd /app/api && PYTHONPATH=/app/api flask db upgrade
8
- fi
9
-
10
- if [[ "${MODE}" == "worker" ]]; then
11
-
12
- # Get the number of available CPU cores
13
- if [ "${CELERY_AUTO_SCALE,,}" = "true" ]; then
14
- # Set MAX_WORKERS to the number of available cores if not specified
15
- AVAILABLE_CORES=$(nproc)
16
- MAX_WORKERS=${CELERY_MAX_WORKERS:-$AVAILABLE_CORES}
17
- MIN_WORKERS=${CELERY_MIN_WORKERS:-1}
18
- CONCURRENCY_OPTION="--autoscale=${MAX_WORKERS},${MIN_WORKERS}"
19
- else
20
- CONCURRENCY_OPTION="-c ${CELERY_WORKER_AMOUNT:-1}"
21
- fi
22
-
23
- exec celery -A app.celery worker -P ${CELERY_WORKER_CLASS:-gevent} $CONCURRENCY_OPTION --loglevel ${LOG_LEVEL} \
24
- -Q ${CELERY_QUEUES:-dataset,mail,ops_trace,app_deletion}
25
-
26
- elif [[ "${MODE}" == "beat" ]]; then
27
- exec celery -A app.celery beat --loglevel ${LOG_LEVEL}
28
- else
29
- if [[ "${DEBUG}" == "true" ]]; then
30
- exec flask run --host=${DIFY_BIND_ADDRESS:-0.0.0.0} --port=${DIFY_PORT:-5001} --debug
31
- else
32
- exec gunicorn \
33
- --bind "${DIFY_BIND_ADDRESS:-0.0.0.0}:${DIFY_PORT:-5001}" \
34
- --workers ${SERVER_WORKER_AMOUNT:-1} \
35
- --worker-class ${SERVER_WORKER_CLASS:-gevent} \
36
- --timeout ${GUNICORN_TIMEOUT:-200} \
37
- --preload \
38
- app:app
39
- fi
40
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Base Python image with correct version
2
+ FROM python:3.12-slim-bookworm
3
+
4
+ # Create non-root user early (HF requirement)
5
+ RUN useradd -m -u 1000 user
6
+
7
+ # Set up environment variables
8
+ ENV PYTHONDONTWRITEBYTECODE=1 \
9
+ POETRY_VERSION=1.8.4 \
10
+ POETRY_HOME=/opt/poetry \
11
+ POETRY_CACHE_DIR=/tmp/poetry_cache \
12
+ POETRY_NO_INTERACTION=1 \
13
+ POETRY_VIRTUALENVS_IN_PROJECT=true \
14
+ POETRY_VIRTUALENVS_CREATE=true \
15
+ POETRY_REQUESTS_TIMEOUT=15 \
16
+ PYTHONPATH=/app/api \
17
+ FLASK_APP=/app/api/app.py
18
+
19
+ WORKDIR /app
20
+
21
+ # Install system dependencies
22
+ RUN pip install --no-cache-dir "poetry==${POETRY_VERSION}" && \
23
+ apt-get update && \
24
+ apt-get install -y --no-install-recommends \
25
+ gcc g++ libc-dev libffi-dev libgmp-dev libmpfr-dev libmpc-dev \
26
+ postgresql postgresql-contrib postgresql-server-dev-all \
27
+ curl git nodejs npm && \
28
+ rm -rf /var/lib/apt/lists/*
29
+
30
+ # Copy application code with correct permissions
31
+ COPY --chown=user . /app/api
32
+ WORKDIR /app/api
33
+
34
+ # Install Python dependencies including Flask-Migrate
35
+ RUN pip install --no-cache-dir flask==3.0.1 \
36
+ gunicorn==22.0.0 \
37
+ gevent==24.11.1 \
38
+ celery==5.4.0 \
39
+ redis==5.0.3 \
40
+ psycopg2-binary==2.9.6 \
41
+ sqlalchemy==2.0.29 \
42
+ flask-migrate==4.0.5 \
43
+ flask-sqlalchemy==3.1.1
44
+
45
+ # Create and set up entrypoint script
46
+ RUN echo '#!/bin/bash\n\
47
+ set -e\n\
48
+ \n\
49
+ if [[ "${MIGRATION_ENABLED}" == "true" ]]; then\n\
50
+ echo "Running migrations"\n\
51
+ cd /app/api && PYTHONPATH=/app/api flask db upgrade\n\
52
+ fi\n\
53
+ \n\
54
+ if [[ "${DEBUG}" == "true" ]]; then\n\
55
+ exec flask run --host=${DIFY_BIND_ADDRESS:-0.0.0.0} --port=7860 --debug\n\
56
+ else\n\
57
+ exec gunicorn \\\n\
58
+ --bind "0.0.0.0:7860" \\\n\
59
+ --workers ${SERVER_WORKER_AMOUNT:-1} \\\n\
60
+ --worker-class ${SERVER_WORKER_CLASS:-gevent} \\\n\
61
+ --timeout ${GUNICORN_TIMEOUT:-200} \\\n\
62
+ --preload \\\n\
63
+ app:app\n\
64
+ fi' > /entrypoint.sh && \
65
+ chmod +x /entrypoint.sh && \
66
+ chown user:user /entrypoint.sh
67
+
68
+ # Set up directories and permissions
69
+ RUN mkdir -p /var/run/postgresql /var/lib/postgresql/data /data/storage && \
70
+ chown -R postgres:postgres /var/run/postgresql /var/lib/postgresql/data && \
71
+ chmod 2777 /var/run/postgresql && \
72
+ chmod 700 /var/lib/postgresql/data && \
73
+ chown -R user:user /app
74
+
75
+ # Switch to user
76
+ USER user
77
+
78
+ # Set up user environment (HF requirement)
79
+ ENV HOME=/home/user \
80
+ PATH=/home/user/.local/bin:$PATH
81
+
82
+ # Set required environment variables
83
+ ENV EDITION=SELF_HOSTED \
84
+ DEPLOY_ENV=PRODUCTION \
85
+ MODE=api \
86
+ DB_USERNAME=postgres \
87
+ DB_PASSWORD=difyai123456 \
88
+ DB_HOST=localhost \
89
+ DB_PORT=5432 \
90
+ DB_DATABASE=dify \
91
+ MIGRATION_ENABLED=true
92
+
93
+ # Expose HF required port
94
+ EXPOSE 7860
95
+
96
+ WORKDIR /app/api
97
+
98
+ ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
99
+