Files

138 lines
4.1 KiB
YAML

name: chublog
x-logging: &logging
driver: json-file
options:
max-size: "10m"
max-file: "3"
services:
init:
build: { context: ., target: init, args: { DEBIAN_MIRROR: "${DEBIAN_MIRROR:-deb.debian.org}" } }
volumes:
- content:/data
- authorization:/auth
- ingress:/srv/ingress
- database:/db-data
- db-logs:/db-logs
restart: "no"
network_mode: none
logging: *logging
api:
build: { context: ., target: api, args: { DEBIAN_MIRROR: "${DEBIAN_MIRROR:-deb.debian.org}" } }
depends_on:
init: { condition: service_completed_successfully }
environment:
PUBLIC_ORIGIN: ${PUBLIC_ORIGIN:?Set PUBLIC_ORIGIN}
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
ADMIN_PASSWORD_HASH: ${ADMIN_PASSWORD_HASH:?Set ADMIN_PASSWORD_HASH}
ALLOW_REGISTRATION: ${ALLOW_REGISTRATION:-false}
CHUSQL_ADDRESS: db:7777
CHUSQL_USER: chublog_index
CHUSQL_PASSWORD: ${CHUSQL_PASSWORD:?Set CHUSQL_PASSWORD}
CHUSQL_DATABASE: chublog
volumes:
- content:/data
- authorization:/auth
- ingress:/srv/ingress:ro
read_only: true
tmpfs: ["/tmp:size=16m,noexec,nosuid"]
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
pids_limit: 128
mem_limit: 512m
cpus: 1.0
networks: [backend]
restart: unless-stopped
healthcheck:
test: [CMD, curl, -fsS, http://127.0.0.1:3001/api/health]
interval: 10s
timeout: 3s
retries: 3
logging: *logging
ssh:
build: { context: ., target: ssh, args: { DEBIAN_MIRROR: "${DEBIAN_MIRROR:-deb.debian.org}" } }
depends_on:
init: { condition: service_completed_successfully }
api: { condition: service_healthy }
environment:
CHUBLOG_SSH_CONFIG: /auth/publishers.json
ports: ["${SSH_BIND:-0.0.0.0}:${SSH_PORT:-2222}:2222"]
volumes:
- ingress:/srv/ingress
- authorization:/auth:ro
- ssh-host-keys:/host-keys
read_only: true
tmpfs: ["/run:size=8m,noexec,nosuid", "/tmp:size=16m,noexec,nosuid"]
cap_drop: [ALL]
cap_add: [SETUID, SETGID, SYS_CHROOT]
security_opt: [no-new-privileges:true]
pids_limit: 64
mem_limit: 256m
cpus: 1.0
networks: [ssh]
restart: unless-stopped
logging: *logging
db:
build: { context: ., target: database, args: { DEBIAN_MIRROR: "${DEBIAN_MIRROR:-deb.debian.org}" } }
depends_on:
init: { condition: service_completed_successfully }
environment:
CHUSQL_ROOT_PASSWORD: ${CHUSQL_ROOT_PASSWORD:?Set CHUSQL_ROOT_PASSWORD}
volumes:
- database:/var/lib/chusql
- db-logs:/var/log/chusql
read_only: true
tmpfs: ["/tmp:size=16m,noexec,nosuid"]
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
pids_limit: 64
mem_limit: 512m
cpus: 1.0
networks: [backend]
restart: unless-stopped
logging: *logging
db-init:
build: { context: ., target: api, args: { DEBIAN_MIRROR: "${DEBIAN_MIRROR:-deb.debian.org}" } }
profiles: [setup]
entrypoint: [chublog-api, provision-db]
environment:
CHUSQL_ADDRESS: db:7777
CHUSQL_ROOT_PASSWORD: ${CHUSQL_ROOT_PASSWORD:?Set CHUSQL_ROOT_PASSWORD}
CHUSQL_PASSWORD: ${CHUSQL_PASSWORD:?Set CHUSQL_PASSWORD}
depends_on: [db]
networks: [backend]
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
read_only: true
restart: "no"
logging: *logging
caddy:
image: caddy:2
environment:
SITE_ADDRESS: ${SITE_ADDRESS:-localhost}
ports: ["${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:80", "${HTTP_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:443"]
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
cap_drop: [ALL]
cap_add: [NET_BIND_SERVICE]
security_opt: [no-new-privileges:true]
networks: [backend, edge]
depends_on:
api: { condition: service_healthy }
restart: unless-stopped
logging: *logging
networks:
backend: { internal: true }
ssh: {}
edge: {}
volumes:
content: {}
ingress: {}
authorization: {}
ssh-host-keys: {}
database: {}
db-logs: {}
caddy-data: {}
caddy-config: {}