bookwyrm/docker-compose.yml
Wesley Aptekar-Cassels fe020b7c95 Add default retention policy to containers
Docker makes it extremely difficult to do time-based retention,
unfortunately, so space-based is the best we'll be able to do. This is
probably fairly aggressive for bookwyrm.social, and not nearly
aggressive enough for smaller instances, but it's better than the
current status quo.

I've only tested that this builds and runs, not that it actually has the
intended effect.
2023-04-03 21:30:28 -04:00

142 lines
3.4 KiB
YAML

version: '3'
x-logging:
&default-logging
driver: "json-file"
options:
max-size: "150m"
max-file: "2"
services:
nginx:
image: nginx:latest
logging: *default-logging
restart: unless-stopped
ports:
- "80:80"
- "443:443"
depends_on:
- web
networks:
- main
volumes:
- ./nginx:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/certbot
- static_volume:/app/static
- media_volume:/app/images
certbot:
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/certbot --email ${EMAIL} --agree-tos --no-eff-email -d ${DOMAIN} -d www.${DOMAIN}
#command: renew --webroot --webroot-path /var/www/certbot
logging: *default-logging
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/certbot
db:
build: postgres-docker
env_file: .env
entrypoint: /bookwyrm-entrypoint.sh
command: cron postgres
volumes:
- pgdata:/var/lib/postgresql/data
- backups:/backups
networks:
- main
web:
build: .
env_file: .env
command: gunicorn bookwyrm.wsgi:application --bind 0.0.0.0:8000
logging: *default-logging
volumes:
- .:/app
- static_volume:/app/static
- media_volume:/app/images
depends_on:
- db
- celery_worker
- redis_activity
networks:
- main
ports:
- "8000"
redis_activity:
image: redis
command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT}
logging: *default-logging
volumes:
- ./redis.conf:/etc/redis/redis.conf
- redis_activity_data:/data
env_file: .env
networks:
- main
restart: on-failure
redis_broker:
image: redis
command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT}
logging: *default-logging
volumes:
- ./redis.conf:/etc/redis/redis.conf
- redis_broker_data:/data
env_file: .env
networks:
- main
restart: on-failure
celery_worker:
env_file: .env
build: .
networks:
- main
command: celery -A celerywyrm worker -l info -Q high_priority,medium_priority,low_priority,imports,broadcast
logging: *default-logging
volumes:
- .:/app
- static_volume:/app/static
- media_volume:/app/images
depends_on:
- db
- redis_broker
restart: on-failure
celery_beat:
env_file: .env
build: .
networks:
- main
command: celery -A celerywyrm beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
logging: *default-logging
volumes:
- .:/app
- static_volume:/app/static
- media_volume:/app/images
depends_on:
- celery_worker
restart: on-failure
flower:
build: .
command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD} --url_prefix=flower
logging: *default-logging
env_file: .env
volumes:
- .:/app
networks:
- main
depends_on:
- db
- redis_broker
restart: on-failure
dev-tools:
build: dev-tools
env_file: .env
volumes:
- .:/app
volumes:
pgdata:
backups:
static_volume:
media_volume:
redis_broker_data:
redis_activity_data:
networks:
main: