APP_ENV, DOMAIN_WEB, DOMAIN_WEB_ALT, DOMAIN_API, DOMAIN_PGADMIN permettent de déployer prod et dev sur le même Traefik sans conflit. CORS_ORIGINS aussi injecté directement dans le service api. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
106 lines
3.2 KiB
YAML
106 lines
3.2 KiB
YAML
services:
|
|
redis:
|
|
image: redis:7-alpine
|
|
command: ["redis-server", "--appendonly", "yes"]
|
|
volumes:
|
|
- bm_redis_data:/data
|
|
networks:
|
|
- bm_internal
|
|
|
|
geocoder-worker:
|
|
build:
|
|
context: apps/geocoder
|
|
working_dir: /app
|
|
environment:
|
|
DATABASE_URL: ${DATABASE_URL}
|
|
NOMINATIM_BASE: "https://nominatim.openstreetmap.org"
|
|
NOMINATIM_EMAIL: ${NOMINATIM_EMAIL}
|
|
NOMINATIM_USER_AGENT: ${NOMINATIM_USER_AGENT}
|
|
NOMINATIM_MIN_DELAY: "1.05"
|
|
NOMINATIM_JITTER: "0.35"
|
|
GEOCODE_MAX_PER_RUN: "5000"
|
|
command: ["python", "src/worker.py"]
|
|
networks:
|
|
- bm_internal
|
|
- coolify
|
|
restart: unless-stopped
|
|
|
|
pgadmin:
|
|
image: dpage/pgadmin4:8
|
|
environment:
|
|
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
|
|
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
|
|
PGADMIN_CONFIG_SERVER_MODE: "True"
|
|
volumes:
|
|
- pgadmin_data:/var/lib/pgadmin
|
|
networks:
|
|
- bm_internal
|
|
- coolify
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.docker.network=coolify
|
|
- traefik.http.routers.${APP_ENV:-prod}-pgadmin.rule=Host(`${DOMAIN_PGADMIN:-pgadmin.bm.nicolasfryder.ovh}`)
|
|
- traefik.http.routers.${APP_ENV:-prod}-pgadmin.entrypoints=https
|
|
- traefik.http.routers.${APP_ENV:-prod}-pgadmin.tls=true
|
|
- traefik.http.routers.${APP_ENV:-prod}-pgadmin.tls.certresolver=letsencrypt
|
|
- traefik.http.services.${APP_ENV:-prod}-pgadmin.loadbalancer.server.port=80
|
|
|
|
api:
|
|
build:
|
|
context: apps/api
|
|
environment:
|
|
PORT: "3000"
|
|
DATABASE_URL: ${DATABASE_URL}
|
|
BM_IMPORT_TOKEN: ${BM_IMPORT_TOKEN}
|
|
CORS_ORIGINS: ${CORS_ORIGINS:-https://metalfrom.eu,https://www.metalfrom.eu}
|
|
networks:
|
|
- bm_internal
|
|
- coolify
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.docker.network=coolify
|
|
- traefik.http.routers.${APP_ENV:-prod}-api.rule=Host(`${DOMAIN_API:-bm.nicolasfryder.ovh}`)
|
|
- traefik.http.routers.${APP_ENV:-prod}-api.entrypoints=https
|
|
- traefik.http.routers.${APP_ENV:-prod}-api.tls=true
|
|
- traefik.http.routers.${APP_ENV:-prod}-api.tls.certresolver=letsencrypt
|
|
- traefik.http.services.${APP_ENV:-prod}-api.loadbalancer.server.port=3000
|
|
|
|
web:
|
|
build:
|
|
context: apps/web
|
|
networks:
|
|
- coolify
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.docker.network=coolify
|
|
- traefik.http.routers.${APP_ENV:-prod}-web.rule=Host(`${DOMAIN_WEB:-metalfrom.eu}`) || Host(`${DOMAIN_WEB_ALT:-www.metalfrom.eu}`)
|
|
- traefik.http.routers.${APP_ENV:-prod}-web.entrypoints=https
|
|
- traefik.http.routers.${APP_ENV:-prod}-web.tls=true
|
|
- traefik.http.routers.${APP_ENV:-prod}-web.tls.certresolver=letsencrypt
|
|
- traefik.http.services.${APP_ENV:-prod}-web.loadbalancer.server.port=80
|
|
|
|
worker:
|
|
build:
|
|
context: apps/worker
|
|
environment:
|
|
DB_DSN: ${DATABASE_URL}
|
|
MA_LIST_URL: https://www.metal-archives.com/lists/FR
|
|
MA_STATE_PATH: /app/ma_state.json
|
|
volumes:
|
|
- worker_state:/app
|
|
networks:
|
|
- bm_internal
|
|
- coolify
|
|
restart: "no"
|
|
|
|
networks:
|
|
bm_internal:
|
|
driver: bridge
|
|
coolify:
|
|
external: true
|
|
name: coolify
|
|
|
|
volumes:
|
|
bm_redis_data:
|
|
pgadmin_data:
|
|
worker_state:
|