Chore: Compose, Docker frontend + CI environment
This commit is contained in:
parent
c82d7bc73c
commit
06f0a8f1e3
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
49
compose.yml
49
compose.yml
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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']
|
||||||
|
|
|
@ -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']
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"]
|
||||||
|
|
Loading…
Reference in New Issue