mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
At BBB boot, bbb-graphql-server's start.sh runs pg_terminate_backend and drops bbb_graphql. When that kills apps-akka's first HikariCP connection while the pool detects the driver's default transaction isolation, HikariCP 4.0.3 swallows the 08xxx error, marks detection as done and keeps isolation -1 for the pool's lifetime. Every later connection setup then calls setTransactionIsolation(-1), which pgjdbc rejects with "Transaction isolation level -1 not supported", so meetings never reach the database and the client shows "Oops" (about 1 in 8 boots). Pin the isolation explicitly so HikariCP never falls back to the detected value: slick-hikaricp reads postgres.transactionIsolation, prepends TRANSACTION_ and hands it to HikariCP, hence the value must be exactly READ_COMMITTED (the PostgreSQL default, so normal boots behave as before). The flag goes into apps-akka's own compose environment as JAVA_OPTS, which the sbt-native-packager start script honours, instead of env.j2, because compose_mods pins env.j2 onto every bbb service and would hand the flag to bbb-web and fsesl-akka as well. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
114 lines
4.6 KiB
Django/Jinja
114 lines
4.6 KiB
Django/Jinja
services:
|
|
{% set service_name = 'bbb-web' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{{ lookup('container_extra_hosts') | indent(4) }}
|
|
{% if BBB_COLLABORA_ENABLED | bool %}
|
|
{{ lookup('depends_on', ['redis']) }}
|
|
{% endif %}
|
|
{% set service_name = 'freeswitch' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% set service_name = 'nginx' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% set service_name = 'bbb-shared-notes-server' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('compose_restart') }}
|
|
{% set service_name = 'bbb-export-annotations' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% set service_name = 'fsesl-akka' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{% set service_name = 'apps-akka' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
environment:
|
|
JAVA_OPTS: "-Dpostgres.transactionIsolation=READ_COMMITTED"
|
|
{% set service_name = 'bbb-graphql-server' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_healthcheck', service_name) | indent(4) }}
|
|
{% set service_name = 'bbb-graphql-actions' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{% set service_name = 'bbb-graphql-middleware' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{% set service_name = 'periodic' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% set service_name = 'redis' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% set service_name = 'postgres' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% if lookup('config', application_id, 'services.prometheus.enabled') | bool %}
|
|
{% set service_name = 'prometheus-exporter' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% endif %}
|
|
{% if BBB_GREENLIGHT_ENABLED | bool %}
|
|
{% set service_name = 'greenlight' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
environment:
|
|
URL_HOST: "{{ domain }}"
|
|
{% endif %}
|
|
{% if BBB_RECORDING_ENABLED | bool %}
|
|
{% set service_name = 'recordings' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{% set service_name = 'bbb-webrtc-recorder' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{% endif %}
|
|
{% set service_name = 'webrtc-sfu' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_image', application_id, service_name) }}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
environment:
|
|
MS_WORKERS: "1"
|
|
MS_ENABLE_IPV6: "{{ BBB_IP6_ENABLED | bool | lower }}"
|
|
MS_WEBRTC_LISTEN_IPS: >-
|
|
[{"ip":"0.0.0.0","announcedIp":"${EXTERNAL_IPv4}"}]
|
|
{% if BBB_COTURN_LOCAL_ENABLED | bool %}
|
|
{% set service_name = 'coturn' %}
|
|
{{ service_name }}:
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{{ lookup('container_ports',
|
|
{'service': 'bigbluebutton', 'protocol': 'stun_turn',
|
|
'transport': ['udp', 'tcp'], 'container': 'same'},
|
|
{'service': 'bigbluebutton', 'protocol': 'relay',
|
|
'transport': 'udp', 'container': 'same',
|
|
'publish': 'ephemeral'}) | indent(4) }}
|
|
command: >-
|
|
--use-auth-secret
|
|
--static-auth-secret=${TURN_SECRET}
|
|
--lt-cred-mech
|
|
--realm=${DOMAIN}
|
|
--fingerprint
|
|
--no-multicast-peers
|
|
--no-cli
|
|
--external-ip=${EXTERNAL_IPv4}
|
|
--min-port={{ BBB_RELAY_PORT_START }}
|
|
--max-port={{ BBB_RELAY_PORT_END }}
|
|
{% if BBB_IP6_ENABLED %}--external-ip=${EXTERNAL_IPv6}{% endif %}
|
|
{% if lookup('tls', application_id, 'enabled') | bool %}
|
|
--cert=${COTURN_TLS_CERT_PATH}
|
|
--pkey=${COTURN_TLS_KEY_PATH}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
{{ lookup('compose_volumes') }}
|