mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-08 19:27:18 +02:00
Nextcloud: integrate Talk & Whiteboard; adjust ports & healthchecks
- Enable Spreed (Talk); signaling via /standalone-signaling/ - STUN/TURN: move STUN to 3480 (3479 occupied by BBB), keep TURN 5350 reserved - docker-compose: expose internal WS ports; explicit TURN port mapping - Healthchecks: add nc-based TCP checks (roles/docker-container/templates/healthcheck/nc.yml.j2) - Nginx: location proxy to talk:8081 - Schema: add talk_* secrets (turn/signaling/internal) - Plugins: configure spreed/whiteboard via vars/*; remove old task files - Ports matrix (group_vars/all/09_ports.yml) updated/commented Conversation: https://chatgpt.com/share/68b61a6a-e1dc-800f-b793-4aa600bc0166
This commit is contained in:
@@ -8,7 +8,6 @@ ports:
|
|||||||
websocket:
|
websocket:
|
||||||
web-app-mastodon: 4001
|
web-app-mastodon: 4001
|
||||||
web-app-espocrm: 4002
|
web-app-espocrm: 4002
|
||||||
web-app-nextcloud: 4003
|
|
||||||
oauth2_proxy:
|
oauth2_proxy:
|
||||||
web-app-phpmyadmin: 4181
|
web-app-phpmyadmin: 4181
|
||||||
web-app-lam: 4182
|
web-app-lam: 4182
|
||||||
@@ -24,11 +23,10 @@ ports:
|
|||||||
http:
|
http:
|
||||||
# Ports which are exposed to the World Wide Web
|
# Ports which are exposed to the World Wide Web
|
||||||
web-app-nextcloud: 8001
|
web-app-nextcloud: 8001
|
||||||
# web-app-nextcloud_talk: 8005
|
|
||||||
# web-app-nextcloud_whiteboard: 8015
|
|
||||||
web-app-gitea: 8002
|
web-app-gitea: 8002
|
||||||
web-app-wordpress: 8003
|
web-app-wordpress: 8003
|
||||||
web-app-mediawiki: 8004
|
web-app-mediawiki: 8004
|
||||||
|
# Free : 8005
|
||||||
web-app-yourls: 8006
|
web-app-yourls: 8006
|
||||||
web-app-mailu: 8007
|
web-app-mailu: 8007
|
||||||
web-app-elk: 8008
|
web-app-elk: 8008
|
||||||
@@ -38,6 +36,7 @@ ports:
|
|||||||
web-app-funkwhale: 8012
|
web-app-funkwhale: 8012
|
||||||
web-app-roulette-wheel: 8013
|
web-app-roulette-wheel: 8013
|
||||||
web-app-joomla: 8014
|
web-app-joomla: 8014
|
||||||
|
# Free: 8015
|
||||||
web-app-pgadmin: 8016
|
web-app-pgadmin: 8016
|
||||||
web-app-baserow: 8017
|
web-app-baserow: 8017
|
||||||
web-app-matomo: 8018
|
web-app-matomo: 8018
|
||||||
@@ -81,9 +80,10 @@ ports:
|
|||||||
svc-db-openldap: 636
|
svc-db-openldap: 636
|
||||||
stun:
|
stun:
|
||||||
web-app-bigbluebutton: 3478 # Not sure if it's right placed here or if it should be moved to localhost section
|
web-app-bigbluebutton: 3478 # Not sure if it's right placed here or if it should be moved to localhost section
|
||||||
web-app-nextcloud: 3479
|
# Occupied by BBB: 3479
|
||||||
|
web-app-nextcloud: 3480
|
||||||
turn:
|
turn:
|
||||||
web-app-bigbluebutton: 5349 # Not sure if it's right placed here or if it should be moved to localhost section
|
web-app-bigbluebutton: 5349 # Not sure if it's right placed here or if it should be moved to localhost section
|
||||||
web-app-nextcloud: 5350 # Not used yet
|
web-app-nextcloud: 5350 # Not used yet
|
||||||
federation:
|
federation:
|
||||||
web-app-matrix_synapse: 8448
|
web-app-matrix_synapse: 8448
|
||||||
|
7
roles/docker-container/templates/healthcheck/nc.yml.j2
Normal file
7
roles/docker-container/templates/healthcheck/nc.yml.j2
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "nc -z localhost {{ container_port }} || exit 1"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
{{ "\n" }}
|
@@ -17,9 +17,7 @@ server:
|
|||||||
- "{{ WEBSOCKET_PROTOCOL }}://collabora.{{ PRIMARY_DOMAIN }}"
|
- "{{ WEBSOCKET_PROTOCOL }}://collabora.{{ PRIMARY_DOMAIN }}"
|
||||||
domains:
|
domains:
|
||||||
canonical:
|
canonical:
|
||||||
nextcloud: "cloud.{{ PRIMARY_DOMAIN }}"
|
- "cloud.{{ PRIMARY_DOMAIN }}"
|
||||||
talk: "talk.{{ PRIMARY_DOMAIN }}"
|
|
||||||
whiteboard: "whiteboard.{{ PRIMARY_DOMAIN }}"
|
|
||||||
docker:
|
docker:
|
||||||
volumes:
|
volumes:
|
||||||
data: nextcloud_data
|
data: nextcloud_data
|
||||||
@@ -242,7 +240,7 @@ plugins:
|
|||||||
- oidc_login # Will be disabled
|
- oidc_login # Will be disabled
|
||||||
spreed:
|
spreed:
|
||||||
# Nextcloud Spreed: offers video conferencing and chat functionalities (https://apps.nextcloud.com/apps/spreed)
|
# Nextcloud Spreed: offers video conferencing and chat functionalities (https://apps.nextcloud.com/apps/spreed)
|
||||||
enabled: false # @todo to activate it first implement web-svc-coturn and activate it
|
enabled: true
|
||||||
tables:
|
tables:
|
||||||
# Nextcloud tables: allows creation and editing of tables within the interface (https://apps.nextcloud.com/apps/tables)
|
# Nextcloud tables: allows creation and editing of tables within the interface (https://apps.nextcloud.com/apps/tables)
|
||||||
enabled: true
|
enabled: true
|
||||||
|
@@ -6,4 +6,16 @@ credentials:
|
|||||||
administrator_password:
|
administrator_password:
|
||||||
description: "Initial password for the Nextcloud administrator (change immediately and enable 2FA)"
|
description: "Initial password for the Nextcloud administrator (change immediately and enable 2FA)"
|
||||||
algorithm: "sha256"
|
algorithm: "sha256"
|
||||||
validation: "^[a-f0-9]{64}$"
|
validation: "^[a-f0-9]{64}$"
|
||||||
|
talk_turn_secret:
|
||||||
|
description: "TURN REST secret for coturn"
|
||||||
|
algorithm: "base64_prefixed_32"
|
||||||
|
validation: "^base64:[A-Za-z0-9+/]{43}=$"
|
||||||
|
talk_signaling_secret:
|
||||||
|
description: "Secret for Talk signaling"
|
||||||
|
algorithm: "base64_prefixed_32"
|
||||||
|
validation: "^base64:[A-Za-z0-9+/]{43}=$"
|
||||||
|
talk_internal_secret:
|
||||||
|
description: "Internal secret for AIO Talk"
|
||||||
|
algorithm: "base64_prefixed_32"
|
||||||
|
validation: "^base64:[A-Za-z0-9+/]{43}=$"
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
failed_when: not ASYNC_ENABLED and config_set_shell.rc != 0
|
failed_when: not ASYNC_ENABLED and config_set_shell.rc != 0
|
||||||
async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}"
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}"
|
||||||
poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}"
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}"
|
||||||
|
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | default(true) | bool }}"
|
||||||
|
|
||||||
- name: Check if {{ plugin_task_path }} exists
|
- name: Check if {{ plugin_task_path }} exists
|
||||||
stat:
|
stat:
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
- name: Set Whiteboard Configuration
|
|
||||||
ansible.builtin.shell: >
|
|
||||||
{{ NEXTCLOUD_DOCKER_EXEC_OCC }} config:app:set whiteboard collabBackendUrl --value='{{ NEXTCLOUD_WHITEBOARD_URL }}'
|
|
||||||
&& {{ NEXTCLOUD_DOCKER_EXEC_OCC }} config:app:set whiteboard jwt_secret_key --value='{{ NEXTCLOUD_WHITEBOARD_JWT }}'
|
|
||||||
args:
|
|
||||||
executable: /bin/bash
|
|
||||||
async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}"
|
|
||||||
poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}"
|
|
||||||
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
|
@@ -1,5 +1,23 @@
|
|||||||
{% include 'roles/docker-compose/templates/base.yml.j2' %}
|
{% include 'roles/docker-compose/templates/base.yml.j2' %}
|
||||||
|
|
||||||
|
proxy:
|
||||||
|
image: "{{ NEXTCLOUD_PROXY_IMAGE }}:{{ NEXTCLOUD_PROXY_VERSION }}"
|
||||||
|
container_name: "{{ NEXTCLOUD_PROXY_CONTAINER }}"
|
||||||
|
logging:
|
||||||
|
driver: journald
|
||||||
|
restart: {{ DOCKER_RESTART_POLICY }}
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
||||||
|
volumes:
|
||||||
|
- "{{ docker_compose.directories.volumes }}nginx.conf:/etc/nginx/nginx.conf:ro"
|
||||||
|
volumes_from:
|
||||||
|
- application
|
||||||
|
|
||||||
|
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
ipv4_address: 192.168.102.67
|
||||||
|
|
||||||
application:
|
application:
|
||||||
image: "{{ NEXTCLOUD_IMAGE }}:{{ NEXTCLOUD_VERSION }}"
|
image: "{{ NEXTCLOUD_IMAGE }}:{{ NEXTCLOUD_VERSION }}"
|
||||||
container_name: {{ NEXTCLOUD_CONTAINER }}
|
container_name: {{ NEXTCLOUD_CONTAINER }}
|
||||||
@@ -18,14 +36,17 @@
|
|||||||
|
|
||||||
{% if NEXTCLOUD_TALK_ENABLED %}
|
{% if NEXTCLOUD_TALK_ENABLED %}
|
||||||
talk:
|
talk:
|
||||||
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
{% set container_port = NEXTCLOUD_TALK_INTERNAL_PORT %}
|
||||||
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
||||||
|
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
|
||||||
image: "{{ NEXTCLOUD_TALK_IMAGE }}:{{ NEXTCLOUD_TALK_VERSION }}"
|
image: "{{ NEXTCLOUD_TALK_IMAGE }}:{{ NEXTCLOUD_TALK_VERSION }}"
|
||||||
container_name: {{ NEXTCLOUD_TALK_CONTAINER }}
|
container_name: {{ NEXTCLOUD_TALK_CONTAINER }}
|
||||||
init: true
|
init: true
|
||||||
ports:
|
ports:
|
||||||
- {{ networks.internet.ip4 }}:{{ NEXTCLOUD_TALK_STUN_PORT }}:3478/tcp #TURN TCP
|
- {{ networks.internet.ip4 }}:{{ NEXTCLOUD_TALK_STUN_PORT }}:{{ NEXTCLOUD_TALK_INT_TURN_PORT }}/tcp #TURN TCP
|
||||||
- {{ networks.internet.ip4 }}:{{ NEXTCLOUD_TALK_STUN_PORT }}:3478/udp #TURN UDP
|
- {{ networks.internet.ip4 }}:{{ NEXTCLOUD_TALK_STUN_PORT }}:{{ NEXTCLOUD_TALK_INT_TURN_PORT }}/udp #TURN UDP
|
||||||
- {{ networks.internet.ip4 }}:{{ NEXTCLOUD_TALK_WS_PORT }}:8081/tcp
|
expose:
|
||||||
|
- "{{ container_port }}"
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
ipv4_address: 192.168.102.68
|
ipv4_address: 192.168.102.68
|
||||||
@@ -33,34 +54,18 @@
|
|||||||
|
|
||||||
{% if NEXTCLOUD_WHITEBOARD_ENABLED %}
|
{% if NEXTCLOUD_WHITEBOARD_ENABLED %}
|
||||||
whiteboard:
|
whiteboard:
|
||||||
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
{% set container_port = NEXTCLOUD_WHITEBOARD_INTERNAL_PORT %}
|
||||||
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
||||||
|
{% include 'roles/docker-container/templates/healthcheck/nc.yml.j2' %}
|
||||||
image: "{{ NEXTCLOUD_WHITEBOARD_IMAGE }}:{{ NEXTCLOUD_WHITEBOARD_VERSION }}"
|
image: "{{ NEXTCLOUD_WHITEBOARD_IMAGE }}:{{ NEXTCLOUD_WHITEBOARD_VERSION }}"
|
||||||
container_name: {{ NEXTCLOUD_WHITEBOARD_CONTAINER }}
|
container_name: {{ NEXTCLOUD_WHITEBOARD_CONTAINER }}
|
||||||
expose:
|
expose:
|
||||||
- "{{ NEXTCLOUD_WHITEBOARD_INTERNAL_PORT }}"
|
- "{{ container_port }}"
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
ipv4_address: 192.168.102.71
|
ipv4_address: 192.168.102.71
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
proxy:
|
|
||||||
image: "{{ NEXTCLOUD_PROXY_IMAGE }}:{{ NEXTCLOUD_PROXY_VERSION }}"
|
|
||||||
container_name: "{{ NEXTCLOUD_PROXY_CONTAINER }}"
|
|
||||||
logging:
|
|
||||||
driver: journald
|
|
||||||
restart: {{ DOCKER_RESTART_POLICY }}
|
|
||||||
ports:
|
|
||||||
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
|
||||||
volumes:
|
|
||||||
- "{{ docker_compose.directories.volumes }}nginx.conf:/etc/nginx/nginx.conf:ro"
|
|
||||||
volumes_from:
|
|
||||||
- application
|
|
||||||
|
|
||||||
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
|
|
||||||
networks:
|
|
||||||
default:
|
|
||||||
ipv4_address: 192.168.102.67
|
|
||||||
|
|
||||||
cron:
|
cron:
|
||||||
container_name: "{{ NEXTCLOUD_CRON_CONTAINER }}"
|
container_name: "{{ NEXTCLOUD_CRON_CONTAINER }}"
|
||||||
image: "{{ NEXTCLOUD_IMAGE }}:{{ NEXTCLOUD_VERSION }}"
|
image: "{{ NEXTCLOUD_IMAGE }}:{{ NEXTCLOUD_VERSION }}"
|
||||||
|
@@ -41,15 +41,14 @@ REDIS_PORT= 6379
|
|||||||
|
|
||||||
{% if NEXTCLOUD_TALK_ENABLED %}
|
{% if NEXTCLOUD_TALK_ENABLED %}
|
||||||
# Talk Configuration
|
# Talk Configuration
|
||||||
# This code was just moved here during refactoring and isn't tested yet.
|
|
||||||
# @todo move it to an own env file for encapsulation reasons
|
# @todo move it to an own env file for encapsulation reasons
|
||||||
NC_DOMAIN={{ NEXTCLOUD_DOMAIN }}
|
NC_DOMAIN={{ NEXTCLOUD_DOMAIN }}
|
||||||
TALK_HOST={{ NEXTCLOUD_TALK_DOMAIN }}
|
TALK_HOST={{ NEXTCLOUD_TALK_DOMAIN }}
|
||||||
TURN_SECRET=${TURN_SECRET}
|
TURN_SECRET={{ applications | get_app_conf(application_id, 'credentials.talk_turn_secret') }}
|
||||||
SIGNALING_SECRET=${SIGNALING_SECRET}
|
SIGNALING_SECRET={{ applications | get_app_conf(application_id, 'credentials.talk_signaling_secret') }}
|
||||||
TZ=Europe/Berlin
|
INTERNAL_SECRET={{ applications | get_app_conf(application_id, 'credentials.talk_internal_secret') }}
|
||||||
|
TZ={{ HOST_TIMEZONE }}
|
||||||
TALK_PORT=3478
|
TALK_PORT=3478
|
||||||
INTERNAL_SECRET=${INTERNAL_SECRET}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if NEXTCLOUD_WHITEBOARD_ENABLED %}
|
{% if NEXTCLOUD_WHITEBOARD_ENABLED %}
|
||||||
|
@@ -189,5 +189,14 @@ http {
|
|||||||
proxy_set_header Connection "upgrade";
|
proxy_set_header Connection "upgrade";
|
||||||
proxy_read_timeout 3600;
|
proxy_read_timeout 3600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location {{ NEXTCLOUD_TALK_LOCATION }} {
|
||||||
|
proxy_pass http://talk:{{ NEXTCLOUD_TALK_INTERNAL_PORT }}/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_read_timeout 3600;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -63,9 +63,13 @@ NEXTCLOUD_TALK_IMAGE: "{{ applications | get_app_conf(application_
|
|||||||
NEXTCLOUD_TALK_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.talk.version') }}"
|
NEXTCLOUD_TALK_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.talk.version') }}"
|
||||||
NEXTCLOUD_TALK_ENABLED: "{{ applications | get_app_conf(application_id, 'plugins.spreed.enabled') }}"
|
NEXTCLOUD_TALK_ENABLED: "{{ applications | get_app_conf(application_id, 'plugins.spreed.enabled') }}"
|
||||||
NEXTCLOUD_TALK_STUN_PORT: "{{ ports.public.stun[application_id] }}"
|
NEXTCLOUD_TALK_STUN_PORT: "{{ ports.public.stun[application_id] }}"
|
||||||
NEXTCLOUD_TALK_WS_PORT: "{{ ports.localhost.websocket[application_id] }}"
|
NEXTCLOUD_TALK_DOMAIN: "{{ NEXTCLOUD_DOMAIN }}"
|
||||||
NEXTCLOUD_TALK_DOMAIN: "{{ domains[application_id].talk }}"
|
NEXTCLOUD_TALK_LOCATION: "/standalone-signaling/"
|
||||||
|
NEXTCLOUD_TALK_URL: "{{ [ NEXTCLOUD_URL, NEXTCLOUD_TALK_LOCATION ] | url_join }}"
|
||||||
|
NEXTCLOUD_TALK_INTERNAL_PORT: "8081"
|
||||||
|
NEXTCLOUD_TALK_INT_TURN_PORT: "3478"
|
||||||
|
|
||||||
|
### Whiteboard
|
||||||
NEXTCLOUD_WHITEBOARD_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.whiteboard.name') }}"
|
NEXTCLOUD_WHITEBOARD_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.whiteboard.name') }}"
|
||||||
NEXTCLOUD_WHITEBOARD_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.whiteboard.image') }}"
|
NEXTCLOUD_WHITEBOARD_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.whiteboard.image') }}"
|
||||||
NEXTCLOUD_WHITEBOARD_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.whiteboard.version') }}"
|
NEXTCLOUD_WHITEBOARD_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.whiteboard.version') }}"
|
||||||
@@ -77,7 +81,6 @@ NEXTCLOUD_WHITEBOARD_URL: "{{ [ NEXTCLOUD_URL, NEXTCLOUD_WHITEBOARD_LO
|
|||||||
|
|
||||||
### Collabora
|
### Collabora
|
||||||
NEXTCLOUD_COLLABORA_URL: "{{ domains | get_url('web-svc-collabora', WEB_PROTOCOL) }}"
|
NEXTCLOUD_COLLABORA_URL: "{{ domains | get_url('web-svc-collabora', WEB_PROTOCOL) }}"
|
||||||
# NEXTCLOUD_COLLABORA_ENABLED: "{{ applications | get_app_conf(application_id, 'plugins.richdocuments.enabled') }}"
|
|
||||||
|
|
||||||
## User Configuration
|
## User Configuration
|
||||||
NEXTCLOUD_DOCKER_USER_id: 82 # UID of the www-data user
|
NEXTCLOUD_DOCKER_USER_id: 82 # UID of the www-data user
|
||||||
|
23
roles/web-app-nextcloud/vars/plugins/spreed.yml
Normal file
23
roles/web-app-nextcloud/vars/plugins/spreed.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
plugin_configuration:
|
||||||
|
- appid: "spreed"
|
||||||
|
configkey: "signaling_servers"
|
||||||
|
configvalue:
|
||||||
|
- server: "{{ NEXTCLOUD_TALK_URL }}"
|
||||||
|
verify: true
|
||||||
|
# optional:
|
||||||
|
alias: "primary"
|
||||||
|
|
||||||
|
# STUN
|
||||||
|
- appid: "spreed"
|
||||||
|
configkey: "stun_servers"
|
||||||
|
configvalue:
|
||||||
|
- "stun:{{ NEXTCLOUD_TALK_DOMAIN }}:{{ NEXTCLOUD_TALK_STUN_PORT }}"
|
||||||
|
|
||||||
|
# TURN with REST-Secret (used by Talk/Coturn)
|
||||||
|
- appid: "spreed"
|
||||||
|
configkey: "turn_servers"
|
||||||
|
configvalue:
|
||||||
|
- server: "turn:{{ NEXTCLOUD_TALK_DOMAIN }}:{{ NEXTCLOUD_TALK_STUN_PORT }}?transport=udp"
|
||||||
|
secret: "{{ applications | get_app_conf(application_id, 'credentials.talk_turn_secret') }}"
|
||||||
|
ttl: 86400
|
||||||
|
protocols: "udp,tcp"
|
8
roles/web-app-nextcloud/vars/plugins/whiteboard.yml
Normal file
8
roles/web-app-nextcloud/vars/plugins/whiteboard.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
plugin_configuration:
|
||||||
|
- appid: "whiteboard"
|
||||||
|
configkey: "collabBackendUrl"
|
||||||
|
configvalue: "{{ NEXTCLOUD_WHITEBOARD_URL }}"
|
||||||
|
|
||||||
|
- appid: "whiteboard"
|
||||||
|
configkey: "jwt_secret_key"
|
||||||
|
configvalue: "{{ NEXTCLOUD_WHITEBOARD_JWT }}"
|
Reference in New Issue
Block a user