mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2025-11-09 11:38:56 +01:00
Add MatrixZulipBridge (#4695)
* Add links to MatrixZulipBridge Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Add MatrixZulipBridge: copy matrix-bridge-heisenbridge Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Rename matrix-heisenbridge.service.j2 to matrix-matrixzulipbridge.service.j2 - Add the license header to matrix-matrixzulipbridge.service.j2 Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Replace "Heisenbridge" to "MatrixZulipBridge" to "heisenbridge" to "matrixzulipbridge", respectively Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Replace variables related to container image and version Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Update comments and copyright headers Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Update matrix-bridge-matrixzulipbridge/tasks/main.yml: add names to tasks Reuseaa0591f8b0/tasks/main.ymlSigned-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Remove configuration for identd Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Add `matrix_matrixzulipbridge_container_http_port` Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Run ansible-lint for files in tasks/ Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Update `matrix_matrixzulipbridge_registration_yaml` Run `pip install matrixzulipbridge && python3 -m matrixzulipbridge --config config.yaml --generate` to generate config.yaml Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Add MatrixZulipBridge to files in group_vars Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Add configuring-playbook-bridge-matrixzulipbridge.md Reuseb108c8a151/docs/configuring-playbook-bridge-heisenbridge.mdSigned-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Fix `matrix_matrixzulipbridge_config_media_path` Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> * Remove space characters Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Replace "matrixzulipbridge" with "zulip", etc. Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Remove irrelevant instruction Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * MatrixZulipBridge → Zulip bridge Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Rename `@matrixzulipbridge` to `@zulipbot` Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Replace `matrix_bridge_zulip` with `matrix_zulip_bridge` for now Refer to https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/4695#discussion_r2485317210 Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Set `{{ matrix_admin if matrix_admin else '' }}` to `matrix_zulip_bridge_owner` Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Apply the review Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Reuse the section about adjusting the playbook configuration on configuring-playbook-bridge-postmoogle.md Reuse7862fd7cdd/docs/configuring-playbook-bridge-postmoogle.mdSigned-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> * Update configuring-playbook.md: sort list items Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> --------- Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org> Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5> Co-authored-by: Suguru Hirahara <acioustick@noreply.codeberg.org> Co-authored-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5>
This commit is contained in:
122
roles/custom/matrix-bridge-zulip/defaults/main.yml
Normal file
122
roles/custom/matrix-bridge-zulip/defaults/main.yml
Normal file
@@ -0,0 +1,122 @@
|
||||
# SPDX-FileCopyrightText: 2021 - 2022 Toni Spets
|
||||
# SPDX-FileCopyrightText: 2022 - 2023 Nikita Chernyi
|
||||
# SPDX-FileCopyrightText: 2022 - 2025 Slavi Pantaleev
|
||||
# SPDX-FileCopyrightText: 2022 MDAD project contributors
|
||||
# SPDX-FileCopyrightText: 2022 Marko Weltzer
|
||||
# SPDX-FileCopyrightText: 2023 Samuel Meenzen
|
||||
# SPDX-FileCopyrightText: 2024 - 2025 Suguru Hirahara
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
---
|
||||
# MatrixZulipBridge is a puppeting appservice bridge for Zulip
|
||||
# Project source code URL: https://github.com/GearKite/MatrixZulipBridge
|
||||
|
||||
matrix_zulip_bridge_enabled: true
|
||||
|
||||
matrix_zulip_bridge_scheme: https
|
||||
matrix_zulip_bridge_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||
matrix_zulip_bridge_path_prefix: "/zulip"
|
||||
|
||||
# renovate: datasource=docker depName=ghcr.io/gearkite/matrixzulipbridge
|
||||
matrix_zulip_bridge_version: v0.4.1
|
||||
matrix_zulip_bridge_docker_image: "{{ matrix_zulip_bridge_docker_image_registry_prefix }}gearkite/matrixzulipbridge:{{ matrix_zulip_bridge_version }}"
|
||||
matrix_zulip_bridge_docker_image_registry_prefix: "{{ matrix_zulip_bridge_docker_image_registry_prefix_upstream }}"
|
||||
matrix_zulip_bridge_docker_image_registry_prefix_upstream: "{{ matrix_zulip_bridge_docker_image_registry_prefix_upstream_default }}"
|
||||
matrix_zulip_bridge_docker_image_registry_prefix_upstream_default: ghcr.io/
|
||||
matrix_zulip_bridge_docker_image_force_pull: "{{ matrix_zulip_bridge_docker_image.endswith(':latest') }}"
|
||||
|
||||
matrix_zulip_bridge_base_path: "{{ matrix_base_data_path }}/zulip"
|
||||
|
||||
matrix_zulip_bridge_container_network: ""
|
||||
|
||||
# The port number in the container
|
||||
matrix_zulip_bridge_container_http_port: 9898
|
||||
|
||||
matrix_zulip_bridge_container_additional_networks: "{{ matrix_zulip_bridge_container_additional_networks_auto + matrix_zulip_bridge_container_additional_networks_custom }}"
|
||||
matrix_zulip_bridge_container_additional_networks_auto: []
|
||||
matrix_zulip_bridge_container_additional_networks_custom: []
|
||||
|
||||
# Controls how long to wait for the container to stop gracefully before killing it.
|
||||
# We use a small value here, because this container does not seem to handle the SIGTERM signal.
|
||||
matrix_zulip_bridge_container_stop_grace_time_seconds: 1
|
||||
|
||||
# matrix_zulip_bridge_container_labels_traefik_enabled controls whether labels to assist a Traefik reverse-proxy will be attached to the container.
|
||||
# See `../templates/labels.j2` for details.
|
||||
#
|
||||
# To inject your own other container labels, see `matrix_zulip_bridge_container_labels_additional_labels`.
|
||||
matrix_zulip_bridge_container_labels_traefik_enabled: true
|
||||
matrix_zulip_bridge_container_labels_traefik_docker_network: "{{ matrix_zulip_bridge_container_network }}"
|
||||
matrix_zulip_bridge_container_labels_traefik_hostname: "{{ matrix_zulip_bridge_hostname }}"
|
||||
matrix_zulip_bridge_container_labels_traefik_path_prefix: "{{ matrix_zulip_bridge_path_prefix }}"
|
||||
matrix_zulip_bridge_container_labels_traefik_entrypoints: web-secure
|
||||
matrix_zulip_bridge_container_labels_traefik_tls_certResolver: default # noqa var-naming
|
||||
|
||||
# Controls if the media router is enabled
|
||||
matrix_zulip_bridge_container_labels_traefik_media_enabled: true
|
||||
matrix_zulip_bridge_container_labels_traefik_media_hostname: "{{ matrix_zulip_bridge_container_labels_traefik_hostname }}"
|
||||
# The path prefix must either be `/` or not end with a slash (e.g. `/zulip`).
|
||||
matrix_zulip_bridge_container_labels_traefik_media_path_prefix: "{{ '' if matrix_zulip_bridge_container_labels_traefik_path_prefix == '/' else (matrix_zulip_bridge_container_labels_traefik_path_prefix) }}/_bridge_zulip/media"
|
||||
matrix_zulip_bridge_container_labels_traefik_media_rule: "Host(`{{ matrix_zulip_bridge_container_labels_traefik_media_hostname }}`){% if matrix_zulip_bridge_container_labels_traefik_media_path_prefix != '/' %} && PathPrefix(`{{ matrix_zulip_bridge_container_labels_traefik_media_path_prefix }}`){% endif %}"
|
||||
matrix_zulip_bridge_container_labels_traefik_media_priority: 0
|
||||
matrix_zulip_bridge_container_labels_traefik_media_entrypoints: "{{ matrix_zulip_bridge_container_labels_traefik_entrypoints }}"
|
||||
matrix_zulip_bridge_container_labels_traefik_media_tls: "{{ matrix_zulip_bridge_container_labels_traefik_media_entrypoints != 'web' }}"
|
||||
matrix_zulip_bridge_container_labels_traefik_media_tls_certResolver: "{{ matrix_zulip_bridge_container_labels_traefik_tls_certResolver }}" # noqa var-naming
|
||||
|
||||
# matrix_zulip_bridge_container_labels_additional_labels contains a multiline string with additional labels to add to the container label file.
|
||||
# See `../templates/labels.j2` for details.
|
||||
#
|
||||
# Example:
|
||||
# matrix_zulip_bridge_container_labels_additional_labels: |
|
||||
# my.label=1
|
||||
# another.label="here"
|
||||
matrix_zulip_bridge_container_labels_additional_labels: ''
|
||||
|
||||
# A list of extra arguments to pass to the container
|
||||
matrix_zulip_bridge_container_extra_arguments: []
|
||||
|
||||
# List of systemd services that service depends on.
|
||||
matrix_zulip_bridge_systemd_required_services_list: "{{ matrix_zulip_bridge_systemd_required_services_list_default + matrix_zulip_bridge_systemd_required_services_list_auto + matrix_zulip_bridge_systemd_required_services_list_custom }}"
|
||||
matrix_zulip_bridge_systemd_required_services_list_default: "{{ [devture_systemd_docker_base_docker_service_name] if devture_systemd_docker_base_docker_service_name else [] }}"
|
||||
matrix_zulip_bridge_systemd_required_services_list_auto: []
|
||||
matrix_zulip_bridge_systemd_required_services_list_custom: []
|
||||
|
||||
# List of systemd services that service wants
|
||||
matrix_zulip_bridge_systemd_wanted_services_list: []
|
||||
|
||||
matrix_zulip_bridge_homeserver_url: ""
|
||||
|
||||
matrix_zulip_bridge_appservice_token: ''
|
||||
matrix_zulip_bridge_homeserver_token: ''
|
||||
|
||||
matrix_zulip_bridge_config_media_url: "{{ matrix_zulip_bridge_scheme }}://{{ matrix_zulip_bridge_hostname }}"
|
||||
# This matches the hardcoded `DEFAULT_MEDIA_PATH` in MatrixZulipBridge, but uses `matrix_zulip_bridge_path_prefix` as the path prefix.
|
||||
# See: https://github.com/GearKite/MatrixZulipBridge/blob/2ba51f3da2ad8bd33460c953ef91a9cfc585a2d4/matrixzulipbridge/__main__.py#L87
|
||||
matrix_zulip_bridge_config_media_path: "{{ matrix_zulip_bridge_container_labels_traefik_media_path_prefix }}/v3/download/{netloc}{path}{filename}"
|
||||
matrix_zulip_bridge_config_media_key: "{{ matrix_zulip_bridge_homeserver_token }}"
|
||||
matrix_zulip_bridge_config_displayname: "MatrixZulipBridge"
|
||||
|
||||
matrix_zulip_bridge_registration_yaml_bridge_zulip:
|
||||
media_url: "{{ matrix_zulip_bridge_config_media_url }}"
|
||||
media_path: "{{ matrix_zulip_bridge_config_media_path }}"
|
||||
media_key: "{{ matrix_zulip_bridge_config_media_key }}"
|
||||
displayname: "{{ matrix_zulip_bridge_config_displayname }}"
|
||||
|
||||
# Default registration file consumed by both the homeserver and MatrixZulipBridge.
|
||||
# Besides registration information, it contains configuration (see the Zulip bridge key).
|
||||
matrix_zulip_bridge_registration_yaml:
|
||||
id: zulipbridge
|
||||
url: http://matrix-zulip-bridge:{{ matrix_zulip_bridge_container_http_port }}
|
||||
as_token: "{{ matrix_zulip_bridge_appservice_token }}"
|
||||
hs_token: "{{ matrix_zulip_bridge_homeserver_token }}"
|
||||
rate_limited: false
|
||||
sender_localpart: zulipbridge
|
||||
namespaces:
|
||||
users:
|
||||
- regex: '@zulip_.*'
|
||||
exclusive: true
|
||||
aliases: []
|
||||
rooms: []
|
||||
matrixzulipbridge: "{{ matrix_zulip_bridge_registration_yaml_bridge_zulip }}"
|
||||
|
||||
matrix_zulip_bridge_registration: "{{ matrix_zulip_bridge_registration_yaml | from_yaml }}"
|
||||
29
roles/custom/matrix-bridge-zulip/tasks/main.yml
Normal file
29
roles/custom/matrix-bridge-zulip/tasks/main.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
# SPDX-FileCopyrightText: 2021 Toni Spets
|
||||
# SPDX-FileCopyrightText: 2022 - 2024 Slavi Pantaleev
|
||||
# SPDX-FileCopyrightText: 2022 Marko Weltzer
|
||||
# SPDX-FileCopyrightText: 2025 Suguru Hirahara
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
---
|
||||
- name: Perform the Zulip bridge installation tasks
|
||||
when: matrix_zulip_bridge_enabled | bool
|
||||
tags:
|
||||
- setup-all
|
||||
- setup-bridge-zulip
|
||||
- install-all
|
||||
- install-bridge-zulip
|
||||
block:
|
||||
- name: Validate the Zulip bridge configuration
|
||||
ansible.builtin.include_tasks: "{{ role_path }}/tasks/validate_config.yml"
|
||||
- name: Install the Zulip bridge
|
||||
ansible.builtin.include_tasks: "{{ role_path }}/tasks/setup_install.yml"
|
||||
|
||||
- name: Perform the Zulip bridge uninstallation tasks
|
||||
when: not matrix_zulip_bridge_enabled | bool
|
||||
tags:
|
||||
- setup-all
|
||||
- setup-bridge-zulip
|
||||
block:
|
||||
- name: Uninstall the Zulip bridge
|
||||
ansible.builtin.include_tasks: "{{ role_path }}/tasks/setup_uninstall.yml"
|
||||
62
roles/custom/matrix-bridge-zulip/tasks/setup_install.yml
Normal file
62
roles/custom/matrix-bridge-zulip/tasks/setup_install.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
# SPDX-FileCopyrightText: 2021 Toni Spets
|
||||
# SPDX-FileCopyrightText: 2022 - 2024 Slavi Pantaleev
|
||||
# SPDX-FileCopyrightText: 2022 Jim Myhrberg
|
||||
# SPDX-FileCopyrightText: 2022 Marko Weltzer
|
||||
# SPDX-FileCopyrightText: 2022 Nikita Chernyi
|
||||
# SPDX-FileCopyrightText: 2022 Sebastian Gumprich
|
||||
# SPDX-FileCopyrightText: 2024 David Mehren
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
---
|
||||
- name: Ensure the Zulip bridge image is pulled
|
||||
community.docker.docker_image:
|
||||
name: "{{ matrix_zulip_bridge_docker_image }}"
|
||||
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
|
||||
force_source: "{{ matrix_zulip_bridge_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
|
||||
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_zulip_bridge_docker_image_force_pull }}"
|
||||
register: result
|
||||
retries: "{{ devture_playbook_help_container_retries_count }}"
|
||||
delay: "{{ devture_playbook_help_container_retries_delay }}"
|
||||
until: result is not failed
|
||||
|
||||
- name: Ensure the Zulip bridge paths exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: "0750"
|
||||
owner: "{{ matrix_user_name }}"
|
||||
group: "{{ matrix_group_name }}"
|
||||
with_items:
|
||||
- "{{ matrix_zulip_bridge_base_path }}"
|
||||
|
||||
- name: Ensure the Zulip bridge registration.yaml installed if provided
|
||||
ansible.builtin.copy:
|
||||
content: "{{ matrix_zulip_bridge_registration | to_nice_yaml(indent=2, width=999999) }}"
|
||||
dest: "{{ matrix_zulip_bridge_base_path }}/registration.yaml"
|
||||
mode: "0644"
|
||||
owner: "{{ matrix_user_name }}"
|
||||
group: "{{ matrix_group_name }}"
|
||||
|
||||
- name: Ensure the Zulip bridge support files installed
|
||||
ansible.builtin.template:
|
||||
src: "{{ role_path }}/templates/{{ item }}.j2"
|
||||
dest: "{{ matrix_zulip_bridge_base_path }}/{{ item }}"
|
||||
mode: "0640"
|
||||
owner: "{{ matrix_user_name }}"
|
||||
group: "{{ matrix_group_name }}"
|
||||
with_items:
|
||||
- labels
|
||||
|
||||
- name: Ensure the Zulip bridge container network is created
|
||||
community.general.docker_network:
|
||||
enable_ipv6: "{{ devture_systemd_docker_base_ipv6_enabled }}"
|
||||
name: "{{ matrix_zulip_bridge_container_network }}"
|
||||
driver: bridge
|
||||
driver_options: "{{ devture_systemd_docker_base_container_networks_driver_options }}"
|
||||
|
||||
- name: Ensure matrix-zulip-bridge.service installed
|
||||
ansible.builtin.template:
|
||||
src: "{{ role_path }}/templates/systemd/matrix-zulip-bridge.service.j2"
|
||||
dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-zulip-bridge.service"
|
||||
mode: "0644"
|
||||
26
roles/custom/matrix-bridge-zulip/tasks/setup_uninstall.yml
Normal file
26
roles/custom/matrix-bridge-zulip/tasks/setup_uninstall.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
# SPDX-FileCopyrightText: 2021 - 2022 Slavi Pantaleev
|
||||
# SPDX-FileCopyrightText: 2021 Michael Sasser
|
||||
# SPDX-FileCopyrightText: 2021 Toni Spets
|
||||
# SPDX-FileCopyrightText: 2022 Marko Weltzer
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
---
|
||||
- name: Check existence of matrix-bridge-zulip service
|
||||
ansible.builtin.stat:
|
||||
path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-zulip-bridge.service"
|
||||
register: matrix_zulip_bridge_service_stat
|
||||
|
||||
- when: matrix_zulip_bridge_service_stat.stat.exists | bool
|
||||
block:
|
||||
- name: Ensure matrix-bridge-zulip is stopped
|
||||
ansible.builtin.service:
|
||||
name: matrix-bridge-zulip
|
||||
state: stopped
|
||||
enabled: false
|
||||
daemon_reload: true
|
||||
|
||||
- name: Ensure matrix-zulip-bridge.service doesn't exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-zulip-bridge.service"
|
||||
state: absent
|
||||
14
roles/custom/matrix-bridge-zulip/tasks/validate_config.yml
Normal file
14
roles/custom/matrix-bridge-zulip/tasks/validate_config.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# SPDX-FileCopyrightText: 2024 Slavi Pantaleev
|
||||
# SPDX-FileCopyrightText: 2024 Suguru Hirahara
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
---
|
||||
- name: Fail if required the Zulip bridge settings not defined
|
||||
ansible.builtin.fail:
|
||||
msg: >-
|
||||
You need to define a required configuration setting (`{{ item.name }}`).
|
||||
when: "item.when | bool and lookup('vars', item.name, default='') | string | length == 0"
|
||||
with_items:
|
||||
- {"name": "matrix_zulip_bridge_container_network", when: true}
|
||||
- {"name": "matrix_zulip_bridge_homeserver_url", when: true}
|
||||
58
roles/custom/matrix-bridge-zulip/templates/labels.j2
Normal file
58
roles/custom/matrix-bridge-zulip/templates/labels.j2
Normal file
@@ -0,0 +1,58 @@
|
||||
{#
|
||||
SPDX-FileCopyrightText: 2024 Slavi Pantaleev
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#}
|
||||
|
||||
{% if matrix_zulip_bridge_container_labels_traefik_enabled %}
|
||||
traefik.enable=true
|
||||
|
||||
{% if matrix_zulip_bridge_container_labels_traefik_docker_network %}
|
||||
traefik.docker.network={{ matrix_zulip_bridge_container_labels_traefik_docker_network }}
|
||||
{% endif %}
|
||||
|
||||
traefik.http.services.matrix-zulip-bridge.loadbalancer.server.port={{ matrix_zulip_bridge_container_http_port }}
|
||||
|
||||
{% set middlewares = [] %}
|
||||
|
||||
{% if matrix_zulip_bridge_container_labels_traefik_path_prefix != '/' %}
|
||||
traefik.http.middlewares.matrix-bridge-zulip-strip-prefix.stripprefix.prefixes={{ matrix_zulip_bridge_container_labels_traefik_path_prefix }}
|
||||
{% set middlewares = middlewares + ['matrix-bridge-zulip-strip-prefix'] %}
|
||||
{% endif %}
|
||||
|
||||
{% if matrix_zulip_bridge_container_labels_traefik_media_enabled %}
|
||||
##########################################################################
|
||||
# #
|
||||
# Media #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
traefik.http.routers.matrix-bridge-zulip-media.rule={{ matrix_zulip_bridge_container_labels_traefik_media_rule }}
|
||||
|
||||
{% if matrix_zulip_bridge_container_labels_traefik_media_priority | int > 0 %}
|
||||
traefik.http.routers.matrix-bridge-zulip-media.priority={{ matrix_zulip_bridge_container_labels_traefik_media_priority }}
|
||||
{% endif %}
|
||||
|
||||
{% if middlewares | length > 0 %}
|
||||
traefik.http.routers.matrix-bridge-zulip-media.middlewares={{ middlewares | join(',') }}
|
||||
{% endif %}
|
||||
|
||||
traefik.http.routers.matrix-bridge-zulip-media.service=matrix-bridge-zulip
|
||||
traefik.http.routers.matrix-bridge-zulip-media.entrypoints={{ matrix_zulip_bridge_container_labels_traefik_entrypoints }}
|
||||
|
||||
traefik.http.routers.matrix-bridge-zulip-media.tls={{ matrix_zulip_bridge_container_labels_traefik_media_tls | to_json }}
|
||||
{% if matrix_zulip_bridge_container_labels_traefik_media_entrypoints %}
|
||||
traefik.http.routers.matrix-bridge-zulip-media.tls.certResolver={{ matrix_zulip_bridge_container_labels_traefik_media_tls_certResolver }}
|
||||
{% endif %}
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# /Media #
|
||||
# #
|
||||
##########################################################################
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
{{ matrix_zulip_bridge_container_labels_additional_labels }}
|
||||
@@ -0,0 +1,60 @@
|
||||
{#
|
||||
SPDX-FileCopyrightText: 2021 Toni Spets
|
||||
SPDX-FileCopyrightText: 2022 - 2025 Slavi Pantaleev
|
||||
SPDX-FileCopyrightText: 2025 Suguru Hirahara
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#}
|
||||
|
||||
[Unit]
|
||||
Description=a puppeting appservice bridge for Zulip
|
||||
{% for service in matrix_zulip_bridge_systemd_required_services_list %}
|
||||
Requires={{ service }}
|
||||
After={{ service }}
|
||||
{% endfor %}
|
||||
{% for service in matrix_zulip_bridge_systemd_wanted_services_list %}
|
||||
Wants={{ service }}
|
||||
{% endfor %}
|
||||
DefaultDependencies=no
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Environment="HOME={{ devture_systemd_docker_base_systemd_unit_home_path }}"
|
||||
ExecStartPre=-{{ devture_systemd_docker_base_host_command_docker }} stop -t {{ matrix_zulip_bridge_container_stop_grace_time_seconds }} matrix-bridge-zulip
|
||||
ExecStartPre=-{{ devture_systemd_docker_base_host_command_docker }} rm matrix-bridge-zulip
|
||||
|
||||
ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \
|
||||
--rm \
|
||||
--name=matrix-bridge-zulip \
|
||||
--log-driver=none \
|
||||
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
|
||||
--cap-drop=ALL \
|
||||
--network={{ matrix_zulip_bridge_container_network }} \
|
||||
--mount type=bind,src={{ matrix_zulip_bridge_base_path }},dst=/config \
|
||||
--label-file={{ matrix_zulip_bridge_base_path }}/labels \
|
||||
{% for arg in matrix_zulip_bridge_container_extra_arguments %}
|
||||
{{ arg }} \
|
||||
{% endfor %}
|
||||
{{ matrix_zulip_bridge_docker_image }} \
|
||||
{% if matrix_zulip_bridge_owner %}
|
||||
-o {{ matrix_zulip_bridge_owner }} \
|
||||
{% endif %}
|
||||
--config /config/registration.yaml \
|
||||
--listen-address 0.0.0.0 \
|
||||
--listen-port {{ matrix_zulip_bridge_container_http_port }} \
|
||||
{{ matrix_zulip_bridge_homeserver_url }}
|
||||
|
||||
{% for network in matrix_zulip_bridge_container_additional_networks %}
|
||||
ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} network connect {{ network }} matrix-bridge-zulip
|
||||
{% endfor %}
|
||||
|
||||
ExecStart={{ devture_systemd_docker_base_host_command_docker }} start --attach matrix-bridge-zulip
|
||||
|
||||
ExecStop=-{{ devture_systemd_docker_base_host_command_docker }} stop -t {{ matrix_zulip_bridge_container_stop_grace_time_seconds }} matrix-bridge-zulip
|
||||
ExecStop=-{{ devture_systemd_docker_base_host_command_docker }} rm matrix-bridge-zulip
|
||||
Restart=always
|
||||
RestartSec=30
|
||||
SyslogIdentifier=matrix-bridge-zulip
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user