Chore: Compose, Docker frontend + CI environment

This commit is contained in:
jon r 2025-04-18 10:25:26 +02:00
parent c82d7bc73c
commit 06f0a8f1e3
18 changed files with 196 additions and 152 deletions

View File

@ -1,3 +1,5 @@
COMPOSE_BAKE=true
# api + celeryworker # api + celeryworker
DEBUG=True DEBUG=True
DEFAULT_FROM_EMAIL=hello@funkwhale.test DEFAULT_FROM_EMAIL=hello@funkwhale.test

21
.gitignore vendored
View File

@ -34,6 +34,8 @@ pip-log.txt
.tox .tox
nosetests.xml nosetests.xml
htmlcov htmlcov
coverage.xml
report.xml
# Translations # Translations
*.mo *.mo
@ -75,11 +77,13 @@ api/staticfiles
api/static api/static
api/.pytest_cache api/.pytest_cache
api/celerybeat-* api/celerybeat-*
# Front # Front
oldfront/node_modules/ oldfront/node_modules/
front/static/translations front/static/translations
front/node_modules/ front/node_modules/
front/dist/ front/dist/
front/dev-dist/
front/npm-debug.log* front/npm-debug.log*
front/yarn-debug.log* front/yarn-debug.log*
front/yarn-error.log* front/yarn-error.log*
@ -88,7 +92,16 @@ front/tests/e2e/reports
front/test_results.xml front/test_results.xml
front/coverage/ front/coverage/
front/selenium-debug.log front/selenium-debug.log
# Vitepress
front/ui-docs/.vitepress/.vite
front/ui-docs/.vitepress/cache
front/ui-docs/.vitepress/dist
front/ui-docs/public
# Docs
docs/_build docs/_build
#Tauri #Tauri
front/tauri/gen front/tauri/gen
@ -116,8 +129,14 @@ tsconfig.tsbuildinfo
flake.nix flake.nix
flake.lock flake.lock
# Vscode # VS Code
.vscode/ .vscode/
# Zed # Zed
.zed/ .zed/
# Node version (asdf)
.tool-versions
# Lychee link checker
.lycheecache

View File

