Browse Source

Complete network and traefik support for wsproxy

pull/2261/head
Johan Swetzén 2 years ago
parent
commit
0640726792
5 changed files with 117 additions and 3 deletions
  1. +23
    -3
      group_vars/matrix_servers
  2. +37
    -0
      roles/custom/matrix-bridge-mautrix-wsproxy/defaults/main.yml
  3. +7
    -0
      roles/custom/matrix-bridge-mautrix-wsproxy/tasks/setup_install.yml
  4. +5
    -0
      roles/custom/matrix-bridge-mautrix-wsproxy/templates/systemd/matrix-mautrix-wsproxy.service.j2
  5. +45
    -0
      roles/custom/matrix-bridge-mautrix-wsproxy/templates/wsproxy-labels.j2

+ 23
- 3
group_vars/matrix_servers View File

@@ -1227,14 +1227,34 @@ matrix_mautrix_wsproxy_systemd_required_services_list: |
{{ {{
['docker.service'] ['docker.service']
+ +
(['matrix-' + matrix_homeserver_implementation + '.service'])
['matrix-' + matrix_homeserver_implementation + '.service']
+
([devture_postgres_identifier ~ '.service'] if devture_postgres_enabled else [])
+ +
(['matrix-postgres.service'] if devture_postgres_enabled else [])
(['matrix-nginx-proxy.service'] if matrix_nginx_proxy_enabled else [])
}} }}


matrix_mautrix_wsproxy_homeserver_domain: '{{ matrix_domain }}'
matrix_mautrix_wsproxy_homeserver_domain: "{{ matrix_domain }}"


matrix_mautrix_wsproxy_homeserver_address: "{{ matrix_homeserver_container_url }}" matrix_mautrix_wsproxy_homeserver_address: "{{ matrix_homeserver_container_url }}"
matrix_mautrix_wsproxy_hostname: "{{ matrix_server_fqn_matrix }}"
matrix_mautrix_wsproxy_path_prefix: /_matrix/wsproxy

matrix_mautrix_wsproxy_container_additional_networks: |
{{
(
([matrix_playbook_reverse_proxyable_services_additional_network] if matrix_playbook_reverse_proxyable_services_additional_network else [])
+
([matrix_nginx_proxy_container_network] if matrix_nginx_proxy_enabled and matrix_nginx_proxy_container_network != matrix_mautrix_wsproxy_container_network else [])
+
([devture_postgres_container_network] if devture_postgres_enabled and devture_postgres_container_network != matrix_mautrix_wsproxy_container_network else [])
) | unique
}}

matrix_mautrix_wsproxy_container_labels_traefik_enabled: "{{ matrix_playbook_reverse_proxy_type in ['playbook-managed-traefik', 'other-traefik-container'] }}"
matrix_mautrix_wsproxy_container_labels_traefik_docker_network: "{{ matrix_playbook_reverse_proxyable_services_additional_network }}"
matrix_mautrix_wsproxy_container_labels_traefik_entrypoints: "{{ devture_traefik_entrypoint_primary }}"
matrix_mautrix_wsproxy_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certResolver_primary }}"


###################################################################### ######################################################################
# #


+ 37
- 0
roles/custom/matrix-bridge-mautrix-wsproxy/defaults/main.yml View File

@@ -16,10 +16,46 @@ matrix_mautrix_wsproxy_data_path: "{{ matrix_mautrix_wsproxy_base_path }}/data"
matrix_mautrix_wsproxy_homeserver_address: "{{ matrix_homeserver_container_url }}" matrix_mautrix_wsproxy_homeserver_address: "{{ matrix_homeserver_container_url }}"
matrix_mautrix_wsproxy_homeserver_domain: "{{ matrix_domain }}" matrix_mautrix_wsproxy_homeserver_domain: "{{ matrix_domain }}"


matrix_mautrix_wsproxy_bind_port: true
matrix_mautrix_wsproxy_port: 29331 matrix_mautrix_wsproxy_port: 29331


matrix_mautrix_wsproxy_appservice_address: "http://matrix-mautrix-wsproxy:{{ matrix_mautrix_wsproxy_port }}" matrix_mautrix_wsproxy_appservice_address: "http://matrix-mautrix-wsproxy:{{ matrix_mautrix_wsproxy_port }}"


matrix_mautrix_wsproxy_hostname: ""
matrix_mautrix_wsproxy_path_prefix: ""

# The base container network. It will be auto-created by this role if it doesn't exist already.
matrix_mautrix_wsproxy_container_network: matrix-mautrix-wsproxy

