2026-02-16 15:51:06 +01:00
|
|
|
services:
|
|
|
|
|
auth:
|
|
|
|
|
image: nginx:alpine
|
|
|
|
|
container_name: api_auth
|
|
|
|
|
volumes:
|
|
|
|
|
- ./auth.conf.template:/etc/nginx/templates/default.conf.template:ro
|
|
|
|
|
environment:
|
|
|
|
|
- API_TOKEN=${API_TOKEN}
|
|
|
|
|
restart: always
|
|
|
|
|
networks:
|
|
|
|
|
- compose_network
|
|
|
|
|
|
|
|
|
|
freepik:
|
|
|
|
|
image: dev.pivoine.art/valknar/freepik-api:latest
|
|
|
|
|
container_name: api_freepik
|
|
|
|
|
environment:
|
|
|
|
|
- FP_FREEPIK_API_KEY=${FP_FREEPIK_API_KEY}
|
|
|
|
|
- FP_WEBHOOK_SECRET=${FP_WEBHOOK_SECRET}
|
|
|
|
|
volumes:
|
|
|
|
|
- ../.data/api/freepik/outputs:/app/outputs
|
|
|
|
|
- ../.data/api/freepik/temp:/app/temp
|
|
|
|
|
restart: always
|
|
|
|
|
labels:
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
- "traefik.http.middlewares.api-redirect-web-secure.redirectscheme.scheme=https"
|
|
|
|
|
- "traefik.http.middlewares.api-auth.forwardauth.address=http://api_auth:8080"
|
|
|
|
|
- "traefik.http.middlewares.api-freepik-strip.stripprefix.prefixes=/freepik"
|
|
|
|
|
- "traefik.http.middlewares.api-freepik-addprefix.addprefix.prefix=/api/v1"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/freepik`)"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web.entrypoints=web"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web.middlewares=api-redirect-web-secure"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web-secure.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/freepik`)"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web-secure.entrypoints=web-secure"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web-secure.tls.certresolver=resolver"
|
|
|
|
|
- "traefik.http.routers.api-freepik-web-secure.middlewares=api-auth,api-freepik-strip,api-freepik-addprefix,api-rate-limit@file"
|
|
|
|
|
- "traefik.http.services.api-freepik-web-secure.loadbalancer.server.port=8000"
|
|
|
|
|
- "traefik.docker.network=${NETWORK_NAME}"
|
|
|
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
|
networks:
|
|
|
|
|
- compose_network
|
|
|
|
|
|
|
|
|
|
facefusion:
|
|
|
|
|
image: dev.pivoine.art/valknar/facefusion-api:latest
|
|
|
|
|
container_name: api_facefusion
|
|
|
|
|
environment:
|
|
|
|
|
- FF_EXECUTION_PROVIDERS=["cpu"]
|
|
|
|
|
volumes:
|
|
|
|
|
- ../.data/api/facefusion/uploads:/app/uploads
|
|
|
|
|
- ../.data/api/facefusion/outputs:/app/outputs
|
|
|
|
|
- ../.data/api/facefusion/models:/app/models
|
|
|
|
|
- ../.data/api/facefusion/temp:/app/temp
|
|
|
|
|
- ../.data/api/facefusion/jobs:/app/jobs
|
|
|
|
|
restart: always
|
|
|
|
|
labels:
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
- "traefik.http.middlewares.api-facefusion-strip.stripprefix.prefixes=/facefusion"
|
|
|
|
|
- "traefik.http.middlewares.api-facefusion-addprefix.addprefix.prefix=/api/v1"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/facefusion`)"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web.entrypoints=web"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web.middlewares=api-redirect-web-secure"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web-secure.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/facefusion`)"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web-secure.entrypoints=web-secure"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web-secure.tls.certresolver=resolver"
|
|
|
|
|
- "traefik.http.routers.api-facefusion-web-secure.middlewares=api-auth,api-facefusion-strip,api-facefusion-addprefix,api-rate-limit@file"
|
|
|
|
|
- "traefik.http.services.api-facefusion-web-secure.loadbalancer.server.port=8000"
|
|
|
|
|
- "traefik.docker.network=${NETWORK_NAME}"
|
|
|
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
|
networks:
|
|
|
|
|
- compose_network
|
|
|
|
|
|
2026-02-16 20:22:33 +01:00
|
|
|
realesrgan:
|
|
|
|
|
image: dev.pivoine.art/valknar/realesrgan-api:latest-cpu
|
|
|
|
|
container_name: api_realesrgan
|
|
|
|
|
environment:
|
|
|
|
|
- RSR_EXECUTION_PROVIDERS=["cpu"]
|
|
|
|
|
volumes:
|
|
|
|
|
- ../.data/api/realesrgan/uploads:/data/uploads
|
|
|
|
|
- ../.data/api/realesrgan/outputs:/data/outputs
|
|
|
|
|
- ../.data/api/realesrgan/models:/data/models
|
|
|
|
|
- ../.data/api/realesrgan/temp:/data/temp
|
|
|
|
|
- ../.data/api/realesrgan/jobs:/data/jobs
|
|
|
|
|
restart: always
|
|
|
|
|
labels:
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
- "traefik.http.middlewares.api-realesrgan-strip.stripprefix.prefixes=/realesrgan"
|
|
|
|
|
- "traefik.http.middlewares.api-realesrgan-addprefix.addprefix.prefix=/api/v1"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/realesrgan`)"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web.entrypoints=web"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web.middlewares=api-redirect-web-secure"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web-secure.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/realesrgan`)"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web-secure.entrypoints=web-secure"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web-secure.tls.certresolver=resolver"
|
|
|
|
|
- "traefik.http.routers.api-realesrgan-web-secure.middlewares=api-auth,api-realesrgan-strip,api-realesrgan-addprefix,api-rate-limit@file"
|
|
|
|
|
- "traefik.http.services.api-realesrgan-web-secure.loadbalancer.server.port=8000"
|
|
|
|
|
- "traefik.docker.network=${NETWORK_NAME}"
|
|
|
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
|
networks:
|
|
|
|
|
- compose_network
|
|
|
|
|
|
2026-02-16 15:51:06 +01:00
|
|
|
networks:
|
|
|
|
|
compose_network:
|
|
|
|
|
name: ${NETWORK_NAME}
|
|
|
|
|
external: true
|