@ -8,50 +8,56 @@ include:
file: /templates/ssh-agent.yml file: /templates/ssh-agent.yml
variables: variables:
PYTHONDONTWRITEBYTECODE: "true" PYTHONDONTWRITEBYTECODE: 'true'
PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip
YARN_CACHE_FOLDER: $CI_PROJECT_DIR/.cache/yarn YARN_CACHE_FOLDER: $CI_PROJECT_DIR/.cache/yarn
POETRY_VIRTUALENVS_IN_PROJECT: "true" POETRY_VIRTUALENVS_IN_PROJECT: 'true'
.shared_variables: .shared_variables:
# Keep the git files permissions during job setup # Keep the git files permissions during job setup
keep_git_files_permissions: &keep_git_files_permissions keep_git_files_permissions: &keep_git_files_permissions
GIT_STRATEGY: clone GIT_STRATEGY: clone
GIT_DEPTH: "5" GIT_DEPTH: '5'
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: "true" FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: 'true'
.shared_caches: .shared_caches:
# Cache for front related jobs # Cache for front related jobs
front_cache: &front_cache yarn_cache: &yarn_cache
- key: front-yarn key: front-yarn-$CI_COMMIT_REF_SLUG
paths: [$YARN_CACHE_FOLDER] paths: [$YARN_CACHE_FOLDER]
- key: node_cache: &node_cache
prefix: front-node_modules key:
prefix: front-node_modules-$CI_COMMIT_REF_SLUG
files: [front/yarn.lock] files: [front/yarn.lock]
paths: [front/node_modules] paths: [front/node_modules]
- key: lint_cache: &lint_cache
prefix: front-lint key:
prefix: front-lint-$CI_COMMIT_REF_SLUG
files: files:
- front/.eslintcache - front/.eslintcache
- front/tsconfig.tsbuildinfo - front/tsconfig.tsbuildinfo
cypress_cache: &cypress_cache
key: cypress-cache-$CI_COMMIT_REF_SLUG
paths:
- /root/.cache/Cypress
# Cache for api related jobs # Cache for api related jobs
# Include the python version to prevent loosing caches in the test matrix # Include the python version to prevent loosing caches in the test matrix
api_cache: &api_cache api_cache: &api_cache
- key: api-pip-$PYTHON_VERSION - key: api-pip-$CI_COMMIT_REF_SLUG
paths: [$PIP_CACHE_DIR] paths: [$PIP_CACHE_DIR]
- key: - key:
prefix: api-venv-$PYTHON_VERSION prefix: api-venv-$CI_COMMIT_REF_SLUG
files: [api/poetry.lock] files: [api/poetry.lock]
paths: [api/.venv] paths: [api/.venv]
# Cache for docs related jobs # Cache for docs related jobs
docs_cache: &docs_cache docs_cache: &docs_cache
- key: docs-pip - key: docs-pip-$CI_COMMIT_REF_SLUG
paths: [$PIP_CACHE_DIR] paths: [$PIP_CACHE_DIR]
- key: - key:
prefix: docs-venv prefix: docs-venv-$CI_COMMIT_REF_SLUG
files: [docs/poetry.lock] files: [docs/poetry.lock]
paths: [docs/.venv] paths: [docs/.venv]
@ -97,7 +103,10 @@ review_front:
environment: environment:
name: review/front/$CI_COMMIT_REF_NAME name: review/front/$CI_COMMIT_REF_NAME
url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/index.html url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/index.html
cache: *front_cache cache:
- *yarn_cache
- *node_cache
- *lint_cache
before_script: before_script:
- mkdir front-review - mkdir front-review
- cd front - cd front
@ -143,6 +152,7 @@ find_broken_links:
lychee lychee
--cache --cache
--no-progress --no-progress
--include-fragments
--exclude-all-private --exclude-all-private
--exclude 'demo\.funkwhale\.audio' --exclude 'demo\.funkwhale\.audio'
--exclude 'nginx\.com' --exclude 'nginx\.com'
@ -191,13 +201,15 @@ lint_front:
- changes: [front/**/*] - changes: [front/**/*]
image: $CI_REGISTRY/funkwhale/ci/node-python:18 image: $CI_REGISTRY/funkwhale/ci/node-python:18
cache: *front_cache cache:
- *yarn_cache
- *node_cache
- *lint_cache
before_script: before_script:
- cd front - cd front
- yarn install --frozen-lockfile - yarn install --frozen-lockfile
script: script:
- yarn lint --max-warnings 0 - yarn lint
- yarn lint:tsc
test_scripts: test_scripts:
stage: test stage: test
@ -232,7 +244,7 @@ test_api:
image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION
parallel: parallel:
matrix: matrix:
- PYTHON_VERSION: ["3.10", "3.11", "3.12", "3.13"] - PYTHON_VERSION: ['3.10', '3.11', '3.12', '3.13']
services: services:
- name: postgres:15-alpine - name: postgres:15-alpine
command: command:
@ -242,11 +254,11 @@ test_api:
- name: redis:7-alpine - name: redis:7-alpine
cache: *api_cache cache: *api_cache
variables: variables:
DATABASE_URL: "postgresql://postgres@postgres/postgres" DATABASE_URL: 'postgresql://postgres@postgres/postgres'
FUNKWHALE_URL: "https://funkwhale.ci" FUNKWHALE_URL: 'https://funkwhale.ci'
DJANGO_SETTINGS_MODULE: config.settings.local DJANGO_SETTINGS_MODULE: config.settings.local
POSTGRES_HOST_AUTH_METHOD: trust POSTGRES_HOST_AUTH_METHOD: trust
CACHE_URL: "redis://redis:6379/0" CACHE_URL: 'redis://redis:6379/0'
before_script: before_script:
- cd api - cd api
- make install - make install
@ -277,7 +289,10 @@ test_front:
- changes: [front/**/*] - changes: [front/**/*]
image: $CI_REGISTRY/funkwhale/ci/node-python:18 image: $CI_REGISTRY/funkwhale/ci/node-python:18
cache: *front_cache cache:
- *yarn_cache
- *node_cache
- *lint_cache
before_script: before_script:
- cd front - cd front
- yarn install --frozen-lockfile - yarn install --frozen-lockfile
@ -316,12 +331,13 @@ test_integration:
image: image:
name: cypress/included:13.6.4 name: cypress/included:13.6.4
entrypoint: [""] entrypoint: ['']
cache: cache:
- *front_cache - *yarn_cache
- key: - *node_cache
paths: - *lint_cache
- /root/.cache/Cypress - *cypress_cache
before_script: before_script:
- cd front - cd front
- yarn install - yarn install
@ -345,12 +361,12 @@ build_api_schema:
- redis:7-alpine - redis:7-alpine
cache: *api_cache cache: *api_cache
variables: variables:
DATABASE_URL: "postgresql://postgres@postgres/postgres" DATABASE_URL: 'postgresql://postgres@postgres/postgres'
FUNKWHALE_URL: "https://funkwhale.ci" FUNKWHALE_URL: 'https://funkwhale.ci'
DJANGO_SETTINGS_MODULE: config.settings.local DJANGO_SETTINGS_MODULE: config.settings.local
POSTGRES_HOST_AUTH_METHOD: trust POSTGRES_HOST_AUTH_METHOD: trust
CACHE_URL: "redis://redis:6379/0" CACHE_URL: 'redis://redis:6379/0'
API_TYPE: "v1" API_TYPE: 'v1'
before_script: before_script:
- cd api - cd api
- make install - make install
@ -403,7 +419,10 @@ build_front:
variables: variables:
<<: *keep_git_files_permissions <<: *keep_git_files_permissions
NODE_OPTIONS: --max-old-space-size=4096 NODE_OPTIONS: --max-old-space-size=4096
cache: *front_cache cache:
- *yarn_cache
- *node_cache
- *lint_cache
before_script: before_script:
- cd front - cd front
- yarn install --frozen-lockfile - yarn install --frozen-lockfile
@ -513,7 +532,7 @@ docker:
<<: *keep_git_files_permissions <<: *keep_git_files_permissions
DOCKER_HOST: tcp://docker:2375/ DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2 DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "" DOCKER_TLS_CERTDIR: ''
BUILDKIT_PROGRESS: plain BUILDKIT_PROGRESS: plain
DOCKER_CACHE_IMAGE: $CI_REGISTRY/funkwhale/funkwhale/cache DOCKER_CACHE_IMAGE: $CI_REGISTRY/funkwhale/funkwhale/cache

