version: "3" services: front: build: context: front dockerfile: Dockerfile.dev env_file: - .env.dev - .env environment: - "HOST=0.0.0.0" - "VUE_PORT=${VUE_PORT-8080}" ports: - "${VUE_PORT-8080}" volumes: - "./front:/app" - "/app/node_modules" - "./po:/po" networks: - internal command: "yarn dev --host" postgres: 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: env_file: - .env.dev - .env build: context: ./api dockerfile: Dockerfile args: install_dev_deps: 1 image: funkwhale-api 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/" 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 # - minio - redis networks: - internal cap_add: - SYS_PTRACE extra_hosts: - "node1.funkwhale.test:172.17.0.1" - "node2.funkwhale.test:172.17.0.1" - "node3.funkwhale.test:172.17.0.1" celeryworker: env_file: - .env.dev - .env image: funkwhale-api depends_on: - postgres # - minio - redis command: celery -A funkwhale_api.taskapp worker -l debug -B --concurrency=${CELERYD_CONCURRENCY-0} 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" volumes: - ./api:/app - "${MUSIC_DIRECTORY_SERVE_PATH-./data/music}:/music:ro" - "./data/plugins:/srv/funkwhale/plugins" - "./data/media:/data/media" networks: - internal extra_hosts: - "node1.funkwhale.test:172.17.0.1" - "node2.funkwhale.test:172.17.0.1" - "node3.funkwhale.test:172.17.0.1" nginx: env_file: - .env.dev - .env image: nginx ports: - "${NGINX_PORTS_MAPPING-8000:80}" 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}" 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:/staticfiles:ro" - "./data/media:/protected/media:ro" networks: - federation - internal labels: traefik.backend: "${COMPOSE_PROJECT_NAME-node1}" traefik.frontend.rule: "Host:${COMPOSE_PROJECT_NAME-node1}.funkwhale.test,${NODE_IP-127.0.0.1},${DJANGO_ALLOWED_HOSTS}" traefik.enable: "true" traefik.federation.protocol: "http" traefik.federation.port: "80" traefik.frontend.passHostHeader: true traefik.docker.network: federation api-docs: image: swaggerapi/swagger-ui:v3.37.2 environment: - "API_URL=/swagger.yml" ports: - "8002:8080" volumes: - "./docs/swagger.yml:/usr/share/nginx/html/swagger.yml" - "./docs/api:/usr/share/nginx/html/api" typesense: env_file: - .env.dev - .env image: typesense/typesense:0.24.0 networks: - internal volumes: - ./typesense/data:/data command: --data-dir /data --enable-cors profiles: - typesense # minio: # image: minio/minio # command: server /data # volumes: # - "./data/${COMPOSE_PROJECT_NAME-node1}/minio:/data" # environment: # - "MINIO_ACCESS_KEY=${AWS_ACCESS_KEY_ID-access_key}" # - "MINIO_SECRET_KEY=${AWS_SECRET_ACCESS_KEY-secret_key}" # - "MINIO_HTTP_TRACE: /dev/stdout" # ports: # - "9000:9000" # networks: # - federation # - internal networks: internal: federation: name: federation external: true