Update Dockerfile
Browse files- Dockerfile +32 -22
Dockerfile
CHANGED
|
@@ -7,7 +7,8 @@ ENV POETRY_VERSION=1.8.4 \
|
|
| 7 |
POETRY_VIRTUALENVS_CREATE=true \
|
| 8 |
POETRY_VIRTUALENVS_IN_PROJECT=true \
|
| 9 |
POETRY_CACHE_DIR=/tmp/poetry_cache \
|
| 10 |
-
PYTHONDONTWRITEBYTECODE=1
|
|
|
|
| 11 |
|
| 12 |
# Create user first (HF Spaces requirement)
|
| 13 |
RUN useradd -m -u 1000 user
|
|
@@ -23,15 +24,16 @@ RUN apt-get update && apt-get install -y \
|
|
| 23 |
libmpc-dev \
|
| 24 |
nodejs \
|
| 25 |
npm \
|
| 26 |
-
postgresql \
|
| 27 |
-
postgresql-contrib \
|
|
|
|
| 28 |
&& rm -rf /var/lib/apt/lists/* \
|
| 29 |
&& pip install --no-cache-dir "poetry==${POETRY_VERSION}"
|
| 30 |
|
| 31 |
# Set up PostgreSQL directories and permissions
|
| 32 |
-
RUN mkdir -p /
|
| 33 |
-
chown -R user:user /
|
| 34 |
-
chmod 700 /
|
| 35 |
|
| 36 |
# Create application directories
|
| 37 |
RUN mkdir -p /app/api /app/web /data/storage && \
|
|
@@ -43,7 +45,8 @@ USER user
|
|
| 43 |
|
| 44 |
# Set environment for user
|
| 45 |
ENV HOME=/home/user \
|
| 46 |
-
PATH=/home/user/.local/bin:$PATH
|
|
|
|
| 47 |
|
| 48 |
# Pull official images
|
| 49 |
FROM langgenius/dify-web:latest AS web
|
|
@@ -97,21 +100,24 @@ EXPOSE 7860
|
|
| 97 |
RUN echo '#!/bin/bash\n\
|
| 98 |
echo "===== Application Startup at $(date "+%Y-%m-%d %H:%M:%S") ====="\n\
|
| 99 |
\n\
|
| 100 |
-
# Initialize PostgreSQL database\n\
|
| 101 |
-
|
| 102 |
-
\n\
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
|
|
|
|
|
|
|
|
|
| 106 |
\n\
|
| 107 |
# Start PostgreSQL\n\
|
| 108 |
-
pg_ctl -D $
|
| 109 |
\n\
|
| 110 |
# Wait for PostgreSQL to start\n\
|
| 111 |
max_tries=30\n\
|
| 112 |
count=0\n\
|
| 113 |
echo "Checking database connection..."\n\
|
| 114 |
-
until
|
| 115 |
echo "Waiting for database connection... (${count}/${max_tries})"\n\
|
| 116 |
sleep 2\n\
|
| 117 |
count=$((count+1))\n\
|
|
@@ -121,19 +127,23 @@ until psql -h localhost -p 5432 -U user -d postgres -c "SELECT 1" > /dev/null 2>
|
|
| 121 |
fi\n\
|
| 122 |
done\n\
|
| 123 |
\n\
|
| 124 |
-
#
|
| 125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
\n\
|
| 127 |
echo "Database connection successful"\n\
|
| 128 |
\n\
|
| 129 |
# Start application services\n\
|
| 130 |
cd /app/api && poetry run python -m flask db upgrade\n\
|
| 131 |
\n\
|
| 132 |
-
cd /app/api && poetry run python -m gunicorn app:app \
|
| 133 |
-
--bind ${DIFY_BIND_ADDRESS:-0.0.0.0}:${DIFY_PORT:-7860} \
|
| 134 |
-
--worker-class gevent \
|
| 135 |
-
--workers 1 \
|
| 136 |
-
--timeout 300 \
|
| 137 |
--preload &\n\
|
| 138 |
\n\
|
| 139 |
cd /app/web && node server.js &\n\
|
|
|
|
| 7 |
POETRY_VIRTUALENVS_CREATE=true \
|
| 8 |
POETRY_VIRTUALENVS_IN_PROJECT=true \
|
| 9 |
POETRY_CACHE_DIR=/tmp/poetry_cache \
|
| 10 |
+
PYTHONDONTWRITEBYTECODE=1 \
|
| 11 |
+
PATH=/usr/lib/postgresql/15/bin:$PATH
|
| 12 |
|
| 13 |
# Create user first (HF Spaces requirement)
|
| 14 |
RUN useradd -m -u 1000 user
|
|
|
|
| 24 |
libmpc-dev \
|
| 25 |
nodejs \
|
| 26 |
npm \
|
| 27 |
+
postgresql-15 \
|
| 28 |
+
postgresql-contrib-15 \
|
| 29 |
+
postgresql-client-15 \
|
| 30 |
&& rm -rf /var/lib/apt/lists/* \
|
| 31 |
&& pip install --no-cache-dir "poetry==${POETRY_VERSION}"
|
| 32 |
|
| 33 |
# Set up PostgreSQL directories and permissions
|
| 34 |
+
RUN mkdir -p /home/user/postgresql/data /home/user/postgresql/logs && \
|
| 35 |
+
chown -R user:user /home/user/postgresql && \
|
| 36 |
+
chmod 700 /home/user/postgresql/data
|
| 37 |
|
| 38 |
# Create application directories
|
| 39 |
RUN mkdir -p /app/api /app/web /data/storage && \
|
|
|
|
| 45 |
|
| 46 |
# Set environment for user
|
| 47 |
ENV HOME=/home/user \
|
| 48 |
+
PATH=/usr/lib/postgresql/15/bin:/home/user/.local/bin:$PATH \
|
| 49 |
+
PGDATA=/home/user/postgresql/data
|
| 50 |
|
| 51 |
# Pull official images
|
| 52 |
FROM langgenius/dify-web:latest AS web
|
|
|
|
| 100 |
RUN echo '#!/bin/bash\n\
|
| 101 |
echo "===== Application Startup at $(date "+%Y-%m-%d %H:%M:%S") ====="\n\
|
| 102 |
\n\
|
| 103 |
+
# Initialize PostgreSQL database if not already initialized\n\
|
| 104 |
+
if [ ! -f "$PGDATA/PG_VERSION" ]; then\n\
|
| 105 |
+
echo "Initializing PostgreSQL database..."\n\
|
| 106 |
+
initdb --auth=trust --encoding=UTF8 --locale=en_US.UTF-8\n\
|
| 107 |
+
\n\
|
| 108 |
+
# Configure PostgreSQL\n\
|
| 109 |
+
echo "host all all 0.0.0.0/0 md5" >> $PGDATA/pg_hba.conf\n\
|
| 110 |
+
echo "listen_addresses = '\''*'\''" >> $PGDATA/postgresql.conf\n\
|
| 111 |
+
fi\n\
|
| 112 |
\n\
|
| 113 |
# Start PostgreSQL\n\
|
| 114 |
+
pg_ctl start -D $PGDATA -l /home/user/postgresql/logs/postgresql.log\n\
|
| 115 |
\n\
|
| 116 |
# Wait for PostgreSQL to start\n\
|
| 117 |
max_tries=30\n\
|
| 118 |
count=0\n\
|
| 119 |
echo "Checking database connection..."\n\
|
| 120 |
+
until pg_isready -h localhost -p 5432; do\n\
|
| 121 |
echo "Waiting for database connection... (${count}/${max_tries})"\n\
|
| 122 |
sleep 2\n\
|
| 123 |
count=$((count+1))\n\
|
|
|
|
| 127 |
fi\n\
|
| 128 |
done\n\
|
| 129 |
\n\
|
| 130 |
+
# Set up database user and permissions\n\
|
| 131 |
+
psql -v ON_ERROR_STOP=1 --username user --dbname postgres <<-EOSQL\n\
|
| 132 |
+
ALTER USER user WITH PASSWORD '\''difyai123456'\'';\n\
|
| 133 |
+
CREATE DATABASE dify;\n\
|
| 134 |
+
GRANT ALL PRIVILEGES ON DATABASE dify TO user;\n\
|
| 135 |
+
EOSQL\n\
|
| 136 |
\n\
|
| 137 |
echo "Database connection successful"\n\
|
| 138 |
\n\
|
| 139 |
# Start application services\n\
|
| 140 |
cd /app/api && poetry run python -m flask db upgrade\n\
|
| 141 |
\n\
|
| 142 |
+
cd /app/api && poetry run python -m gunicorn app:app \\\n\
|
| 143 |
+
--bind ${DIFY_BIND_ADDRESS:-0.0.0.0}:${DIFY_PORT:-7860} \\\n\
|
| 144 |
+
--worker-class gevent \\\n\
|
| 145 |
+
--workers 1 \\\n\
|
| 146 |
+
--timeout 300 \\\n\
|
| 147 |
--preload &\n\
|
| 148 |
\n\
|
| 149 |
cd /app/web && node server.js &\n\
|