View File

@ -1,19 +1,19 @@
version: "3" version: '3'
services: services:
postgres: postgres:
image: postgres:15-alpine image: postgres:15-alpine
environment: environment:
- "POSTGRES_HOST_AUTH_METHOD=trust" - 'POSTGRES_HOST_AUTH_METHOD=trust'
volumes: volumes:
- "../data/postgres:/var/lib/postgresql/data" - '../data/postgres:/var/lib/postgresql/data'
ports: ports:
- 5432:5432 - 5432:5432
redis: redis:
image: redis:7-alpine image: redis:7-alpine
volumes: volumes:
- "../data/redis:/data" - '../data/redis:/data'
ports: ports:
- 6379:6379 - 6379:6379
@ -26,14 +26,14 @@ services:
extra_hosts: extra_hosts:
- host.docker.internal:host-gateway - host.docker.internal:host-gateway
environment: environment:
- "NGINX_MAX_BODY_SIZE=100M" - 'NGINX_MAX_BODY_SIZE=100M'
- "FUNKWHALE_API_IP=host.docker.internal" - 'FUNKWHALE_API_IP=host.docker.internal'
- "FUNKWHALE_API_HOST=host.docker.internal" - 'FUNKWHALE_API_HOST=host.docker.internal'
- "FUNKWHALE_API_PORT=5000" - 'FUNKWHALE_API_PORT=5000'
- "FUNKWHALE_FRONT_IP=host.docker.internal" - 'FUNKWHALE_FRONT_IP=host.docker.internal'
- "FUNKWHALE_FRONT_PORT=8080" - 'FUNKWHALE_FRONT_PORT=8080'
- "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}" - 'FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}'
- "FUNKWHALE_PROTOCOL=https" - 'FUNKWHALE_PROTOCOL=https'
volumes: volumes:
- ../data/media:/workspace/funkwhale/data/media:ro - ../data/media:/workspace/funkwhale/data/media:ro
- ../data/music:/music:ro - ../data/music:/music:ro

