services: grampsweb: container_name: grampsweb image: ghcr.io/gramps-project/grampsweb:25.11.0 restart: always networks: - default - proxy ports: - "5000" environment: - GDK_BACKEND=- - GRAMPSWEB_TREE="Gramps Web" # will create a new tree if not exists - GRAMPSWEB_CELERY_CONFIG__broker_url="redis://grampsweb_redis:6379/0" - GRAMPSWEB_CELERY_CONFIG__result_backend="redis://grampsweb_redis:6379/0" - GRAMPSWEB_RATELIMIT_STORAGE_URI="redis://grampsweb_redis:6379/1" depends_on: - grampsweb_redis volumes: - gramps_users:/app/users - gramps_index:/app/indexdir - gramps_thumb_cache:/app/thumbnail_cache - gramps_cache:/app/cache - gramps_secret:/app/secret - gramps_db:/root/.gramps/grampsdb - gramps_media:/app/media - gramps_tmp:/tmp labels: - "traefik.enable=true" - "traefik.http.routers.grampsweb.rule=Host(`gramps.lan`)" healthcheck: test: curl -f http://127.0.0.1:5000 || exit 1 interval: 30s retries: 6 grampsweb_celery: container_name: grampsweb_celery image: ghcr.io/gramps-project/grampsweb:25.11.0 restart: always environment: - GRAMPSWEB_TREE="Gramps Web" # will create a new tree if not exists - GRAMPSWEB_CELERY_CONFIG__broker_url="redis://grampsweb_redis:6379/0" - GRAMPSWEB_CELERY_CONFIG__result_backend="redis://grampsweb_redis:6379/0" - GRAMPSWEB_RATELIMIT_STORAGE_URI="redis://grampsweb_redis:6379/1" volumes: - gramps_users:/app/users - gramps_index:/app/indexdir - gramps_thumb_cache:/app/thumbnail_cache - gramps_cache:/app/cache - gramps_secret:/app/secret - gramps_db:/root/.gramps/grampsdb - gramps_media:/app/media - gramps_tmp:/tmp depends_on: - grampsweb_redis command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2 grampsweb_redis: image: docker.io/library/redis:7.2.4-alpine container_name: grampsweb_redis restart: always volumes: gramps_users: driver: local driver_opts: type: 'none' o: 'bind' device: '/app/gramps/users' gramps_index: driver: local driver_opts: type: 'none' o: 'bind' device: '/app/gramps/index' gramps_thumb_cache: gramps_cache: gramps_secret: driver: local driver_opts: type: 'none' o: 'bind' device: '/app/gramps/secret' gramps_db: driver: local driver_opts: type: 'none' o: 'bind' device: '/app/gramps/db' gramps_media: driver: local driver_opts: type: 'none' o: 'bind' device: '/app/gramps/media' gramps_tmp: networks: proxy: name: proxy external: true