181 lines
5.3 KiB
YAML
181 lines
5.3 KiB
YAML
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 |