View File

@ -6,7 +6,13 @@ repos:
rev: v4.4.0 rev: v4.4.0
hooks: hooks:
- id: check-added-large-files - id: check-added-large-files
exclude: "api/funkwhale_api/common/schema.yml" exclude: |
(?x)(
^api/funkwhale_api/common/schema.yml|
^api/tests/music/test_coverart.ogg|
^front/src/generated/types.ts
)
- id: check-case-conflict - id: check-case-conflict
- id: check-executables-have-shebangs - id: check-executables-have-shebangs
- id: check-shebang-scripts-are-executable - id: check-shebang-scripts-are-executable
@ -63,7 +69,7 @@ repos:
hooks: hooks:
- id: prettier - id: prettier
files: \.(md|yml|yaml|json)$ files: \.(md|yml|yaml|json)$
exclude: "api/funkwhale_api/common/schema.yml" exclude: 'api/funkwhale_api/common/schema.yml'
- repo: https://github.com/codespell-project/codespell - repo: https://github.com/codespell-project/codespell
rev: v2.2.6 rev: v2.2.6

View File

@ -13,17 +13,17 @@ x-django: &django
- EXTERNAL_REQUESTS_VERIFY_SSL - EXTERNAL_REQUESTS_VERIFY_SSL
- "FORCE_HTTPS_URLS=${FORCE_HTTPS_URLS:-False}" - 'FORCE_HTTPS_URLS=${FORCE_HTTPS_URLS:-False}'
- FUNKWHALE_PROTOCOL - FUNKWHALE_PROTOCOL
- "FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}" - 'FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}'
- DATABASE_URL - DATABASE_URL
- CACHE_URL - CACHE_URL
- EMAIL_CONFIG - EMAIL_CONFIG
- TYPESENSE_API_KEY - TYPESENSE_API_KEY
- "STATIC_URL=${FUNKWHALE_PROTOCOL}://${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}/static/" - 'STATIC_URL=${FUNKWHALE_PROTOCOL}://${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}/static/'
- "MEDIA_URL=${FUNKWHALE_PROTOCOL}://${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}/media/" - 'MEDIA_URL=${FUNKWHALE_PROTOCOL}://${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}/media/'
- STATIC_ROOT - STATIC_ROOT
- MEDIA_ROOT - MEDIA_ROOT
@ -31,7 +31,7 @@ x-django: &django
- FUNKWHALE_SPA_HTML_ROOT - FUNKWHALE_SPA_HTML_ROOT
- LDAP_ENABLED - LDAP_ENABLED
- BROWSABLE_API_ENABLED - BROWSABLE_API_ENABLED
- "MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}" - 'MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}'
- C_FORCE_ROOT - C_FORCE_ROOT
- PYTHONDONTWRITEBYTECODE - PYTHONDONTWRITEBYTECODE
@ -46,17 +46,14 @@ services:
context: ./front context: ./front
dockerfile: Dockerfile.dev dockerfile: Dockerfile.dev
ports: ports:
- "${VUE_PORT:-8080}:${VUE_PORT:-8080}" - '${VUE_PORT:-8080}:${VUE_PORT:-8080}'
environment: environment:
- HOST
- VUE_PORT - VUE_PORT
volumes: volumes:
- "./front:/app" - './front:/app'
- "/app/node_modules" - '/app/node_modules'
- "./po:/po"
networks: networks:
- internal - internal
command: "yarn dev --host"
api: api:
extends: extends:
@ -75,8 +72,8 @@ services:
file: ./compose/app.nginx.yml file: ./compose/app.nginx.yml
service: nginx service: nginx
environment: environment:
- "MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}" - 'MUSIC_DIRECTORY_PATH=${MUSIC_DIRECTORY_PATH:-/music}'
- "FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}" - 'FUNKWHALE_HOSTNAME=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}'
- FUNKWHALE_PROTOCOL - FUNKWHALE_PROTOCOL
@ -89,34 +86,34 @@ services:
- NGINX_MAX_BODY_SIZE - NGINX_MAX_BODY_SIZE
- STATIC_ROOT - STATIC_ROOT
- "MEDIA_ROOT=${MEDIA_ROOT:-/data/media}" - 'MEDIA_ROOT=${MEDIA_ROOT:-/data/media}'
networks: networks:
- web - web
- internal - internal
labels: labels:
- "traefik.enable=true" - 'traefik.enable=true'
- "traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-web.rule=Host(`${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}`)" - 'traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-web.rule=Host(`${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}`)'
- "traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-web.entrypoints=web" - 'traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-web.entrypoints=web'
- "traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.rule=Host(`${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}`)" - 'traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.rule=Host(`${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}`)'
- "traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.entrypoints=webs" - 'traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.entrypoints=webs'
- "traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.tls=true" - 'traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.tls=true'
- "traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.tls.domains[0].main=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}" - 'traefik.http.routers.test-funkwhale-${COMPOSE_PROJECT_NAME:-funkwhale}-webs.tls.domains[0].main=${COMPOSE_PROJECT_NAME:-funkwhale}.${FUNKWHALE_DOMAIN}'
postgres: postgres:
image: "postgres:${POSTGRES_VERSION:-15}-alpine" image: 'postgres:${POSTGRES_VERSION:-15}-alpine'
environment: environment:
- POSTGRES_HOST_AUTH_METHOD - POSTGRES_HOST_AUTH_METHOD
command: postgres ${POSTGRES_ARGS:-} command: postgres ${POSTGRES_ARGS:-}
volumes: volumes:
- "./.state/${COMPOSE_PROJECT_NAME:-funkwhale}/postgres:/var/lib/postgresql/data" - './.state/${COMPOSE_PROJECT_NAME:-funkwhale}/postgres:/var/lib/postgresql/data'
networks: networks:
- internal - internal
healthcheck: healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"] test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
@ -124,11 +121,11 @@ services:
redis: redis:
image: redis:7-alpine image: redis:7-alpine
volumes: volumes:
- "./.state/${COMPOSE_PROJECT_NAME:-funkwhale}/redis:/data" - './.state/${COMPOSE_PROJECT_NAME:-funkwhale}/redis:/data'
networks: networks:
- internal - internal
healthcheck: healthcheck:
test: ["CMD", "redis-cli", "ping"] test: ['CMD', 'redis-cli', 'ping']
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 3 retries: 3

