--- 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_HOSTNAME - FUNKWHALE_WEB_WORKERS - LOGLEVEL - REVERSE_PROXY_TYPE - STACK_NAME x-secrets: &default-sec: - db_password - django_secret_key services: app: image: nginx:1.20.0 environment: *default-env networks: - proxy - internal volumes: - music-data:/srv/funkwhale/data/music:ro - media-data:/srv/funkwhale/data/media - static-data:/srv/funkwhale/data/static - frontend-data:/src/funkwhale/front/dist:ro 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}`${EXTRA_DOMAINS})" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}" - "coop-cloud.${STACK_NAME}.version=" celeryworker: image: funkwhale/funkwhale:1.2 depends_on: - postgres - redis command: celery -A funkwhale_api.taskapp worker -l INFO environment: *default-env secrets: *default-sec volumes: - music-data:/srv/funkwhale/data/music:ro - media-data:/srv/funkwhale/data/media networks: - internal celerybeat: image: funkwhale/funkwhale:1.2 environment: *default-env secrets: *default-sec depends_on: - postgres - redis command: celery -A funkwhale_api.taskapp beat --pidfile= -l INFO networks: - internal api: image: funkwhale/funkwhale:1.2 environment: *default-env secrets: *default-sec depends_on: - postgres - redis volumes: - music-data:/srv/funkwhale/data/music:ro - media-data:/srv/funkwhale/data/media - static-data:/srv/funkwhale/data/static - frontend-data:/src/funkwhale/front/dist 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:4-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}