# matrix_mautrix_wsproxy_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_mautrix_wsproxy_container_labels_additional_labels`.
matrix_mautrix_wsproxy_container_labels_traefik_enabled: true
matrix_mautrix_wsproxy_container_labels_traefik_docker_network: "{{ matrix_mautrix_wsproxy_container_network }}"
matrix_mautrix_wsproxy_container_labels_traefik_hostname: "{{ matrix_mautrix_wsproxy_hostname }}"
# The path prefix must either be `/` or not end with a slash (e.g. `/wsproxy`).
matrix_mautrix_wsproxy_container_labels_traefik_path_prefix: "{{ matrix_mautrix_wsproxy_path_prefix }}"
matrix_mautrix_wsproxy_container_labels_traefik_rule: "Host(`{{ matrix_mautrix_wsproxy_container_labels_traefik_hostname }}`){% if matrix_mautrix_wsproxy_container_labels_traefik_path_prefix != '/' %} && PathPrefix(`{{ matrix_mautrix_wsproxy_container_labels_traefik_path_prefix }}`){% endif %}"
matrix_mautrix_wsproxy_container_labels_traefik_priority: 0
matrix_mautrix_wsproxy_container_labels_traefik_entrypoints: web-secure
matrix_mautrix_wsproxy_container_labels_traefik_tls: "{{ matrix_mautrix_wsproxy_container_labels_traefik_entrypoints != 'web' }}"
matrix_mautrix_wsproxy_container_labels_traefik_tls_certResolver: default # noqa var-naming

# Controls which additional headers to attach to all HTTP responses.
# To add your own headers, use `matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers_custom`
matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers_auto: {}
matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers_custom: {}
matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers: "{{ matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers_auto | combine(matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers_custom) }}"

# matrix_mautrix_wsproxy_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_mautrix_wsproxy_container_labels_additional_labels: |
# my.label=1
# another.label="here"
matrix_mautrix_wsproxy_container_labels_additional_labels: ''


# A list of extra arguments to pass to the container # A list of extra arguments to pass to the container
matrix_mautrix_wsproxy_container_extra_arguments: [] matrix_mautrix_wsproxy_container_extra_arguments: []
@@ -105,6 +141,7 @@ matrix_mautrix_wsproxy_syncproxy_systemd_wanted_services_list: []


matrix_mautrix_wsproxy_syncproxy_shared_secret: '' matrix_mautrix_wsproxy_syncproxy_shared_secret: ''
matrix_mautrix_wsproxy_syncproxy_port: 29332 matrix_mautrix_wsproxy_syncproxy_port: 29332
matrix_mautrix_wsproxy_syncproxy_bind_port: true
matrix_mautrix_wsproxy_syncproxy_appservice_address: "http://matrix-mautrix-wsproxy-syncproxy:{{ matrix_mautrix_wsproxy_syncproxy_port }}" matrix_mautrix_wsproxy_syncproxy_appservice_address: "http://matrix-mautrix-wsproxy-syncproxy:{{ matrix_mautrix_wsproxy_syncproxy_port }}"


# Database-related configuration fields # Database-related configuration fields


+ 7
- 0
roles/custom/matrix-bridge-mautrix-wsproxy/tasks/setup_install.yml View File

@@ -23,6 +23,8 @@
group: "{{ matrix_user_groupname }}" group: "{{ matrix_user_groupname }}"
with_items: with_items:
- syncproxy-env - syncproxy-env
- wsproxy-labels

- name: Ensure Mautrix wsproxy image is pulled - name: Ensure Mautrix wsproxy image is pulled
community.docker.docker_image: community.docker.docker_image:
name: "{{ matrix_mautrix_wsproxy_docker_image }}" name: "{{ matrix_mautrix_wsproxy_docker_image }}"
@@ -78,6 +80,11 @@
owner: "{{ matrix_user_username }}" owner: "{{ matrix_user_username }}"
group: "{{ matrix_user_groupname }}" group: "{{ matrix_user_groupname }}"


- name: Ensure mautrix-wsproxy container network is created
community.general.docker_network:
name: "{{ matrix_mautrix_wsproxy_container_network }}"
driver: bridge

- name: Ensure matrix-mautrix-wsproxy.service installed - name: Ensure matrix-mautrix-wsproxy.service installed
ansible.builtin.template: ansible.builtin.template:
src: "{{ role_path }}/templates/systemd/matrix-mautrix-wsproxy.service.j2" src: "{{ role_path }}/templates/systemd/matrix-mautrix-wsproxy.service.j2"


+ 5
- 0
roles/custom/matrix-bridge-mautrix-wsproxy/templates/systemd/matrix-mautrix-wsproxy.service.j2 View File