View File

@ -3,11 +3,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
@ -23,11 +23,7 @@ services:
context: ../api context: ../api
dockerfile: Dockerfile.debian dockerfile: Dockerfile.debian
healthcheck: healthcheck:
test: test: ['CMD-SHELL', 'docker compose logs api | grep -q "Uvicorn running on" || exit 0']
[
"CMD-SHELL",
'docker compose logs api | grep -q "Uvicorn running on" || exit 0',
]
interval: 3s interval: 3s
timeout: 5s timeout: 5s
retries: 3 retries: 3

View File

@ -5,7 +5,7 @@ services:
- api - api
- front - front
volumes: volumes:
- "${MUSIC_DIRECTORY_SERVE_PATH:-../.state/music}:${MUSIC_DIRECTORY_PATH:-/music}:ro" - '${MUSIC_DIRECTORY_SERVE_PATH:-../.state/music}:${MUSIC_DIRECTORY_PATH:-/music}:ro'
- ./etc/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - ./etc/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro
- ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro

View File

@ -2,18 +2,18 @@ services:
openapi: openapi:
image: swaggerapi/swagger-ui image: swaggerapi/swagger-ui
environment: environment:
- "URL=/openapi.yml" - 'URL=/openapi.yml'
ports: ports:
- "8002:8080" - '8002:8080'
volumes: volumes:
- "../docs/specs/nodeinfo21/schema.yml:/usr/share/nginx/html/openapi.yml" - '../docs/specs/nodeinfo21/schema.yml:/usr/share/nginx/html/openapi.yml'
# - "../docs/api:/usr/share/nginx/html/api" # - "../docs/api:/usr/share/nginx/html/api"
labels: labels:
- "traefik.enable=true" - 'traefik.enable=true'
- "traefik.http.routers.test-funkwhale-openapi-web.rule=Host(`openapi.funkwhale.test`)" - 'traefik.http.routers.test-funkwhale-openapi-web.rule=Host(`openapi.funkwhale.test`)'
- "traefik.http.routers.test-funkwhale-openapi-web.entrypoints=web" - 'traefik.http.routers.test-funkwhale-openapi-web.entrypoints=web'
- "traefik.http.services.test-funkwhale-openapi.loadbalancer.server.port=8080" - 'traefik.http.services.test-funkwhale-openapi.loadbalancer.server.port=8080'
- "traefik.http.routers.test-funkwhale-openapi-webs.rule=Host(`openapi.funkwhale.test`)" - 'traefik.http.routers.test-funkwhale-openapi-webs.rule=Host(`openapi.funkwhale.test`)'
- "traefik.http.routers.test-funkwhale-openapi-webs.entrypoints=webs" - 'traefik.http.routers.test-funkwhale-openapi-webs.entrypoints=webs'
- "traefik.http.routers.test-funkwhale-openapi-webs.tls=true" - 'traefik.http.routers.test-funkwhale-openapi-webs.tls=true'
networks: ["web"] networks: ['web']

