configure docker, docker-compose

This commit is contained in:
bruks 2026-10-05 09:35:32 +01:00
commit 1d1e942a65
4 changed files with 139 additions and 84 deletions

View file

@ -1,32 +1,30 @@
# FROM python:3.10.0-alpine3.15
FROM python:3.14.2-alpine3.12
FROM python:3.14.2-slim
WORKDIR /usr/src/app
RUN apk add --update --no-cache \
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
build-base \
openldap-dev \
python3-dev \
postgresql-dev \
jpeg-dev \
build-essential \
libldap2-dev \
libsasl2-dev \
libpq-dev \
libjpeg-dev \
zlib1g-dev \
libxml2-dev \
libxslt-dev \
libxslt1-dev \
libmemcached-dev \
zlib-dev \
&& rm -rf /var/cache/apk/*
## For alpine 3.15 replace postgresql-dev with libpq-dev
# FIX https://github.com/python-ldap/python-ldap/issues/432
RUN echo 'INPUT ( libldap.so )' > /usr/lib/libldap_r.so
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt ./
# Pillow seems to need LIBRARY_PATH set as follows: (see: https://github.com/python-pillow/Pillow/issues/1763#issuecomment-222383534)
RUN LIBRARY_PATH=/lib:/usr/lib /bin/sh -c "pip install --no-cache-dir -r requirements.txt --no-deps"
RUN LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib \
pip install --no-cache-dir -r requirements.txt --no-deps
COPY ./ .
COPY entrypoint.sh /
COPY . .
ENTRYPOINT ["/entrypoint.sh" ]
CMD ["gunicorn", "--workers", "1", "--bind", "0.0.0.0:8000", "dynamicweb.wsgi:application"]

22
deploy/nginx/deploy.conf Normal file
View file

@ -0,0 +1,22 @@
server {
listen 80;
server_name 185.203.114.147;
location /static/ {
alias /usr/src/app/staticfiles/;
}
location /media/ {
alias /usr/src/app/media/;
}
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

View file

@ -1,95 +1,128 @@
services:
db:
image: postgres:16
restart: unless-stopped
env_file:
- .env
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- backend
healthcheck:
test:
[
"CMD-SHELL",
"pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"
]
interval: 10s
timeout: 5s
retries: 5
web:
build: .
restart: unless-stopped
env_file:
- .env
environment:
POSTGRES_HOST: db
POSTGRES_PORT: 5432
command: >
gunicorn dynamicweb.wsgi:application
--bind 0.0.0.0:8000
--workers 3
--access-logfile -
--error-logfile -
volumes:
- static_data:/app/staticfiles
- media_data:/app/media
expose:
- "8000"
depends_on:
db:
condition: service_healthy
image: postgres:16
restart: unless-stopped
networks:
- backend
env_file:
- .env
environment:
POSTGRES_DB: app
POSTGRES_USER: postgres
POSTGRES_HOST_AUTH_METHOD: trust
nginx:
image: nginx:alpine
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test:
[
"CMD-SHELL",
"pg_isready -U $${POSTGRES_USER} -d app"
]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- backend
ports:
- "80:80"
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis_data:/data
command: redis-server --appendonly yes
networks:
- backend
web:
build:
context: .
restart: unless-stopped
env_file:
- .env
environment:
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DB: app
CELERY_BROKER_URL: redis://redis:6379/0
CELERY_RESULT_BACKEND: redis://redis:6379/1
volumes:
- static_data:/usr/src/app/staticfiles
- media_data:/usr/src/app/media
expose:
- "8000"
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
networks:
- backend
celery:
build:
context: .
restart: unless-stopped
env_file:
- .env
environment:
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DB: app
CELERY_BROKER_URL: redis://redis:6379/0
CELERY_RESULT_BACKEND: redis://redis:6379/1
command: celery -A dynamicweb worker --loglevel=info
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
networks:
- backend
nginx:
image: nginx:latest
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./deploy/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- static_data:/usr/src/app/staticfiles:ro
- media_data:/usr/src/app/media:ro
depends_on:
- web
networks:
- backend
volumes:
- ./deploy/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- static_data:/app/staticfiles:ro
- media_data:/app/media:ro
depends_on:
- web
postgres_data:
redis_data:
static_data:
media_data:
networks:
- backend
volumes:
postgres_data:
static_data:
media_data:
networks:
backend:
backend:

View file

@ -259,6 +259,8 @@ DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'app',
"USER": "postgres",
"HOST": env("HOST"),
}
}