dotnet-v7/docekr-compose.yml
2025-03-19 16:55:05 +08:00

143 lines
4.7 KiB
YAML

services:
app01-replica:
image: ${APP01_IMAGE}
hostname: ${APP01_HOSTNAME}
environment:
APP01_IMAGE: "${APP01_IMAGE}"
APP01_HOSTNAME: "${APP01_HOSTNAME}"
APP01_EXPOSED_PORT: "${APP01_EXPOSED_PORT}"
URL: "${URL}"
APP01_PATH_PREFIX: "${APP01_PATH_PREFIX}"
PROXY_NETWORK: "${PROXY_NETWORK}"
expose:
- "${APP01_EXPOSED_PORT}"
deploy:
mode: replicated
replicas: 3
restart: always
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "10"
compress: "true"
rotate-max-age: "7d"
labels: "app=app01,env=production,version=1.0.0"
labels:
app: "app01"
version: "1.0.0"
env: "test"
app_url: "${URL}/${APP01_PATH_PREFIX}"
traefik.enable: "true"
traefik.http.routers.app01.entrypoints: "https"
traefik.http.routers.app01.rule: "Host(`${URL}`) && PathPrefix(`/${APP01_PATH_PREFIX}`)"
traefik.http.routers.app01.tls: "true"
traefik.http.routers.app01.tls.certresolver: "letsEncrypt"
traefik.http.routers.app01.service: "app01"
traefik.http.services.app01.loadbalancer.server.port: "${APP01_EXPOSED_PORT}"
traefik.http.services.app01.loadbalancer.passhostheader: "true"
traefik.http.routers.app01.middlewares: "app01-header"
traefik.http.middlewares.app01-header.headers.referrerPolicy: "no-referrer"
traefik.http.middlewares.app01-header.headers.stsSeconds: "15552000"
traefik.http.middlewares.app01-header.headers.forceSTSHeader: "true"
traefik.http.middlewares.app01-header.headers.stsPreload: "true"
traefik.http.middlewares.app01-header.headers.customrequestheaders.X-Forwarded-Proto: "https,wss"
traefik.docker.network: "${PROXY_NETWORK}"
networks:
- proxy
app02:
image: ${APP02_IMAGE}
hostname: ${APP02_HOSTNAME}
environment:
APP02_IMAGE: "${APP02_IMAGE}"
APP02_HOSTNAME: "${APP02_HOSTNAME}"
APP02_EXPOSED_PORT: "${APP02_EXPOSED_PORT}"
APP03_HOSTNAME: "${APP03_HOSTNAME}"
APP03_EXPOSED_PORT: "${APP03_EXPOSED_PORT}"
URL: "${URL}"
APP01_PATH_PREFIX: "${APP02_PATH_PREFIX}"
PROXY_NETWORK: "${PROXY_NETWORK}"
SERVICE_NETWORK: ${SERVICE_NETWORK}
expose:
- "${APP02_EXPOSED_PORT}"
restart: always
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
logging:
driver: "fluentd"
options:
fluentd-address: "tcp://<fluentd-host>:24224"
tag: "docker.{{.Name}}"
labels:
app: "app02"
version: "1.0.0"
env: "test"
app_url: "${URL}/${APP02_PATH_PREFIX}"
traefik.enable: "true"
traefik.http.routers.app01.entrypoints: "https"
traefik.http.routers.app01.rule: "Host(`${URL}`) && PathPrefix(`/${APP02_PATH_PREFIX}`)"
traefik.http.routers.app01.tls: "true"
traefik.http.routers.app01.tls.certresolver: "letsEncrypt"
traefik.http.routers.app01.service: "app01"
traefik.http.services.app01.loadbalancer.server.port: "5000"
traefik.http.services.app01.loadbalancer.passhostheader: "true"
traefik.http.routers.app01.middlewares: "app01-header"
traefik.http.middlewares.app01-header.headers.referrerPolicy: "no-referrer"
traefik.http.middlewares.app01-header.headers.stsSeconds: "15552000"
traefik.http.middlewares.app01-header.headers.forceSTSHeader: "true"
traefik.http.middlewares.app01-header.headers.stsPreload: "true"
traefik.http.middlewares.app01-header.headers.customrequestheaders.X-Forwarded-Proto: "https,wss"
traefik.docker.network: "${PROXY_NETWORK}"
networks:
- proxy
- service
app03:
image: ${APP03_IMAGE}
hostname: ${APP03_HOSTNAME}
depends_on:
app02:
condition: service_started
environment:
APP03_IMAGE: "${APP03_IMAGE}"
APP03_HOSTNAME: "${APP03_HOSTNAME}"
APP03_EXPOSED_PORT: "${APP03_EXPOSED_PORT}"
SERVICE_NETWORK: ${SERVICE_NETWORK}
expose:
- "${APP03_EXPOSED_PORT}"
restart: always
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
logging:
driver: "fluentd"
options:
fluentd-address: "tcp://<fluentd-host>:24224"
tag: "docker.{{.Name}}"
labels:
app: "app03"
version: "1.0.0"
env: "test"
networks:
- service
networks:
proxy:
name: ${PROXY_NETWORK}
external: true
service:
name: ${SERVICE_NETWORK}
external: true