View File

@ -4,16 +4,16 @@ services:
context: ../ context: ../
dockerfile: docs/Dockerfile dockerfile: docs/Dockerfile
init: true init: true
ports: ["8001:8001"] ports: ['8001:8001']
command: sh -c 'cd /src/docs && make dev' command: sh -c 'cd /src/docs && make dev'
volumes: volumes:
- ../docs:/src/docs - ../docs:/src/docs
labels: labels:
- "traefik.enable=true" - 'traefik.enable=true'
- "traefik.http.routers.test-funkwhale-docs-web.rule=Host(`docs.funkwhale.test`)" - 'traefik.http.routers.test-funkwhale-docs-web.rule=Host(`docs.funkwhale.test`)'
- "traefik.http.routers.test-funkwhale-docs-web.entrypoints=web" - 'traefik.http.routers.test-funkwhale-docs-web.entrypoints=web'
- "traefik.http.routers.test-funkwhale-docs-webs.rule=Host(`docs.funkwhale.test`)" - 'traefik.http.routers.test-funkwhale-docs-webs.rule=Host(`docs.funkwhale.test`)'
- "traefik.http.routers.test-funkwhale-docs-webs.entrypoints=webs" - 'traefik.http.routers.test-funkwhale-docs-webs.entrypoints=webs'
- "traefik.http.routers.test-funkwhale-docs-webs.tls=true" - 'traefik.http.routers.test-funkwhale-docs-webs.tls=true'
networks: ["web"] networks: ['web']

View File

@ -3,7 +3,7 @@ http:
test-funkwhale-mailpit: test-funkwhale-mailpit:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://172.17.0.1:8025" - url: 'http://172.17.0.1:8025'
passhostheader: true passhostheader: true
routers: routers:
test-funkwhale-mailpit-web: test-funkwhale-mailpit-web:

View File

@ -13,8 +13,8 @@ api:
entryPoints: entryPoints:
traefik: traefik:
address: "172.17.0.1:8008" address: '172.17.0.1:8008'
web: web:
address: "172.17.0.1:80" address: '172.17.0.1:80'
webs: webs:
address: "172.17.0.1:443" address: '172.17.0.1:443'

View File

@ -1,6 +1,6 @@
x-busybox: &busybox x-busybox: &busybox
init: true init: true
image: "busybox" image: 'busybox'
network_mode: bridge network_mode: bridge
dns: 172.17.0.1 dns: 172.17.0.1
dns_search: funkwhale.test dns_search: funkwhale.test
@ -11,18 +11,18 @@ networks:
services: services:
whoami: whoami:
image: "traefik/whoami" image: 'traefik/whoami'
networks: networks:
- web - web
labels: labels:
- "traefik.enable=true" - 'traefik.enable=true'
- "traefik.http.routers.whoami-web.rule=Host(`whoami.funkwhale.test`)" - 'traefik.http.routers.whoami-web.rule=Host(`whoami.funkwhale.test`)'
- "traefik.http.routers.whoami-web.entrypoints=web" - 'traefik.http.routers.whoami-web.entrypoints=web'
- "traefik.http.routers.whoami-webs.rule=Host(`whoami.funkwhale.test`)" - 'traefik.http.routers.whoami-webs.rule=Host(`whoami.funkwhale.test`)'
- "traefik.http.routers.whoami-webs.entrypoints=webs" - 'traefik.http.routers.whoami-webs.entrypoints=webs'
- "traefik.http.routers.whoami-webs.tls=true" - 'traefik.http.routers.whoami-webs.tls=true'
- "traefik.http.routers.whoami.tls.domains[0].main=whoami.funkwhale.test" - 'traefik.http.routers.whoami.tls.domains[0].main=whoami.funkwhale.test'
shell: shell:
<<: *busybox <<: *busybox

View File

@ -9,5 +9,5 @@ services:
MP_SMTP_BIND_ADDR: 172.17.0.1:1025 MP_SMTP_BIND_ADDR: 172.17.0.1:1025
MP_MAX_MESSAGES: 5000 MP_MAX_MESSAGES: 5000
MP_DATABASE: /data/mailpit.db MP_DATABASE: /data/mailpit.db
MP_SMTP_AUTH_ACCEPT_ANY: "true" MP_SMTP_AUTH_ACCEPT_ANY: 'true'
MP_SMTP_AUTH_ALLOW_INSECURE: "true" MP_SMTP_AUTH_ALLOW_INSECURE: 'true'

View File

@ -3,13 +3,13 @@ services:
image: minio/minio image: minio/minio
command: server /data command: server /data
volumes: volumes:
- "../.state/${COMPOSE_PROJECT_NAME:-funkwhale}/minio:/data" - '../.state/${COMPOSE_PROJECT_NAME:-funkwhale}/minio:/data'
environment: environment:
- "MINIO_ACCESS_KEY=${AWS_ACCESS_KEY_ID:-access_key}" - 'MINIO_ACCESS_KEY=${AWS_ACCESS_KEY_ID:-access_key}'
- "MINIO_SECRET_KEY=${AWS_SECRET_ACCESS_KEY:-secret_key}" - 'MINIO_SECRET_KEY=${AWS_SECRET_ACCESS_KEY:-secret_key}'
- "MINIO_HTTP_TRACE: /dev/stdout" - 'MINIO_HTTP_TRACE: /dev/stdout'
ports: ports:
- "9000:9000" - '9000:9000'
networks: networks:
- web - web
- internal - internal

View File