@@ -28,12 +28,17 @@ ExecStart={{ devture_systemd_docker_base_host_command_docker }} run --rm --name
-p {{ matrix_mautrix_wsproxy_port }}:29331 \ -p {{ matrix_mautrix_wsproxy_port }}:29331 \
{% endif %} {% endif %}
--mount type=bind,src={{ matrix_mautrix_wsproxy_config_path }},dst=/data \ --mount type=bind,src={{ matrix_mautrix_wsproxy_config_path }},dst=/data \
--label-file={{ matrix_bridge_wsproxy_data_path }}/wsproxy-labels \
{% for arg in matrix_mautrix_wsproxy_container_extra_arguments %} {% for arg in matrix_mautrix_wsproxy_container_extra_arguments %}
{{ arg }} \ {{ arg }} \
{% endfor %} {% endfor %}
{{ matrix_mautrix_wsproxy_docker_image }} \ {{ matrix_mautrix_wsproxy_docker_image }} \
/usr/bin/mautrix-wsproxy -config /data/config.yaml /usr/bin/mautrix-wsproxy -config /data/config.yaml


{% for network in matrix_mautrix_wsproxy_container_additional_networks %}
ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} network connect {{ network }} {{ matrix_mautrix_wsproxy_container_network }}
{% endfor %}

ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} kill matrix-mautrix-wsproxy 2>/dev/null' ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} kill matrix-mautrix-wsproxy 2>/dev/null'
ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-mautrix-wsproxy 2>/dev/null' ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-mautrix-wsproxy 2>/dev/null'
Restart=always Restart=always


+ 45
- 0
roles/custom/matrix-bridge-mautrix-wsproxy/templates/wsproxy-labels.j2 View File

@@ -0,0 +1,45 @@
{% if matrix_mautrix_wsproxy_container_labels_traefik_enabled %}
traefik.enable=true

{% if matrix_mautrix_wsproxy_container_labels_traefik_docker_network %}
traefik.docker.network={{ matrix_mautrix_wsproxy_container_labels_traefik_docker_network }}
{% endif %}

{% set middlewares = [] %}

{% if matrix_mautrix_wsproxy_container_labels_traefik_path_prefix != '/' %}
traefik.http.middlewares.matrix-mautrix-wsproxy-slashless-redirect.redirectregex.regex=({{ matrix_mautrix_wsproxy_container_labels_traefik_path_prefix | quote }})$
traefik.http.middlewares.matrix-mautrix-wsproxy-slashless-redirect.redirectregex.replacement=${1}/
{% set middlewares = middlewares + ['matrix-mautrix-wsproxy-slashless-redirect'] %}
{% endif %}

{% if matrix_mautrix_wsproxy_container_labels_traefik_path_prefix != '/' %}
traefik.http.middlewares.matrix-mautrix-wsproxy-strip-prefix.stripprefix.prefixes={{ matrix_mautrix_wsproxy_container_labels_traefik_path_prefix }}
{% set middlewares = middlewares + ['matrix-mautrix-wsproxy-strip-prefix'] %}
{% endif %}

{% if matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers.keys() | length > 0 %}
{% for name, value in matrix_mautrix_wsproxy_container_labels_traefik_additional_response_headers.items() %}
traefik.http.middlewares.matrix-mautrix-wsproxy-add-headers.headers.customresponseheaders.{{ name }}={{ value }}
{% endfor %}
{% set middlewares = middlewares + ['matrix-mautrix-wsproxy-add-headers'] %}
{% endif %}

traefik.http.routers.matrix-mautrix-wsproxy.rule={{ matrix_mautrix_wsproxy_container_labels_traefik_rule }}
{% if matrix_mautrix_wsproxy_container_labels_traefik_priority | int > 0 %}
traefik.http.routers.matrix-mautrix-wsproxy.priority={{ matrix_mautrix_wsproxy_container_labels_traefik_priority }}
{% endif %}
traefik.http.routers.matrix-mautrix-wsproxy.service=matrix-mautrix-wsproxy
{% if middlewares | length > 0 %}
traefik.http.routers.matrix-mautrix-wsproxy.middlewares={{ middlewares | join(',') }}
{% endif %}
traefik.http.routers.matrix-mautrix-wsproxy.entrypoints={{ matrix_mautrix_wsproxy_container_labels_traefik_entrypoints }}
traefik.http.routers.matrix-mautrix-wsproxy.tls={{ matrix_mautrix_wsproxy_container_labels_traefik_tls | to_json }}
{% if matrix_mautrix_wsproxy_container_labels_traefik_tls %}
traefik.http.routers.matrix-mautrix-wsproxy.tls.certResolver={{ matrix_mautrix_wsproxy_container_labels_traefik_tls_certResolver }}
{% endif %}

traefik.http.services.matrix-sliding-sync.loadbalancer.server.port=8008
{% endif %}

{{ matrix_mautrix_wsproxy_container_labels_additional_labels }}

Loading…
Cancel
Save