chore(compose): dependencies, environments and healthchecks

This commit is contained in:
jon r 2025-02-25 01:09:10 +01:00
parent ca9a4687af
commit f24869ce3d
5 changed files with 68 additions and 47 deletions

View File

@ -4,26 +4,19 @@ networks:
external: true external: true
x-django: &django x-django: &django
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
dns: 172.17.0.1 dns: 172.17.0.1
dns_search: funkwhale.test dns_search: funkwhale.test
services: services:
front: front:
build: extends:
context: ./front file: ./compose/app.vue.yml
dockerfile: Dockerfile.dev service: app
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"
api: api:
extends: extends:
@ -41,26 +34,14 @@ services:
extends: extends:
file: ./compose/app.nginx.yml file: ./compose/app.nginx.yml
service: nginx service: nginx
environment: depends_on:
- "MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}" front:
- "FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}" condition: service_healthy
api:
- FUNKWHALE_PROTOCOL condition: service_healthy
- 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: networks:
- web - web
- internal - internal
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"

View File

@ -5,11 +5,11 @@ x-django: &django
volumes: volumes:
- ../api:/app - ../api:/app
- ../.env:/app/.env - ../.env:/app/.env
- '${MUSIC_DIRECTORY_SERVE_PATH:-../.state/music}:/music:ro' - "${MUSIC_DIRECTORY_SERVE_PATH:-../.state/music}:/music:ro"
- '../.state/plugins:/srv/funkwhale/plugins' - "../.state/plugins:/srv/funkwhale/plugins"
- '../.state/staticfiles:/staticfiles' - "../.state/staticfiles:/staticfiles"
- '../.state/media:/protected/media' - "../.state/media:/protected/media"
- '../.state/${COMPOSE_PROJECT_NAME:-funkwhale}/media:/data/media' - "../.state/${COMPOSE_PROJECT_NAME:-funkwhale}/media:/data/media"
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy
@ -55,10 +55,11 @@ services:
context: ../api context: ../api
dockerfile: Dockerfile.debian dockerfile: Dockerfile.debian
healthcheck: healthcheck:
test: ['CMD-SHELL', 'docker compose logs api | grep -q "Uvicorn running on" || exit 0'] test: 'curl -o /dev/null -s -w "%{http_code}" http://localhost:5000/api/v1 | grep "301" || exit 1'
interval: 3s interval: 10s
timeout: 5s timeout: 5s
retries: 3 retries: 3
start_period: 60s
command: > command: >
sh -c " sh -c "
funkwhale-manage collectstatic --no-input && funkwhale-manage collectstatic --no-input &&
@ -72,6 +73,3 @@ services:
pip install watchdog[watchmedo] && pip install watchdog[watchmedo] &&
watchmedo auto-restart --patterns="*.py" --recursive -- celery -A funkwhale_api.taskapp worker -l debug -B --concurrency=${CELERYD_CONCURRENCY} watchmedo auto-restart --patterns="*.py" --recursive -- celery -A funkwhale_api.taskapp worker -l debug -B --concurrency=${CELERYD_CONCURRENCY}
' '
depends_on:
api:
condition: service_healthy

View File

@ -1,9 +1,24 @@
services: services:
nginx: nginx:
image: nginx image: nginx
depends_on: networks:
- api - internal
- front 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_HOST
- FUNKWHALE_FRONT_PORT
- NGINX_MAX_BODY_SIZE
- STATIC_ROOT
- "MEDIA_ROOT=${MEDIA_ROOT:-/data/media}"
volumes: volumes:
- '${MUSIC_DIRECTORY_SERVE_PATH:-../.state/music}:${MUSIC_DIRECTORY_PATH:-/music}:ro' - '${MUSIC_DIRECTORY_SERVE_PATH:-../.state/music}:${MUSIC_DIRECTORY_PATH:-/music}:ro'
@ -14,5 +29,8 @@ services:
- ../.state/staticfiles:/usr/share/nginx/html/staticfiles:ro - ../.state/staticfiles:/usr/share/nginx/html/staticfiles:ro
- ../.state/media:/protected/media:ro - ../.state/media:/protected/media:ro
- ../.state/${COMPOSE_PROJECT_NAME:-funkwhale}/media:/data/media:ro - ../.state/${COMPOSE_PROJECT_NAME:-funkwhale}/media:/data/media:ro
networks: healthcheck:
- internal test: 'curl -o /dev/null -s -w "%{http_code}" http://localhost:80/ | grep "200" || exit 1'
interval: 5s
timeout: 3s
retries: 3

17
compose/app.vue.yml Normal file
View File

@ -0,0 +1,17 @@
services:
app:
image: funkwhale-app
build:
context: ../front
dockerfile: Dockerfile.dev
command: "yarn dev --host"
ports:
- "${VUE_PORT:-8080}:${VUE_PORT:-8080}"
networks:
- internal
volumes:
- "../front:/app"
- "/app/node_modules"
environment:
- HOST
- VUE_PORT

View File

@ -16,4 +16,11 @@ VOLUME /app
VOLUME /app/node_modules VOLUME /app/node_modules
EXPOSE 8080 EXPOSE 8080
<<<<<<< HEAD
CMD ["yarn", "dev", "--host"] CMD ["yarn", "dev", "--host"]
=======
CMD ["yarn", "serve"]
HEALTHCHECK --start-period=30s --interval=10s --timeout=5s \
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
>>>>>>> afceb5bf3 (chore(compose): dependencies, environments and healthchecks)