@ -1,6 +1,6 @@
x-verify: &verify x-verify: &verify
init: true init: true
image: "busybox" image: 'busybox'
network_mode: bridge network_mode: bridge
dns: 172.17.0.1 dns: 172.17.0.1
dns_search: funkwhale.test dns_search: funkwhale.test
@ -12,4 +12,4 @@ services:
verify-internal-connectivity: verify-internal-connectivity:
<<: *verify <<: *verify
command: "ping -c 1 ${COMPOSE_PROJECT_NAME:-funkwhale}.funkwhale.test" command: 'ping -c 1 ${COMPOSE_PROJECT_NAME:-funkwhale}.funkwhale.test'

View File

@ -1,11 +1,11 @@
version: "3" version: '3'
services: services:
postgres: postgres:
restart: unless-stopped restart: unless-stopped
env_file: .env env_file: .env
environment: environment:
- "POSTGRES_HOST_AUTH_METHOD=trust" - 'POSTGRES_HOST_AUTH_METHOD=trust'
image: postgres:15-alpine image: postgres:15-alpine
volumes: volumes:
- ./data/postgres:/var/lib/postgresql/data - ./data/postgres:/var/lib/postgresql/data
@ -41,8 +41,8 @@ services:
environment: environment:
- C_FORCE_ROOT=true - C_FORCE_ROOT=true
volumes: volumes:
- "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro" - '${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro'
- "${MEDIA_ROOT}:${MEDIA_ROOT}" - '${MEDIA_ROOT}:${MEDIA_ROOT}'
celerybeat: celerybeat:
restart: unless-stopped restart: unless-stopped
@ -65,9 +65,9 @@ services:
- redis - redis
env_file: .env env_file: .env
volumes: volumes:
- "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro" - '${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro'
- "${MEDIA_ROOT}:${MEDIA_ROOT}" - '${MEDIA_ROOT}:${MEDIA_ROOT}'
- "${STATIC_ROOT}:${STATIC_ROOT}" - '${STATIC_ROOT}:${STATIC_ROOT}'
front: front:
restart: unless-stopped restart: unless-stopped
@ -78,7 +78,7 @@ services:
- .env - .env
environment: environment:
# Override those variables in your .env file if needed # Override those variables in your .env file if needed
- "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - 'NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}'
volumes: volumes:
# Uncomment if you want to use your previous nginx config, please let us # Uncomment if you want to use your previous nginx config, please let us
# know what special configuration you need, so we can support it with out # know what special configuration you need, so we can support it with out
@ -86,12 +86,12 @@ services:
#- "./nginx/funkwhale.template:/etc/nginx/templates/default.conf.template:ro" #- "./nginx/funkwhale.template:/etc/nginx/templates/default.conf.template:ro"
#- "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" #- "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro"
- "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro" - '${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro'
- "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" - '${MEDIA_ROOT}:${MEDIA_ROOT}:ro'
- "${STATIC_ROOT}:/usr/share/nginx/html/staticfiles:ro" - '${STATIC_ROOT}:/usr/share/nginx/html/staticfiles:ro'
ports: ports:
# override those variables in your .env file if needed # override those variables in your .env file if needed
- "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" - '${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80'
typesense: typesense:
restart: unless-stopped restart: unless-stopped

View File

@ -1,14 +1,19 @@
FROM node:18-alpine FROM node:22-alpine
# needed to compile translations # needed to compile translations
RUN apk add --no-cache jq bash coreutils python3 RUN apk add --no-cache jq bash coreutils git python3
EXPOSE 8080
WORKDIR /app/ WORKDIR /app/
COPY scripts/ ./scripts/
# Create node_modules directory to prevent it from being hidden by volume mounts
RUN mkdir -p node_modules
ADD scripts/ ./scripts/
ADD package.json yarn.lock ./ ADD package.json yarn.lock ./
RUN yarn install RUN yarn
COPY . . VOLUME /app
VOLUME /app/node_modules
EXPOSE 8080
CMD ["yarn", "serve"] CMD ["yarn", "dev", "--host"]