services: bot: image: mtuci-jobs/bot:0.1 container_name: bot build: context: mtucijobsbot restart: always depends_on: postgres-bot: condition: service_healthy environment: - DATABASE_URL=${db_bot_url} - DB_NAME=${db_bot_name} - DB_USER=${db_bot_user} - DB_PASSWORD=${db_bot_password} - DB_HOST=${db_bot_host} - BOT_TOKEN=${bot_token} - HOOKPORT=${hookport} - PORT=${port} - DOMAIN=${domain} - WEB_APP=https://web.${domain}/ - WEB_APP_SEARCH=https://web.${domain}/search - API=https://${domain}/api/ - MTUCI_TECH=${mtuci_tech} - BEARER_TOKEN=${mtuci_tech_token} networks: - frontend - proxy labels: - "traefik.enable=true" - "traefik.http.routers.bot.rule=Host(`${domain}`)" - "traefik.http.routers.bot.entrypoints=websecure" - "traefik.http.routers.bot.tls.certresolver=${certresolver}" - "traefik.http.services.bot.loadbalancer.server.port=3005" - "traefik.http.routers.bot.service=bot" - "traefik.http.routers.bot-resume.rule=Host(`${domain}`) && Path(`/api/resume/`)" - "traefik.http.routers.bot-resume.service=bot-resume" - "traefik.http.routers.bot-resume.entrypoints=websecure" - "traefik.http.routers.bot-resume.tls.certresolver=${certresolver}" - "traefik.http.services.bot-resume.loadbalancer.server.port=3006" postgres-bot: image: postgres:16.1-alpine3.19 container_name: postgres-bot restart: always environment: - POSTGRES_USER=${db_bot_user} - POSTGRES_PASSWORD=${db_bot_password} - POSTGRES_DB=${db_bot_name} - PGDATA=${db_bot_pgdata} - POSTGRES_HOST_AUTH_METHOD=${db_bot_auth} healthcheck: test: pg_isready -U postgres interval: 5s timeout: 5s retries: 5 volumes: - postgres-bot:/data/postgres networks: - frontend web: container_name: web image: mtuci-jobs/web:0.1 build: context: mtucijobsweb args: - NEXT_PUBLIC_APP_BASE_URL=https://${domain}/api - NEXT_PUBLIC_BOT_URL=https://${domain} restart: always networks: - frontend - proxy labels: - "traefik.enable=true" - "traefik.http.routers.web.rule=Host(`web.${domain}`)" - "traefik.http.routers.web.entrypoints=websecure" - "traefik.http.routers.web.tls.certresolver=myresolver" - "traefik.http.services.web.loadbalancer.server.port=3000" web-jobs: container_name: web-jobs image: mtuci-jobs/web-jobs:0.1 build: context: mtucijobsweb2 args: - APP_BASE_URL=https://${domain}/api restart: always networks: - frontend - proxy labels: - "traefik.enable=true" - "traefik.http.routers.web-jobs.rule=Host(`web-jobs.${domain}`)" - "traefik.http.routers.web-jobs.entrypoints=websecure" - "traefik.http.routers.web-jobs.tls.certresolver=myresolver" - "traefik.http.services.web-jobs.loadbalancer.server.port=3000" backend: container_name: backend image: mtuci-jobs/backend:0.1 build: context: mtucijobsbackend restart: always environment: - database_hostname=${db_backend_hostname} - database_port=${db_backend_port} - database_password=${db_backend_password} - database_name=${db_backend_name} - database_username=${db_backend_username} - access_key=${minio_access_key} - secret_key=${minio_secret_key} - endpoint=${minio_endpoint} - secret_key2=${secret_key2} - algorithm=${algorithm} - access_token_expire_minutes=${access_token_expire_minutes} - refresh_token_expire_days=${refresh_token_expire_days} - x_api_key=${x_api_key} - LOG_LEVEL=DEBUG depends_on: - postgres-backend - minio networks: - backend - proxy labels: - "traefik.enable=true" - "traefik.http.routers.backend.rule=Host(`${domain}`) && PathPrefix(`/api/`)" - "traefik.http.middlewares.api-prefix.stripprefix.prefixes=/api/" - "traefik.http.routers.backend.entrypoints=websecure" - "traefik.http.routers.backend.tls.certresolver=myresolver" - "traefik.http.services.backend.loadbalancer.server.port=8000" - "traefik.http.routers.backend.middlewares=api-prefix" postgres-backend: container_name: postgres-backend image: postgres:16.1-alpine3.19 restart: always environment: - POSTGRES_PASSWORD=${db_backend_password} - POSTGRES_DB=${db_backend_name} healthcheck: test: pg_isready -U postgres interval: 5s timeout: 5s retries: 5 volumes: - postgres-backend:/var/lib/postgresql/data networks: - backend minio: container_name: minio image: minio/minio:latest command: server --console-address ":9001" /data/ restart: always environment: MINIO_ROOT_USER: ${minio_access_key} MINIO_ROOT_PASSWORD: ${minio_secret_key} volumes: - minio-storage:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 networks: - backend volumes: postgres-backend: minio-storage: postgres-bot: networks: backend: external: false frontend: external: false proxy: external: true