Severian commited on
Commit
e56bcc7
·
verified ·
1 Parent(s): 8081ea9

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +32 -21
Dockerfile CHANGED
@@ -8,7 +8,6 @@ ENV POETRY_VERSION=1.8.4 \
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
  LANG=en_US.UTF-8 \
13
  LANGUAGE=en_US:en \
14
  LC_ALL=en_US.UTF-8
@@ -27,19 +26,18 @@ RUN apt-get update && apt-get install -y \
27
  libmpc-dev \
28
  nodejs \
29
  npm \
30
- postgresql-15 \
31
- postgresql-contrib-15 \
32
- postgresql-client-15 \
33
  locales \
34
  && rm -rf /var/lib/apt/lists/* \
35
  && pip install --no-cache-dir "poetry==${POETRY_VERSION}" \
36
  && sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
37
  && locale-gen
38
 
39
- # Set up PostgreSQL directories and permissions
40
- RUN mkdir -p /home/user/postgresql/data /home/user/postgresql/logs && \
41
- chown -R user:user /home/user/postgresql && \
42
- chmod 700 /home/user/postgresql/data
43
 
44
  # Create application directories
45
  RUN mkdir -p /app/api /app/web /data/storage && \
@@ -52,7 +50,7 @@ USER user
52
  # Set environment for user
53
  ENV HOME=/home/user \
54
  PATH=/usr/lib/postgresql/15/bin:/home/user/.local/bin:$PATH \
55
- PGDATA=/home/user/postgresql/data
56
 
57
  # Pull official images
58
  FROM langgenius/dify-web:latest AS web
@@ -104,41 +102,54 @@ EXPOSE 7860
104
 
105
  # Create startup script
106
  RUN echo '#!/bin/bash\n\
 
107
  echo "===== Application Startup at $(date "+%Y-%m-%d %H:%M:%S") ====="\n\
108
  \n\
109
  # Initialize PostgreSQL database if not already initialized\n\
110
  if [ ! -f "$PGDATA/PG_VERSION" ]; then\n\
111
  echo "Initializing PostgreSQL database..."\n\
112
- initdb --auth=trust --no-locale --encoding=UTF8\n\
113
  \n\
114
  # Configure PostgreSQL\n\
115
- echo "host all all 0.0.0.0/0 md5" >> $PGDATA/pg_hba.conf\n\
116
- echo "listen_addresses = '\''*'\''" >> $PGDATA/postgresql.conf\n\
 
 
 
 
 
 
117
  fi\n\
118
  \n\
119
- # Start PostgreSQL\n\
120
- pg_ctl start -D $PGDATA -l /home/user/postgresql/logs/postgresql.log -w\n\
 
121
  \n\
122
- # Wait for PostgreSQL to start\n\
123
  max_tries=30\n\
124
  count=0\n\
125
  echo "Checking database connection..."\n\
126
  until pg_isready -h localhost -p 5432; do\n\
 
 
 
 
127
  echo "Waiting for database connection... (${count}/${max_tries})"\n\
128
  sleep 2\n\
129
  count=$((count+1))\n\
130
  if [ $count -gt $max_tries ]; then\n\
131
  echo "Failed to connect to database after ${max_tries} attempts"\n\
 
 
132
  exit 1\n\
133
  fi\n\
134
  done\n\
135
  \n\
136
- # Set up database user and permissions\n\
137
- psql -v ON_ERROR_STOP=1 --username user --dbname postgres <<-EOSQL\n\
138
- ALTER USER user WITH PASSWORD '\''difyai123456'\'';\n\
139
- CREATE DATABASE dify;\n\
140
- GRANT ALL PRIVILEGES ON DATABASE dify TO user;\n\
141
- EOSQL\n\
142
  \n\
143
  echo "Database connection successful"\n\
144
  \n\
 
8
  POETRY_VIRTUALENVS_IN_PROJECT=true \
9
  POETRY_CACHE_DIR=/tmp/poetry_cache \
10
  PYTHONDONTWRITEBYTECODE=1 \
 
11
  LANG=en_US.UTF-8 \
12
  LANGUAGE=en_US:en \
13
  LC_ALL=en_US.UTF-8
 
26
  libmpc-dev \
27
  nodejs \
28
  npm \
29
+ postgresql \
30
+ postgresql-contrib \
 
31
  locales \
32
  && rm -rf /var/lib/apt/lists/* \
33
  && pip install --no-cache-dir "poetry==${POETRY_VERSION}" \
34
  && sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
35
  && locale-gen
36
 
37
+ # Set up PostgreSQL directories with standard locations
38
+ RUN mkdir -p /var/run/postgresql /var/lib/postgresql/data /var/log/postgresql && \
39
+ chown -R user:user /var/run/postgresql /var/lib/postgresql/data /var/log/postgresql && \
40
+ chmod 700 /var/lib/postgresql/data
41
 
42
  # Create application directories
43
  RUN mkdir -p /app/api /app/web /data/storage && \
 
50
  # Set environment for user
51
  ENV HOME=/home/user \
52
  PATH=/usr/lib/postgresql/15/bin:/home/user/.local/bin:$PATH \
53
+ PGDATA=/var/lib/postgresql/data
54
 
55
  # Pull official images
56
  FROM langgenius/dify-web:latest AS web
 
102
 
103
  # Create startup script
104
  RUN echo '#!/bin/bash\n\
105
+ set -e\n\
106
  echo "===== Application Startup at $(date "+%Y-%m-%d %H:%M:%S") ====="\n\
107
  \n\
108
  # Initialize PostgreSQL database if not already initialized\n\
109
  if [ ! -f "$PGDATA/PG_VERSION" ]; then\n\
110
  echo "Initializing PostgreSQL database..."\n\
111
+ initdb --username=user --pwfile=<(echo "$DB_PASSWORD") --auth=md5 --encoding=UTF8\n\
112
  \n\
113
  # Configure PostgreSQL\n\
114
+ echo "local all all trust" > "$PGDATA/pg_hba.conf"\n\
115
+ echo "host all all 127.0.0.1/32 md5" >> "$PGDATA/pg_hba.conf"\n\
116
+ echo "host all all ::1/128 md5" >> "$PGDATA/pg_hba.conf"\n\
117
+ echo "host all all 0.0.0.0/0 md5" >> "$PGDATA/pg_hba.conf"\n\
118
+ \n\
119
+ echo "listen_addresses = '\''*'\''" >> "$PGDATA/postgresql.conf"\n\
120
+ echo "max_connections = 100" >> "$PGDATA/postgresql.conf"\n\
121
+ echo "shared_buffers = 128MB" >> "$PGDATA/postgresql.conf"\n\
122
  fi\n\
123
  \n\
124
+ # Start PostgreSQL with detailed logging\n\
125
+ echo "Starting PostgreSQL server..."\n\
126
+ pg_ctl start -D "$PGDATA" -l /var/log/postgresql/postgresql.log -o "-c logging_collector=on -c log_directory='\''/var/log/postgresql'\'' -c log_filename='\''postgresql-%Y-%m-%d_%H%M%S.log'\'' -c log_statement='\''all'\''" -w\n\
127
  \n\
128
+ # Wait for PostgreSQL to start and show logs if there are issues\n\
129
  max_tries=30\n\
130
  count=0\n\
131
  echo "Checking database connection..."\n\
132
  until pg_isready -h localhost -p 5432; do\n\
133
+ if [ $count -eq 0 ]; then\n\
134
+ echo "PostgreSQL logs:"\n\
135
+ tail -n 50 /var/log/postgresql/postgresql.log\n\
136
+ fi\n\
137
  echo "Waiting for database connection... (${count}/${max_tries})"\n\
138
  sleep 2\n\
139
  count=$((count+1))\n\
140
  if [ $count -gt $max_tries ]; then\n\
141
  echo "Failed to connect to database after ${max_tries} attempts"\n\
142
+ echo "Last 100 lines of PostgreSQL logs:"\n\
143
+ tail -n 100 /var/log/postgresql/postgresql.log\n\
144
  exit 1\n\
145
  fi\n\
146
  done\n\
147
  \n\
148
+ # Create database if it doesn'\''t exist\n\
149
+ if ! psql -lqt | cut -d \| -f 1 | grep -qw dify; then\n\
150
+ echo "Creating database dify..."\n\
151
+ createdb -U user dify\n\
152
+ fi\n\
 
153
  \n\
154
  echo "Database connection successful"\n\
155
  \n\