Compare commits

...

2 Commits

Author SHA1 Message Date
gamer147
6d47153a42 [FA-misc] Update docker-compose.yml
All checks were successful
CI / build-backend (pull_request) Successful in 1m26s
CI / build-frontend (pull_request) Successful in 50s
2025-12-29 22:23:29 -05:00
dbbc2fd8dc Merge pull request 'feature/FA-6_AuthorsPosts' (#57) from feature/FA-6_AuthorsPosts into master
All checks were successful
CI / build-backend (push) Successful in 1m16s
CI / build-frontend (push) Successful in 51s
Reviewed-on: #57
2025-12-30 03:14:53 +00:00

View File

@@ -4,25 +4,31 @@ services:
# =========================================== # ===========================================
postgres: postgres:
image: postgres:16-alpine image: postgres:16-alpine
networks:
- fictionarchive
environment: environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
volumes: volumes:
- postgres_data:/var/lib/postgresql/data - /srv/docker_volumes/fictionarchive/postgres:/var/lib/postgresql/data
healthcheck: healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"] test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 5 retries: 5
restart: unless-stopped restart: unless-stopped
ports:
- 4321:5432
rabbitmq: rabbitmq:
image: rabbitmq:3-management-alpine image: rabbitmq:3-management-alpine
networks:
- fictionarchive
environment: environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest} RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest}
volumes: volumes:
- rabbitmq_data:/var/lib/rabbitmq - /srv/docker_volumes/fictionarchive/rabbitmq:/var/lib/rabbitmq
healthcheck: healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "check_running"] test: ["CMD", "rabbitmq-diagnostics", "check_running"]
interval: 10s interval: 10s
@@ -30,6 +36,20 @@ services:
retries: 5 retries: 5
restart: unless-stopped restart: unless-stopped
vpn:
image: dperson/openvpn-client # or gluetun, wireguard, etc.
networks:
fictionarchive:
aliases:
- novel-service
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
volumes:
- /srv/docker_volumes/korean_vpn:/vpn
restart: unless-stopped
# =========================================== # ===========================================
# Backend Services # Backend Services
# =========================================== # ===========================================
@@ -37,50 +57,27 @@ services:
image: git.orfl.xyz/conco/fictionarchive-novel-service:latest image: git.orfl.xyz/conco/fictionarchive-novel-service:latest
environment: environment:
ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_NovelService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres} ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_NovelService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres}
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq RabbitMQ__ConnectionString: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
Novelpia__Username: ${NOVELPIA_USERNAME} Novelpia__Username: ${NOVELPIA_USERNAME}
Novelpia__Password: ${NOVELPIA_PASSWORD} Novelpia__Password: ${NOVELPIA_PASSWORD}
NovelUpdateService__PendingImageUrl: https://files.fictionarchive.orfl.xyz/api/pendingupload.png UpdateService__PendingImageUrl: https://files.fictionarchive.orfl.xyz/api/pendingupload.png
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on:
postgres:
condition: service_healthy
rabbitmq:
condition: service_healthy
restart: unless-stopped
translation-service:
image: git.orfl.xyz/conco/fictionarchive-translation-service:latest
environment:
ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_TranslationService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres}
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
DeepL__ApiKey: ${DEEPL_API_KEY}
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy
rabbitmq: rabbitmq:
condition: service_healthy condition: service_healthy
vpn:
condition: service_started
network_mode: "service:vpn"
restart: unless-stopped restart: unless-stopped
scheduler-service: scheduler-service:
image: git.orfl.xyz/conco/fictionarchive-scheduler-service:latest image: git.orfl.xyz/conco/fictionarchive-scheduler-service:latest
networks:
- fictionarchive
environment: environment:
ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_SchedulerService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres} ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_SchedulerService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres}
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq RabbitMQ__ConnectionString: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy
@@ -90,14 +87,14 @@ services:
user-service: user-service:
image: git.orfl.xyz/conco/fictionarchive-user-service:latest image: git.orfl.xyz/conco/fictionarchive-user-service:latest
networks:
- fictionarchive
environment: environment:
ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_UserService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres} ConnectionStrings__DefaultConnection: Host=postgres;Database=FictionArchive_UserService;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres}
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq RabbitMQ__ConnectionString: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
healthcheck: Authentik__BaseUrl: https://auth.orfl.xyz
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"] Authentik__ApiToken: ${AUTHENTIK_API_TOKEN}
interval: 30s Authentik__EmailStageId: 10df0c18-8802-4ec7-852e-3cdd355514d3
timeout: 10s
retries: 3
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy
@@ -105,42 +102,21 @@ services:
condition: service_healthy condition: service_healthy
restart: unless-stopped restart: unless-stopped
authentication-service:
image: git.orfl.xyz/conco/fictionarchive-authentication-service:latest
environment:
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on:
rabbitmq:
condition: service_healthy
restart: unless-stopped
file-service: file-service:
image: git.orfl.xyz/conco/fictionarchive-file-service:latest image: git.orfl.xyz/conco/fictionarchive-file-service:latest
networks:
- web
- fictionarchive
environment: environment:
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq RabbitMQ__ConnectionString: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
S3__Endpoint: ${S3_ENDPOINT:-https://s3.orfl.xyz}
S3__Bucket: ${S3_BUCKET:-fictionarchive}
S3__AccessKey: ${S3_ACCESS_KEY} S3__AccessKey: ${S3_ACCESS_KEY}
S3__SecretKey: ${S3_SECRET_KEY} S3__SecretKey: ${S3_SECRET_KEY}
Proxy__BaseUrl: https://files.orfl.xyz/api ProxyConfiguration__BaseUrl: https://files.fictionarchive.orfl.xyz/api
OIDC__Authority: https://auth.orfl.xyz/application/o/fictionarchive/
OIDC__ClientId: fictionarchive-files
OIDC__Audience: fictionarchive-api
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 30s
timeout: 10s
retries: 3
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.file-service.rule=Host(`files.orfl.xyz`)" - "traefik.http.routers.file-service.rule=Host(`files.fictionarchive.orfl.xyz`)"
- "traefik.http.routers.file-service.entrypoints=websecure" - "traefik.http.routers.file-service.tls=true"
- "traefik.http.routers.file-service.tls.certresolver=letsencrypt" - "traefik.http.routers.file-service.tls.certresolver=lets-encrypt"
- "traefik.http.services.file-service.loadbalancer.server.port=8080" - "traefik.http.services.file-service.loadbalancer.server.port=8080"
depends_on: depends_on:
rabbitmq: rabbitmq:
@@ -152,30 +128,22 @@ services:
# =========================================== # ===========================================
api-gateway: api-gateway:
image: git.orfl.xyz/conco/fictionarchive-api:latest image: git.orfl.xyz/conco/fictionarchive-api:latest
networks:
- web
- fictionarchive
environment: environment:
ConnectionStrings__RabbitMQ: amqp://${RABBITMQ_USER:-guest}:${RABBITMQ_PASSWORD:-guest}@rabbitmq
OIDC__Authority: https://auth.orfl.xyz/application/o/fictionarchive/
OIDC__ClientId: fictionarchive-api
OIDC__Audience: fictionarchive-api
Cors__AllowedOrigin: https://fictionarchive.orfl.xyz Cors__AllowedOrigin: https://fictionarchive.orfl.xyz
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 30s
timeout: 10s
retries: 3
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.api-gateway.rule=Host(`api.fictionarchive.orfl.xyz`)" - "traefik.http.routers.api-gateway.rule=Host(`api.fictionarchive.orfl.xyz`)"
- "traefik.http.routers.api-gateway.entrypoints=websecure" - "traefik.http.routers.api-gateway.tls=true"
- "traefik.http.routers.api-gateway.tls.certresolver=letsencrypt" - "traefik.http.routers.api-gateway.tls.certresolver=lets-encrypt"
- "traefik.http.services.api-gateway.loadbalancer.server.port=8080" - "traefik.http.services.api-gateway.loadbalancer.server.port=8080"
depends_on: depends_on:
- novel-service - novel-service
- translation-service
- scheduler-service - scheduler-service
- user-service
- authentication-service
- file-service - file-service
- user-service
restart: unless-stopped restart: unless-stopped
# =========================================== # ===========================================
@@ -183,20 +151,17 @@ services:
# =========================================== # ===========================================
frontend: frontend:
image: git.orfl.xyz/conco/fictionarchive-frontend:latest image: git.orfl.xyz/conco/fictionarchive-frontend:latest
healthcheck: networks:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/"] - web
interval: 30s
timeout: 10s
retries: 3
labels: labels:
- "traefik.enable=true" - traefik.http.routers.fafrontend.rule=Host(`fictionarchive.orfl.xyz`)
- "traefik.http.routers.frontend.rule=Host(`fictionarchive.orfl.xyz`)" - traefik.http.routers.fafrontend.tls=true
- "traefik.http.routers.frontend.entrypoints=websecure" - traefik.http.routers.fafrontend.tls.certresolver=lets-encrypt
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt" - traefik.http.services.fafrontend.loadbalancer.server.port=80
- "traefik.http.services.frontend.loadbalancer.server.port=80" - traefik.enable=true
restart: unless-stopped restart: unless-stopped
volumes: networks:
postgres_data: web:
rabbitmq_data: external: yes
letsencrypt: fictionarchive: