networks: internal: federation: external: true x-django: &django env_file: - .env.dev - .env build: context: ./api dockerfile: Dockerfile args: install_dev_deps: 1 image: funkwhale-api volumes: - ./api:/app - "${MUSIC_DIRECTORY_SERVE_PATH-./data/music}:/music:ro" - "./data/plugins:/srv/funkwhale/plugins" - "./data/staticfiles:/staticfiles" - "./data/media:/data/media" environment: - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME:-localhost}" - "FUNKWHALE_HOSTNAME_SUFFIX=funkwhale.test" - "FUNKWHALE_HOSTNAME_PREFIX=${COMPOSE_PROJECT_NAME}" - "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL:-http}" - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" - "STATIC_ROOT=/staticfiles" depends_on: - postgres - redis networks: - internal extra_hosts: - "node1.funkwhale.test:host-gateway" - "node2.funkwhale.test:host-gateway" - "node3.funkwhale.test:host-gateway" services: front: build: context: front dockerfile: Dockerfile.dev env_file: - .env.dev - .env environment: - "HOST=0.0.0.0" - "VUE_PORT=${VUE_PORT:-8080}" volumes: - "./front:/app" - "/app/node_modules" - "./po:/po" networks: - internal command: "yarn dev --host" postgres: healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 env_file: - .env.dev - .env image: postgres:${POSTGRES_VERSION:-15}-alpine environment: - "POSTGRES_HOST_AUTH_METHOD=trust" command: postgres ${POSTGRES_ARGS:-} volumes: - "./data/${COMPOSE_PROJECT_NAME:-node1}/postgres:/var/lib/postgresql/data" networks: - internal redis: env_file: - .env.dev - .env image: redis:7-alpine volumes: - "./data/${COMPOSE_PROJECT_NAME:-node1}/redis:/data" networks: - internal api: <<: *django command: > bash -c "funkwhale-manage collectstatic --no-input && uvicorn --reload config.asgi:application --host 0.0.0.0 --port 5000 --reload-dir config/ --reload-dir=funkwhale_api/" cap_add: - SYS_PTRACE celeryworker: <<: *django command: celery -A funkwhale_api.taskapp worker -l debug -B --concurrency=${CELERYD_CONCURRENCY-0} nginx: env_file: - .env.dev - .env image: nginx environment: - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE:-100M}" - "FUNKWHALE_API_HOST=${FUNKWHALE_API_HOST:-api}" - "FUNKWHALE_API_PORT=${FUNKWHALE_API_PORT:-5000}" - "FUNKWHALE_FRONT_IP=${FUNKWHALE_FRONT_IP:-front}" - "FUNKWHALE_FRONT_PORT=${VUE_PORT:-8080}" - "COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME}" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME:-localhost}" - "STATIC_ROOT=/staticfiles" depends_on: - api - front volumes: - ./docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - "${MUSIC_DIRECTORY_SERVE_PATH:-./data/music}:/music:ro" - ./deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - "./front:/frontend:ro" - "./data/staticfiles:/usr/share/nginx/html/staticfiles:ro" - "./data/media:/protected/media:ro" networks: - federation - internal labels: traefik.backend: "${COMPOSE_PROJECT_NAME}" traefik.frontend.rule: "Host:${COMPOSE_PROJECT_NAME}.funkwhale.test" traefik.enable: "true" traefik.federation.protocol: "http" traefik.federation.port: "80" traefik.frontend.passHostHeader: true traefik.docker.network: federation