chore(compose): split into distinct manifests per environment and module
This commit is contained in:
parent
f17527d239
commit
c289e75dfa
|
@ -0,0 +1,8 @@
|
|||
include:
|
||||
- path: docker/app.default.yml
|
||||
env_file:
|
||||
- .env.default
|
||||
- path: docker/env.local.yml
|
||||
env_file:
|
||||
- .env.local
|
||||
- .env.default
|
|
@ -0,0 +1,7 @@
|
|||
name: funkwhale-services
|
||||
include:
|
||||
- path: docker/net.dnsmasq.yml
|
||||
- path: docker/net.traefik.yml
|
||||
# uncomment on Linux hosts with empty docker0 bridges, which else are DOWN
|
||||
# - path: docker/net.helpers.resolved.yml
|
||||
- path: docker/net.verify.yml
|
|
@ -1,43 +0,0 @@
|
|||
networks:
|
||||
internal:
|
||||
federation:
|
||||
external: true
|
||||
|
||||
x-django: &django
|
||||
|
||||
services:
|
||||
front:
|
||||
ports:
|
||||
- "${VUE_PORT:-8080}"
|
||||
|
||||
api:
|
||||
env_file:
|
||||
- .env.single-node
|
||||
- .env.dev
|
||||
- .env
|
||||
environment:
|
||||
- "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME:-localhost}"
|
||||
- "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL:-http}"
|
||||
- "FUNKWHALE_PORT=${FUNKWHALE_PORT:-8000}"
|
||||
- "DATABASE_URL=postgresql://postgres@postgres/postgres"
|
||||
- "CACHE_URL=redis://redis:6379/0"
|
||||
- "STATIC_ROOT=/staticfiles"
|
||||
extra_hosts: []
|
||||
|
||||
celeryworker:
|
||||
env_file:
|
||||
- .env.single-node
|
||||
- .env.dev
|
||||
- .env
|
||||
environment:
|
||||
- "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME:-localhost}"
|
||||
- "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL:-http}"
|
||||
- "FUNKWHALE_PORT=${FUNKWHALE_PORT:-8000}"
|
||||
- "DATABASE_URL=postgresql://postgres@postgres/postgres"
|
||||
- "CACHE_URL=redis://redis:6379/0"
|
||||
extra_hosts: []
|
||||
|
||||
nginx:
|
||||
ports:
|
||||
- "${NGINX_PORTS_MAPPING:-8000:80}"
|
||||
labels: {}
|
138
compose.yml
138
compose.yml
|
@ -1,134 +1,8 @@
|
|||
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
|
||||
include:
|
||||
- path: docker/app.default.yml
|
||||
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.default
|
||||
- path: docker/env.federation.yml
|
||||
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
|
||||
- .env.federation
|
||||
- .env.default
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
networks:
|
||||
internal:
|
||||
federation:
|
||||
external: true
|
||||
|
||||
services:
|
||||
front:
|
||||
build:
|
||||
context: ../front
|
||||
dockerfile: Dockerfile.dev
|
||||
ports:
|
||||
- "${VUE_PORT:-8080}:${VUE_PORT:-8080}"
|
||||
environment:
|
||||
- HOST
|
||||
- VUE_PORT
|
||||
volumes:
|
||||
- "../front:/app"
|
||||
- "/app/node_modules"
|
||||
- "../po:/po"
|
||||
networks:
|
||||
- internal
|
||||
command: "yarn dev --host"
|
||||
|
||||
postgres:
|
||||
image: "postgres:${POSTGRES_VERSION:-15}-alpine"
|
||||
environment:
|
||||
- POSTGRES_HOST_AUTH_METHOD
|
||||
command: postgres ${POSTGRES_ARGS:-}
|
||||
volumes:
|
||||
- "../data/${COMPOSE_PROJECT_NAME:-funkwhale}/postgres:/var/lib/postgresql/data"
|
||||
networks:
|
||||
- internal
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
volumes:
|
||||
- "../data/${COMPOSE_PROJECT_NAME:-funkwhale}/redis:/data"
|
||||
networks:
|
||||
- internal
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
|
@ -0,0 +1,32 @@
|
|||
x-django: &django
|
||||
image: funkwhale-api
|
||||
volumes:
|
||||
- ../api:/app
|
||||
- "${MUSIC_DIRECTORY_SERVE_PATH-../data/music}:/music:ro"
|
||||
- "../data/plugins:/srv/funkwhale/plugins"
|
||||
- "../data/staticfiles:/staticfiles"
|
||||
- "../data/media:/protected/media"
|
||||
- "../data/${COMPOSE_PROJECT_NAME}/media:/data/media"
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- internal
|
||||
|
||||
services:
|
||||
api:
|
||||
<<: *django
|
||||
build:
|
||||
context: ../api
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
install_dev_deps: 1
|
||||
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/"
|
||||
|
||||
celeryworker:
|
||||
<<: *django
|
||||
command: celery -A funkwhale_api.taskapp worker -l debug -B --concurrency=${CELERYD_CONCURRENCY}
|
|
@ -0,0 +1,18 @@
|
|||
services:
|
||||
nginx:
|
||||
image: nginx
|
||||
depends_on:
|
||||
- api
|
||||
- front
|
||||
volumes:
|
||||
- "${MUSIC_DIRECTORY_SERVE_PATH:-../data/music}:${MUSIC_DIRECTORY_PATH:-/music}:ro"
|
||||
|
||||
- ./etc/nginx/conf.dev:/etc/nginx/templates/default.conf.template: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
|
||||
- ../data/${COMPOSE_PROJECT_NAME}/media:/data/media:ro
|
||||
networks:
|
||||
- internal
|
|
@ -0,0 +1,86 @@
|
|||
networks:
|
||||
internal:
|
||||
federation:
|
||||
external: true
|
||||
|
||||
x-federation: &federation
|
||||
environment:
|
||||
- DEBUG
|
||||
|
||||
- DJANGO_SETTINGS_MODULE
|
||||
- DJANGO_SECRET_KEY
|
||||
|
||||
- EXTERNAL_REQUESTS_VERIFY_SSL
|
||||
|
||||
- "FORCE_HTTPS_URLS=${FORCE_HTTPS_URLS:-False}"
|
||||
- FUNKWHALE_PROTOCOL
|
||||
- "FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}"
|
||||
|
||||
- DATABASE_URL
|
||||
- CACHE_URL
|
||||
|
||||
- "STATIC_URL=${FUNKWHALE_PROTOCOL}://${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}/static/"
|
||||
- "MEDIA_URL=${FUNKWHALE_PROTOCOL}://${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}/media/"
|
||||
|
||||
- STATIC_ROOT
|
||||
- MEDIA_ROOT
|
||||
|
||||
- FUNKWHALE_SPA_HTML_ROOT
|
||||
- LDAP_ENABLED
|
||||
- BROWSABLE_API_ENABLED
|
||||
|
||||
- C_FORCE_ROOT
|
||||
- PYTHONDONTWRITEBYTECODE
|
||||
- PYTHONTRACEMALLOC
|
||||
|
||||
dns: 172.17.0.1
|
||||
dns_search: funkwhale.test
|
||||
|
||||
services:
|
||||
api:
|
||||
extends:
|
||||
file: ./app.django.yml
|
||||
service: api
|
||||
<<: *federation
|
||||
|
||||
celeryworker:
|
||||
extends:
|
||||
file: ./app.django.yml
|
||||
service: celeryworker
|
||||
<<: *federation
|
||||
|
||||
nginx:
|
||||
extends:
|
||||
file: ./app.nginx.yml
|
||||
service: nginx
|
||||
environment:
|
||||
- "MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}"
|
||||
- "FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}"
|
||||
|
||||
- FUNKWHALE_PROTOCOL
|
||||
|
||||
- FUNKWHALE_API_HOST
|
||||
- FUNKWHALE_API_PORT
|
||||
|
||||
- FUNKWHALE_FRONT_IP
|
||||
- FUNKWHALE_FRONT_PORT
|
||||
|
||||
- NGINX_MAX_BODY_SIZE
|
||||
|
||||
- STATIC_ROOT
|
||||
- "MEDIA_ROOT=${MEDIA_ROOT:-/data/media}"
|
||||
networks:
|
||||
- federation
|
||||
- internal
|
||||
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
|
||||
- "traefik.http.routers.funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-web.rule=Host(`${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}`)"
|
||||
- "traefik.http.routers.funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-web.entrypoints=web"
|
||||
|
||||
- "traefik.http.routers.funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.rule=Host(`${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}`)"
|
||||
- "traefik.http.routers.funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.entrypoints=webs"
|
||||
|
||||
- "traefik.http.routers.funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.tls=true"
|
||||
- "traefik.http.routers.funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.tls.domains[0].main=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}"
|
|
@ -0,0 +1,69 @@
|
|||
networks:
|
||||
internal:
|
||||
|
||||
x-local: &local
|
||||
environment:
|
||||
- DEBUG
|
||||
|
||||
- DJANGO_SETTINGS_MODULE
|
||||
- DJANGO_SECRET_KEY
|
||||
|
||||
- "FORCE_HTTPS_URLS=${FORCE_HTTPS_URLS:-False}"
|
||||
- FUNKWHALE_PROTOCOL
|
||||
- FUNKWHALE_HOSTNAME
|
||||
- FUNKWHALE_PORT
|
||||
|
||||
- DATABASE_URL
|
||||
- CACHE_URL
|
||||
|
||||
- STATIC_URL
|
||||
- MEDIA_URL
|
||||
|
||||
- STATIC_ROOT
|
||||
- MEDIA_ROOT
|
||||
|
||||
- FUNKWHALE_SPA_HTML_ROOT
|
||||
- LDAP_ENABLED
|
||||
- BROWSABLE_API_ENABLED
|
||||
|
||||
- C_FORCE_ROOT
|
||||
- PYTHONDONTWRITEBYTECODE
|
||||
- PYTHONTRACEMALLOC
|
||||
|
||||
services:
|
||||
api:
|
||||
extends:
|
||||
file: ./app.django.yml
|
||||
service: api
|
||||
<<: *local
|
||||
|
||||
celeryworker:
|
||||
extends:
|
||||
file: ./app.django.yml
|
||||
service: celeryworker
|
||||
<<: *local
|
||||
|
||||
nginx:
|
||||
extends:
|
||||
file: ./app.nginx.yml
|
||||
service: nginx
|
||||
ports:
|
||||
- "${NGINX_HOST_PORT:-8000:80}"
|
||||
environment:
|
||||
- "MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}"
|
||||
- "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME:-localhost}"
|
||||
|
||||
- FUNKWHALE_PROTOCOL
|
||||
|
||||
- FUNKWHALE_API_HOST
|
||||
- FUNKWHALE_API_PORT
|
||||
|
||||
- FUNKWHALE_FRONT_IP
|
||||
- FUNKWHALE_FRONT_PORT
|
||||
|
||||
- NGINX_MAX_BODY_SIZE
|
||||
|
||||
- STATIC_ROOT
|
||||
- "MEDIA_ROOT=${MEDIA_ROOT:-/data/media}"
|
||||
networks:
|
||||
- internal
|
Loading…
Reference in New Issue