Files
computer-playbook/roles/web-app-openproject/meta/services.yml

164 lines
4.7 KiB
YAML

---
# nocheck: seaweedfs-playwright — S3 backs work-package attachments (embedded FOG storage); no standalone object-browser surface to script, consistent with the playwright-service-flag exemption on the seaweedfs key.
logout:
bond: 1
enabled: "{{ 'web-svc-logout' in group_names }}"
shared: "{{ 'web-svc-logout' in group_names }}"
# nocheck: playwright-service-flag — identity backend, no Playwright surface (verified by the OIDC bridge specs)
ldap:
bond: 1
enabled: "{{ 'svc-db-openldap' in group_names }}"
shared: "{{ 'svc-db-openldap' in group_names }}"
dashboard:
bond: 1
enabled: "{{ 'web-app-dashboard' in group_names }}"
shared: "{{ 'web-app-dashboard' in group_names }}"
matomo:
bond: 1
enabled: "{{ 'web-app-matomo' in group_names }}"
shared: "{{ 'web-app-matomo' in group_names }}"
email:
bond: 1
enabled: "{{ MAIL_PROVIDER in group_names }}"
shared: "{{ MAIL_PROVIDER in group_names }}"
# nocheck: playwright-service-flag — DB engine, covered by role-local integration tests
postgres:
bond: 1
enabled: true # nocheck: dynamic-flag
shared: "{{ 'svc-db-postgres' in group_names }}"
# nocheck: playwright-service-flag — object store, no Playwright surface
minio:
enabled: false # nocheck: dynamic-flag
shared: false # nocheck: dynamic-flag
# nocheck: playwright-service-flag — object store, no Playwright surface
seaweedfs:
bond: 1
enabled: "{{ 'web-app-seaweedfs' in group_names }}"
shared: "{{ 'web-app-seaweedfs' in group_names }}"
web:
name: openproject-web
healthcheck:
flavor: curl
path: health_checks/default
ports:
internal:
http: 8080
image: openproject/openproject
version: "17"
custom: true
backup:
no_stop_required: true
cpus: "3.0"
mem_reservation: 3g
mem_limit: 6g
pids_limit: 2048
min_storage: 1076MB
seeder:
name: openproject-seeder
cpus: "0.3"
mem_reservation: 256m
mem_limit: 512m
pids_limit: 256
min_storage: 1GB
# nocheck: single-replica run-once seeder. Concurrent replicas race on one Postgres (duplicate-key) and never converge; the seeder migrates/seeds once then exits.
replicas: 1
cron:
name: openproject-cron
cpus: "0.3"
mem_reservation: 256m
mem_limit: 512m
pids_limit: 256
min_storage: 1GB
# nocheck: single-replica GoodJob scheduler. Concurrent cron replicas race to enqueue the same recurring jobs and collide on the (cron_key, cron_at) unique index; one scheduler is enough.
replicas: 1
worker:
name: openproject-worker
cpus: "2.0"
mem_reservation: 2g
mem_limit: 3g
pids_limit: 2048
min_storage: 5GB
proxy:
name: openproject-proxy
custom: true
cpus: "0.3"
mem_reservation: 256m
mem_limit: 512m
pids_limit: 256
min_storage: 1GB
cache:
name: openproject-cache
cpus: "0.3"
mem_reservation: 512m
mem_limit: 512m
pids_limit: 256
min_storage: 1GB
sso:
bond: 1
enabled: "{{ 'web-app-keycloak' in group_names }}"
shared: "{{ 'web-app-keycloak' in group_names }}"
flavor: oauth2
oauth2:
origin:
host: proxy
port: "80"
acl:
whitelist:
- /users/me
- /api/
- /oauth/token
# nocheck: playwright-service-flag — css consumer, no Playwright surface (provider: web-svc-css)
css:
bond: 1
enabled: "{{ 'web-svc-css' in group_names }}"
shared: "{{ 'web-svc-css' in group_names }}"
prometheus:
bond: 1
enabled: "{{ 'web-app-prometheus' in group_names }}"
shared: "{{ 'web-app-prometheus' in group_names }}"
# nocheck: playwright-service-flag
# nocheck: variants-coverage — sso-variant-tor requires the onion on in every variant, so the false polarity has no variant left to live in
tor:
bond: 0.5
enabled: "{{ 'svc-net-tor' in group_names }}"
shared: true # nocheck: dynamic-flag
# nocheck: playwright-service-flag: shared provider entity; the app itself is covered by this role's own Playwright spec
openproject:
modes:
compose:
enabled: true
swarm:
enabled: true
bond: 1
enabled: true # nocheck: dynamic-flag
shared: true
repository: https://github.com/opf/openproject-deploy
ref: "stable/{{ lookup('config', 'web-app-openproject', 'services.web.version') }}"
ldap:
filters:
administrators: false
users: false
ports:
local:
sso: 16483
http: 8023
internal:
http: 80
proxy:
service_key: web
internal_port: 8080
run_after:
- web-app-keycloak
lifecycle: beta
min_storage: 10GB
cpus: "1.0"
mem_reservation: 1g
mem_limit: 2g
pids_limit: 1024
# nocheck: playwright-service-flag, dynamic-flag infrastructure backup consumer
container_backup: # nocheck: bond-baseline backup host joins outside the variant topology
bond: 1
enabled: "{{ 'svc-bkp-volume-2-local' in group_names }}"
shared: true