--- version: "3.8" x-environment: &default-env - CACHE_URL=redis://cache:6379/0 - CELERYD_CONCURRENCY - C_FORCE_ROOT=true - DATABASE_PASSWORD_FILE=/run/secrets/db_password - DJANGO_SECRET_KEY_FILE=/run/secrets/django_secret_key - DJANGO_SETTINGS_MODULE - DOMAIN - FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist - FUNKWHALE_HOSTNAME - FUNKWHALE_WEB_WORKERS - LOGLEVEL - MEDIA_ROOT=/srv/funkwhale/data/media - MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music - MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music - REVERSE_PROXY_TYPE - STACK_NAME - STATIC_ROOT=/srv/funkwhale/data/static x-secrets: &default-secrets - db_password - django_secret_key x-volumes: &default-volumes - music-data:/srv/funkwhale/data/music:ro - media-data:/srv/funkwhale/data/media - static-data:/srv/funkwhale/data/static - frontend-data:/srv/funkwhale/front/dist:ro services: app: image: nginx:1.25.3 environment: *default-env volumes: *default-volumes configs: - source: nginx_config target: /etc/nginx/nginx.conf networks: - proxy - internal deploy: restart_policy: condition: on-failure labels: - "traefik.enable=true" - "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=80" - "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}" - "coop-cloud.${STACK_NAME}.version=0.1.0+1.25.3" celeryworker: image: funkwhale/funkwhale:1.2 depends_on: - db - cache environment: *default-env secrets: *default-secrets volumes: *default-volumes configs: - source: app_entrypoint target: /docker-entrypoint.sh mode: 0555 entrypoint: /docker-entrypoint.sh command: celery -A funkwhale_api.taskapp worker -l INFO networks: - internal celerybeat: image: funkwhale/funkwhale:1.2 environment: *default-env secrets: *default-secrets volumes: *default-volumes depends_on: - db - cache configs: - source: app_entrypoint target: /docker-entrypoint.sh mode: 0555 entrypoint: /docker-entrypoint.sh command: celery -A funkwhale_api.taskapp beat --pidfile= -l INFO networks: - internal api: image: funkwhale/funkwhale:1.2 environment: *default-env secrets: *default-secrets volumes: *default-volumes depends_on: - db - cache configs: - source: app_entrypoint target: /docker-entrypoint.sh mode: 0555 entrypoint: /docker-entrypoint.sh command: /app/compose/django/server.sh networks: - internal db: image: postgres:10-alpine environment: - POSTGRES_USER=funkwhale - POSTGRES_PASSWORD_FILE=/run/secrets/db_password - POSTGRES_DB=funkwhale secrets: - db_password volumes: - postgres-data:/var/lib/postgresql/data networks: - internal cache: image: redis:7-alpine volumes: - redis-data:/data networks: - internal volumes: frontend-data: media-data: music-data: postgres-data: redis-data: static-data: networks: internal: proxy: external: true configs: nginx_config: name: ${STACK_NAME}_nginx_config_${NGINX_CONFIG_VERSION} file: nginx.conf.tmpl template_driver: golang app_entrypoint: name: ${STACK_NAME}_app_entrypoint_${APP_ENTRYPOINT_VERSION} file: entrypoint.sh.tmpl template_driver: golang secrets: db_password: external: true name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} django_secret_key: external: true name: ${STACK_NAME}_django_secret_key_${SECRET_DJANGO_SECRET_KEY_VERSION}