fix: correct Streamlit progress values and API docs behind /v1 prefix

This commit is contained in:
CM Consultor
2026-08-09 04:19:44 +00:00
parent bb03663921
commit 9d6e8bd52d
3 changed files with 182 additions and 12 deletions

166
docker-compose.yaml Normal file
View File

@@ -0,0 +1,166 @@
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