reworded docker compose files to segregate responsibilites. Dev version no longer uses the nginx proxy to proxy, merely to be the static file server. Also dev version no longer used gunicorn as it was screwing up the live reload functionality and didn't provide any other benefit.

This commit is contained in:
Wouter Vermeer
2026-04-30 17:41:21 +02:00
parent a0a0cfab8a
commit 358bd4cbf2
4 changed files with 52 additions and 31 deletions

View File

@@ -1,18 +1,36 @@
---
services: services:
web: web:
command: gunicorn --capture-output --enable-stdio-inheritance -b 0.0.0.0:8000 website.wsgi:application command: python manage.py runserver 0.0.0.0:8000
volumes: volumes: [./src:/src]
- ./src:/src
env_file: env_file:
- path: .env.template - path: .env.template
required: true required: true
- path: .env - path: .env
required: false required: false
environment:
DJANGO_RELOAD: true
DEBUG: true
ALLOWED_HOSTS: localhost,127.0.0.1
ports: [127.0.0.1:8000:8000]
db: db:
env_file: env_file:
- path: .env.template - path: .env.template
required: true required: true
- path: .env - path: .env
required: false required: false
proxy:
restart: unless-stopped
ports: [127.0.0.1:80:80]
environment: [NGINX_HOSTNAME=localhost, NGINX_PORT=80]
tailwind:
image: python:3.14-slim
working_dir: /src
command: >
sh -c "apt-get update && apt-get install -y curl &&
curl -sL https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64
-o /usr/local/bin/tailwindcss &&
chmod +x /usr/local/bin/tailwindcss &&
tailwindcss -i ./static/css/input.css -o ./static/css/output.css --watch"
volumes: [.:/src]
networks: [frontend]

View File

@@ -1,10 +1,25 @@
---
services: services:
web: web:
command: gunicorn website.wsgi:application
restart: unless-stopped
environment:
ALLOWED_HOSTS: ${NGINX_HOSTNAME}
DJANGO_SETTINGS_MODULE: ${DJANGO_SETTINGS_MODULE}
env_file: env_file:
- path: .env - path: .env
required: true required: true
db: db:
restart: unless-stopped
env_file: env_file:
- path: .env - path: .env
required: true required: true
adminer:
restart: unless-stopped
proxy:
restart: unless-stopped
ports: [80:80, 443:443]
environment:
- NGINX_HOSTNAME=${NGINX_HOSTNAME}
- NGINX_PORT=80
- NGINX_SSL_PORT=443

View File

@@ -1,14 +1,17 @@
---
services: services:
web: web:
command: python manage.py check --deploy; python -Wa manage.py test --noinput --parallel command: python manage.py check --deploy; python -Wa manage.py test --noinput
restart: "no" --parallel
environment:
DEBUG: false
DJANGO_SETTINGS_MODULE: website.settings.test
env_file: env_file:
- path: .env.template - path: .env.template
required: true required: true
db: db:
# Tmpfs keeps tests fast and isolated — no persistent volume needed
tmpfs: [/var/lib/postgresql/data]
env_file: env_file:
- path: .env.template - path: .env.template
required: true required: true

View File

@@ -2,16 +2,9 @@
services: services:
web: web:
build: . build: .
command: gunicorn website.wsgi:application
depends_on: depends_on:
db: db:
condition: service_healthy condition: service_healthy
environment:
ALLOWED_HOSTS: ${NGINX_HOSTNAME}
DJANGO_SETTINGS_MODULE: ${DJANGO_SETTINGS_MODULE}
# VIRTUAL_HOST: localhost
# VIRTUAL_PORT: 8000
restart: unless-stopped
volumes: [static_volume:/app/static, media_volume:/app/media] volumes: [static_volume:/app/static, media_volume:/app/media]
networks: [frontend, backend] networks: [frontend, backend]
db: db:
@@ -21,32 +14,24 @@ services:
POSTGRES_USER: ${POSTGRES_USER} POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes: [postgres_data:/var/lib/postgresql] volumes: [postgres_data:/var/lib/postgresql]
restart: unless-stopped
healthcheck: healthcheck:
test: [CMD-SHELL, 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DBNAME}'] test: [CMD-SHELL, 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DBNAME}']
interval: 5s interval: 5s
retries: 5 retries: 5
networks: [backend] networks: [backend]
adminer:
image: adminer
depends_on: [db]
restart: always
ports: [127.0.0.1:8080:8080]
networks: [backend]
proxy: proxy:
image: nginx:stable image: nginx:stable
volumes: volumes:
- ./.nginx/.templates:/etc/nginx/templates - ./.nginx/.templates:/etc/nginx/templates
- static_volume:/app/static:ro - static_volume:/app/static:ro
- media_volume:/app/media:ro - media_volume:/app/media:ro
restart: unless-stopped
ports: [80:80, 443:443]
environment:
- NGINX_HOSTNAME=${NGINX_HOSTNAME}
- NGINX_PORT=80
- NGINX_SSL_PORT=443
depends_on: [web] depends_on: [web]
networks: [frontend] networks: [frontend]
adminer:
image: adminer
depends_on: [db]
ports: [127.0.0.1:8080:8080]
networks: [backend]
networks: networks:
frontend: frontend:
backend: backend: