diff --git a/.gitignore b/.gitignore index b54d0ac..b172137 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ apps/api/node_modules/ __pycache__/ *.pyc *.pyo +infra/.env +infra/temp +infra/docker-compose.yml.backup diff --git a/infra/.env b/infra/.env deleted file mode 100644 index d4bdae6..0000000 --- a/infra/.env +++ /dev/null @@ -1,16 +0,0 @@ -BM_DB_PASSWORD=Astatke2510!db -BM_DOMAIN=bm.nicolasfryder.ovh -NOMINATIM_EMAIL=tonmail@tondomaine.tld -NOMINATIM_USER_AGENT=bm-map/0.1 (contact: tonmail@tondomaine.tld) -DATABASE_URL=postgresql://bm:Astatke2510!db@db:5432/bm - -# Recommandé (code-server sous-domaine dédié) -BM_CODE_DOMAIN=code.bm.nicolasfryder.ovh -CODESERVER_PASSWORD=Astatke2510!cod - -TZ=Europe/Paris -PUID=1001 -PGID=1001 -BM_IMPORT_TOKEN=c4b99106fcd09badce25810e974ec450af127a4725cb774f03b72217a04eb338 -PGADMIN_EMAIL=nicolasfryder@gmail.com -PGADMIN_PASSWORD=Astatke2510! diff --git a/infra/docker-compose.yml.backup b/infra/docker-compose.yml.backup deleted file mode 100644 index 29e9b3b..0000000 --- a/infra/docker-compose.yml.backup +++ /dev/null @@ -1,158 +0,0 @@ -services: - db: - image: postgis/postgis:16-3.4 - environment: - POSTGRES_DB: bm - POSTGRES_USER: bm - POSTGRES_PASSWORD: ${BM_DB_PASSWORD} - volumes: - - bm_pg_data:/var/lib/postgresql/data - networks: - - bm_internal - healthcheck: - test: ["CMD-SHELL", "pg_isready -U bm -d bm"] - interval: 10s - timeout: 5s - retries: 10 - - redis: - image: redis:7-alpine - command: ["redis-server", "--appendonly", "yes"] - volumes: - - bm_redis_data:/data - networks: - - bm_internal - geocoder-enqueue: - image: python:3.12-slim - working_dir: /app - volumes: - - ../apps/geocoder:/app:ro - environment: - DATABASE_URL: ${DATABASE_URL} - GEOCODE_ENQUEUE_BATCH: "90000" - command: ["sh", "-lc", "pip install -r requirements.txt && python src/enqueue.py"] - networks: - - bm_internal - restart: "no" - - geocoder-worker: - image: python:3.12-slim - working_dir: /app - volumes: - - ../apps/geocoder:/app:ro - 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: ["sh", "-lc", "pip install -r requirements.txt && python src/worker.py"] - networks: - - bm_internal - 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 - - traefik_net - labels: - - traefik.enable=true - - traefik.docker.network=stack-vps_admin - - traefik.http.routers.pgadmin.rule=Host(`pgadmin.bm.nicolasfryder.ovh`) - - traefik.http.routers.pgadmin.entrypoints=websecure - - traefik.http.routers.pgadmin.tls=true - - traefik.http.routers.pgadmin.tls.certresolver=le - - traefik.http.routers.pgadmin.middlewares=auth@file - - traefik.http.services.pgadmin.loadbalancer.server.port=80 - api: - build: - context: ../apps/api - environment: - PORT: "3000" - DATABASE_URL: postgresql://bm:${BM_DB_PASSWORD}@db:5432/bm - BM_IMPORT_TOKEN: ${BM_IMPORT_TOKEN} - depends_on: - db: - condition: service_healthy - volumes: - - ./overrides/api/src/server.js:/app/src/server.js:ro - - networks: - - bm_internal - - traefik_net - labels: - - traefik.enable=true - - traefik.http.routers.bm-api.rule=Host(`bm.nicolasfryder.ovh`) - - traefik.http.routers.bm-api.entrypoints=websecure - - traefik.http.routers.bm-api.tls=true - - traefik.http.routers.bm-api.tls.certresolver=le - - # CORS middleware - - traefik.http.middlewares.bm-cors.headers.accessControlAllowOriginList=https://metalfrom.eu,https://www.metalfrom.eu - - traefik.http.middlewares.bm-cors.headers.accessControlAllowMethods=GET,POST,PUT,PATCH,DELETE,OPTIONS - - traefik.http.middlewares.bm-cors.headers.accessControlAllowHeaders=* - - traefik.http.middlewares.bm-cors.headers.accessControlAllowCredentials=true - - traefik.http.middlewares.bm-cors.headers.addVaryHeader=true - - - traefik.http.routers.bm-api.middlewares=bm-cors@docker - - code: - image: lscr.io/linuxserver/code-server:latest - environment: - PUID: "1001" - PGID: "1001" - TZ: "Europe/Paris" - PASSWORD: ${CODESERVER_PASSWORD} - SUDO_PASSWORD: ${CODESERVER_PASSWORD} - DEFAULT_WORKSPACE: /workspace - volumes: - - bm_codeserver_config:/config - - /srv/stacks/bm:/workspace - networks: - - bm_internal - - traefik_net - labels: - - traefik.enable=true - - traefik.docker.network=stack-vps_admin - - traefik.http.routers.bm-code.rule=Host(`code.bm.nicolasfryder.ovh`) - - traefik.http.routers.bm-code.entrypoints=websecure - - traefik.http.routers.bm-code.tls=true - - traefik.http.services.bm-code.loadbalancer.server.port=8443 - - worker: - build: - context: ../apps/worker - environment: - DB_DSN: postgresql://bm:${BM_DB_PASSWORD}@db:5432/bm - MA_LIST_URL: https://www.metal-archives.com/lists/FR - MA_STATE_PATH: /app/ma_state.json - depends_on: - db: - condition: service_healthy - volumes: - - /srv/stacks/bm/infra/ma_state.json:/app/ma_state.json:ro - networks: - - bm_internal - restart: "no" - -networks: - traefik_net: - external: true - name: stack-vps_admin - bm_internal: - driver: bridge - -volumes: - bm_pg_data: - bm_redis_data: - bm_codeserver_config: - pgadmin_data: - diff --git a/infra/temp b/infra/temp deleted file mode 100644 index 04a773e..0000000 --- a/infra/temp +++ /dev/null @@ -1,164 +0,0 @@ -services: - db: - image: postgis/postgis:16-3.4 - environment: - POSTGRES_DB: bm - POSTGRES_USER: bm - POSTGRES_PASSWORD: ${BM_DB_PASSWORD} - volumes: - - bm_pg_data:/var/lib/postgresql/data - networks: - - bm_internal - healthcheck: - test: ["CMD-SHELL", "pg_isready -U bm -d bm"] - interval: 10s - timeout: 5s - retries: 10 - - redis: - image: redis:7-alpine - command: ["redis-server", "--appendonly", "yes"] - volumes: - - bm_redis_data:/data - networks: - - bm_internal - - # ✅ SÉCURISÉ : Pre-build avec Dockerfile - geocoder-enqueue: - build: - context: ../apps/geocoder - working_dir: /app - environment: - DATABASE_URL: ${DATABASE_URL} - GEOCODE_ENQUEUE_BATCH: "90000" - command: ["python", "src/enqueue.py"] - networks: - - bm_internal - restart: "no" - - # ✅ SÉCURISÉ : Pre-build avec Dockerfile - 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 - restart: unless-stopped - - # ✅ SÉCURISÉ : Double auth + rate limiting - 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 - - traefik_net - labels: - - traefik.enable=true - - traefik.docker.network=stack-vps_admin - - traefik.http.routers.pgadmin.rule=Host(`pgadmin.bm.nicolasfryder.ovh`) - - traefik.http.routers.pgadmin.entrypoints=websecure - - traefik.http.routers.pgadmin.tls=true - - traefik.http.routers.pgadmin.tls.certresolver=le - # ✅ CHANGÉ : Utilise le nouveau middleware avec rate limiting - - traefik.http.routers.pgadmin.middlewares=pgadmin-auth@file,pgadmin-ratelimit@file - - traefik.http.services.pgadmin.loadbalancer.server.port=80 - - api: - build: - context: ../apps/api - environment: - PORT: "3000" - DATABASE_URL: postgresql://bm:${BM_DB_PASSWORD}@db:5432/bm - BM_IMPORT_TOKEN: ${BM_IMPORT_TOKEN} - depends_on: - db: - condition: service_healthy - volumes: - - ./overrides/api/src/server.js:/app/src/server.js:ro - networks: - - bm_internal - - traefik_net - labels: - - traefik.enable=true - - traefik.http.routers.bm-api.rule=Host(`bm.nicolasfryder.ovh`) - - traefik.http.routers.bm-api.entrypoints=websecure - - traefik.http.routers.bm-api.tls=true - - traefik.http.routers.bm-api.tls.certresolver=le - - # CORS middleware - - traefik.http.middlewares.bm-cors.headers.accessControlAllowOriginList=https://metalfrom.eu,https://www.metalfrom.eu - - traefik.http.middlewares.bm-cors.headers.accessControlAllowMethods=GET,POST,PUT,PATCH,DELETE,OPTIONS - - traefik.http.middlewares.bm-cors.headers.accessControlAllowHeaders=* - - traefik.http.middlewares.bm-cors.headers.accessControlAllowCredentials=true - - traefik.http.middlewares.bm-cors.headers.addVaryHeader=true - - - traefik.http.routers.bm-api.middlewares=bm-cors@docker - - # ✅ SÉCURISÉ : Double auth + rate limiting - code: - image: lscr.io/linuxserver/code-server:latest - environment: - PUID: "1001" - PGID: "1001" - TZ: "Europe/Paris" - PASSWORD: ${CODESERVER_PASSWORD} - SUDO_PASSWORD: ${CODESERVER_PASSWORD} - DEFAULT_WORKSPACE: /workspace - volumes: - - bm_codeserver_config:/config - - /srv/stacks/bm:/workspace - networks: - - bm_internal - - traefik_net - labels: - - traefik.enable=true - - traefik.docker.network=stack-vps_admin - - traefik.http.routers.bm-code.rule=Host(`code.bm.nicolasfryder.ovh`) - - traefik.http.routers.bm-code.entrypoints=websecure - - traefik.http.routers.bm-code.tls=true - # ✅ AJOUTÉ : Double auth + rate limiting - - traefik.http.routers.bm-code.middlewares=code-auth@file,code-ratelimit@file - - traefik.http.services.bm-code.loadbalancer.server.port=8443 - - worker: - build: - context: ../apps/worker - environment: - DB_DSN: postgresql://bm:${BM_DB_PASSWORD}@db:5432/bm - MA_LIST_URL: https://www.metal-archives.com/lists/FR - MA_STATE_PATH: /app/ma_state.json - depends_on: - db: - condition: service_healthy - volumes: - - /srv/stacks/bm/infra/ma_state.json:/app/ma_state.json:ro - networks: - - bm_internal - restart: "no" - -networks: - traefik_net: - external: true - name: stack-vps_admin - bm_internal: - driver: bridge - -volumes: - bm_pg_data: - bm_redis_data: - bm_codeserver_config: - pgadmin_data: