166 lines
5.7 KiB
YAML
166 lines
5.7 KiB
YAML
x-logging: &default-logging
|
|
driver: json-file
|
|
options:
|
|
max-size: "1m"
|
|
max-file: "1"
|
|
tag: "{{.Name}}"
|
|
|
|
x-common-env: &common-env
|
|
TZ: "${TZ:-America/Sao_Paulo}"
|
|
|
|
services:
|
|
api:
|
|
image: ${PDF_TOOLKIT_API_IMAGE}
|
|
environment:
|
|
<<: *common-env
|
|
API_PORT: "${API_PORT:-8555}"
|
|
# Prefixo externo usado pelo Traefik (PathPrefix /v1 + strip).
|
|
API_ROOT_PATH: "${API_ROOT_PATH:-/v1}"
|
|
PDFTOOLKIT_API_KEY: "${PDFTOOLKIT_API_KEY:-}"
|
|
cap_drop:
|
|
- ALL
|
|
cap_add:
|
|
- CHOWN
|
|
- SETGID
|
|
- SETUID
|
|
- DAC_OVERRIDE
|
|
volumes:
|
|
- pdf-toolkit_uploads:/tmp/uploads
|
|
networks:
|
|
- network_front
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:${API_PORT:-8555}/health || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
logging: *default-logging
|
|
deploy:
|
|
replicas: 1
|
|
placement:
|
|
constraints:
|
|
- node.hostname == ${NODE_HOSTNAME}
|
|
restart_policy:
|
|
condition: on-failure
|
|
delay: 10s
|
|
max_attempts: 5
|
|
window: 120s
|
|
update_config:
|
|
parallelism: 1
|
|
delay: 10s
|
|
order: stop-first
|
|
failure_action: rollback
|
|
monitor: 90s
|
|
rollback_config:
|
|
parallelism: 1
|
|
order: stop-first
|
|
monitor: 90s
|
|
resources:
|
|
reservations:
|
|
cpus: "0.25"
|
|
memory: 256M
|
|
limits:
|
|
cpus: "1.00"
|
|
memory: 1024M
|
|
labels:
|
|
- loki_enable=true
|
|
- traefik.enable=true
|
|
- traefik.docker.network=network_front
|
|
- traefik.http.routers.${APP_NAME}-api.rule=Host(`${APP_NAME}.${DOMAIN_NAME}`) && PathPrefix(`/v1`)
|
|
- traefik.http.routers.${APP_NAME}-api.priority=100
|
|
- traefik.http.routers.${APP_NAME}-api.entrypoints=web,websecure
|
|
- traefik.http.routers.${APP_NAME}-api.tls=true
|
|
- traefik.http.routers.${APP_NAME}-api.tls.certresolver=${CERT_RESOLVER}
|
|
- traefik.http.routers.${APP_NAME}-api.service=${APP_NAME}-api
|
|
- traefik.http.services.${APP_NAME}-api.loadbalancer.server.port=${API_PORT:-8555}
|
|
- traefik.http.services.${APP_NAME}-api.loadbalancer.passhostheader=true
|
|
- traefik.http.middlewares.${APP_NAME}-api-strip.stripprefix.prefixes=/v1
|
|
- traefik.http.middlewares.${APP_NAME}-api-compress.compress=true
|
|
- traefik.http.middlewares.${APP_NAME}-api-security.headers.contenttypenosniff=true
|
|
- traefik.http.middlewares.${APP_NAME}-api-security.headers.referrerpolicy=strict-origin-when-cross-origin
|
|
- traefik.http.middlewares.${APP_NAME}-api-security.headers.stsseconds=31536000
|
|
- traefik.http.middlewares.${APP_NAME}-api-security.headers.stsincludesubdomains=true
|
|
- traefik.http.middlewares.${APP_NAME}-api-security.headers.stspreload=true
|
|
- traefik.http.middlewares.${APP_NAME}-api-security.headers.customresponseheaders.Server=
|
|
- traefik.http.routers.${APP_NAME}-api.middlewares=${APP_NAME}-api-strip,${APP_NAME}-api-compress,${APP_NAME}-api-security
|
|
|
|
web:
|
|
image: ${PDF_TOOLKIT_WEB_IMAGE}
|
|
environment:
|
|
<<: *common-env
|
|
WEB_PORT: "${WEB_PORT:-8550}"
|
|
API_BASE_URL: "http://api:${API_PORT:-8555}"
|
|
cap_drop:
|
|
- ALL
|
|
cap_add:
|
|
- CHOWN
|
|
- SETGID
|
|
- SETUID
|
|
- DAC_OVERRIDE
|
|
volumes:
|
|
- pdf-toolkit_uploads:/tmp/uploads
|
|
networks:
|
|
- network_front
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:${WEB_PORT:-8550}/ || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
logging: *default-logging
|
|
deploy:
|
|
replicas: 1
|
|
placement:
|
|
constraints:
|
|
- node.hostname == ${NODE_HOSTNAME}
|
|
restart_policy:
|
|
condition: on-failure
|
|
delay: 10s
|
|
max_attempts: 5
|
|
window: 120s
|
|
update_config:
|
|
parallelism: 1
|
|
delay: 10s
|
|
order: stop-first
|
|
failure_action: rollback
|
|
monitor: 90s
|
|
rollback_config:
|
|
parallelism: 1
|
|
order: stop-first
|
|
monitor: 90s
|
|
resources:
|
|
reservations:
|
|
cpus: "0.25"
|
|
memory: 256M
|
|
limits:
|
|
cpus: "1.00"
|
|
memory: 1024M
|
|
labels:
|
|
- loki_enable=true
|
|
- traefik.enable=true
|
|
- traefik.docker.network=network_front
|
|
- traefik.http.routers.${APP_NAME}.rule=Host(`${APP_NAME}.${DOMAIN_NAME}`)
|
|
- traefik.http.routers.${APP_NAME}.entrypoints=web,websecure
|
|
- traefik.http.routers.${APP_NAME}.tls=true
|
|
- traefik.http.routers.${APP_NAME}.tls.certresolver=${CERT_RESOLVER}
|
|
- traefik.http.routers.${APP_NAME}.service=${APP_NAME}
|
|
- traefik.http.services.${APP_NAME}.loadbalancer.server.port=${WEB_PORT:-8550}
|
|
- traefik.http.services.${APP_NAME}.loadbalancer.passhostheader=true
|
|
- traefik.http.middlewares.${APP_NAME}-compress.compress=true
|
|
- traefik.http.middlewares.${APP_NAME}-security.headers.contenttypenosniff=true
|
|
- traefik.http.middlewares.${APP_NAME}-security.headers.referrerpolicy=strict-origin-when-cross-origin
|
|
- traefik.http.middlewares.${APP_NAME}-security.headers.stsseconds=31536000
|
|
- traefik.http.middlewares.${APP_NAME}-security.headers.stsincludesubdomains=true
|
|
- traefik.http.middlewares.${APP_NAME}-security.headers.stspreload=true
|
|
- traefik.http.middlewares.${APP_NAME}-security.headers.customresponseheaders.Server=
|
|
- traefik.http.routers.${APP_NAME}.middlewares=${APP_NAME}-compress,${APP_NAME}-security
|
|
|
|
networks:
|
|
network_front:
|
|
external: true
|
|
name: network_front
|
|
|
|
volumes:
|
|
pdf-toolkit_uploads:
|
|
external: true
|
|
name: pdf-toolkit_uploads |