| @@ -184,6 +184,7 @@ matrix_nginx_proxy_proxy_matrix_client_api_client_max_body_size_mb: "{{ matrix_s | |||||
| matrix_nginx_proxy_proxy_matrix_enabled: true | matrix_nginx_proxy_proxy_matrix_enabled: true | ||||
| matrix_nginx_proxy_proxy_riot_enabled: "{{ matrix_riot_web_enabled }}" | matrix_nginx_proxy_proxy_riot_enabled: "{{ matrix_riot_web_enabled }}" | ||||
| matrix_nginx_proxy_proxy_dimension_enabled: "{{ matrix_dimension_enabled }}" | |||||
| matrix_nginx_proxy_proxy_matrix_corporal_api_enabled: "{{ matrix_corporal_enabled and matrix_corporal_http_api_enabled }}" | matrix_nginx_proxy_proxy_matrix_corporal_api_enabled: "{{ matrix_corporal_enabled and matrix_corporal_http_api_enabled }}" | ||||
| matrix_nginx_proxy_proxy_matrix_corporal_api_addr_with_container: "matrix-corporal:41081" | matrix_nginx_proxy_proxy_matrix_corporal_api_addr_with_container: "matrix-corporal:41081" | ||||
| @@ -222,6 +223,8 @@ matrix_ssl_domains_to_obtain_certificates_for: | | |||||
| ([matrix_server_fqn_matrix]) | ([matrix_server_fqn_matrix]) | ||||
| + | + | ||||
| ([matrix_server_fqn_riot] if matrix_riot_web_enabled else []) | ([matrix_server_fqn_riot] if matrix_riot_web_enabled else []) | ||||
| + | |||||
| ([matrix_server_fqn_dimension] if matrix_dimension_enabled else []) | |||||
| }} | }} | ||||
| ###################################################################### | ###################################################################### | ||||
| @@ -15,6 +15,9 @@ matrix_server_fqn_matrix: "matrix.{{ matrix_domain }}" | |||||
| # This and the Matrix FQN (see above) are expected to be on the same server. | # This and the Matrix FQN (see above) are expected to be on the same server. | ||||
| matrix_server_fqn_riot: "riot.{{ matrix_domain }}" | matrix_server_fqn_riot: "riot.{{ matrix_domain }}" | ||||
| # This is where you access the Dimension. | |||||
| matrix_server_fqn_dimension: "dimension.{{ matrix_domain }}" | |||||
| matrix_user_username: "matrix" | matrix_user_username: "matrix" | ||||
| matrix_user_uid: 991 | matrix_user_uid: 991 | ||||
| matrix_user_gid: 991 | matrix_user_gid: 991 | ||||
| @@ -0,0 +1,16 @@ | |||||
| matrix_dimension_enabled: false | |||||
| # For information on how to acquire an access token, visit https://t2bot.io/docs/access_tokens | |||||
| matrix_dimension_access_token: CHANGEME | |||||
| # Users in form: ['@user1:domain.com', '@user2:domain.com'] | |||||
| matrix_dimension_admin: [] | |||||
| matrix_dimension_base_path: "{{ matrix_base_data_path }}/dimension" | |||||
| matrix_dimension_docker_image: "turt2live/matrix-dimension:latest" | |||||
| matrix_dimension_integrations_ui_url: "https://{{ matrix_server_fqn_dimension }}/riot" | |||||
| matrix_dimension_integrations_rest_url: "https://{{ matrix_server_fqn_dimension }}/api/v1/scalar" | |||||
| matrix_dimension_integrations_widgets_urls: ["https://{{ matrix_server_fqn_dimension }}/widgets"] | |||||
| matrix_dimension_integrations_jitsi_widget_url: "https://{{ matrix_server_fqn_dimension }}/widgets/jitsi" | |||||
| @@ -0,0 +1,3 @@ | |||||
| - set_fact: | |||||
| matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-dimension'] }}" | |||||
| when: "matrix_dimension_enabled" | |||||
| @@ -0,0 +1,9 @@ | |||||
| - import_tasks: "{{ role_path }}/tasks/init.yml" | |||||
| tags: | |||||
| - always | |||||
| - import_tasks: "{{ role_path }}/tasks/setup_dimension.yml" | |||||
| when: run_setup | |||||
| tags: | |||||
| - setup-all | |||||
| - setup-dimension | |||||
| @@ -0,0 +1,79 @@ | |||||
| --- | |||||
| # | |||||
| # Tasks related to setting up the dimension | |||||
| # | |||||
| - name: Ensure dimension base path exists | |||||
| file: | |||||
| path: "{{ matrix_dimension_base_path }}" | |||||
| state: directory | |||||
| mode: 0750 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_username }}" | |||||
| when: matrix_dimension_enabled | |||||
| - name: Ensure dimension environment variables file created | |||||
| template: | |||||
| src: "{{ role_path }}/templates/config.yaml.j2" | |||||
| dest: "{{ matrix_dimension_base_path }}/config.yaml" | |||||
| mode: 0644 | |||||
| when: matrix_dimension_enabled | |||||
| - name: Ensure dimension image is pulled | |||||
| docker_image: | |||||
| name: "{{ matrix_dimension_docker_image }}" | |||||
| when: matrix_dimension_enabled | |||||
| - name: Ensure matrix-dimension.service installed | |||||
| template: | |||||
| src: "{{ role_path }}/templates/systemd/matrix-dimension.service.j2" | |||||
| dest: "/etc/systemd/system/matrix-dimension.service" | |||||
| mode: 0644 | |||||
| register: matrix_dimension_systemd_service_result | |||||
| when: matrix_dimension_enabled | |||||
| - name: Ensure systemd reloaded after matrix-dimension.service installation | |||||
| service: | |||||
| daemon_reload: yes | |||||
| when: "matrix_dimension_enabled and matrix_dimension_systemd_service_result.changed" | |||||
| # | |||||
| # Tasks related to getting rid of the dimension (if it was previously enabled) | |||||
| # | |||||
| - name: Check existence of matrix-dimension service | |||||
| stat: | |||||
| path: "/etc/systemd/system/matrix-dimension.service" | |||||
| register: matrix_dimension_service_stat | |||||
| - name: Ensure matrix-dimension is stopped | |||||
| service: | |||||
| name: matrix-dimension | |||||
| state: stopped | |||||
| daemon_reload: yes | |||||
| register: stopping_result | |||||
| when: "not matrix_dimension_enabled and matrix_dimension_service_stat.stat.exists" | |||||
| - name: Ensure matrix-dimension.service doesn't exist | |||||
| file: | |||||
| path: "/etc/systemd/system/matrix-dimension.service" | |||||
| state: absent | |||||
| when: "not matrix_dimension_enabled and matrix_dimension_service_stat.stat.exists" | |||||
| - name: Ensure systemd reloaded after matrix-dimension.service removal | |||||
| service: | |||||
| daemon_reload: yes | |||||
| when: "not matrix_dimension_enabled and matrix_dimension_service_stat.stat.exists" | |||||
| - name: Ensure Matrix dimension environment variables path doesn't exist | |||||
| file: | |||||
| path: "{{ matrix_dimension_base_path }}" | |||||
| state: absent | |||||
| when: "not matrix_dimension_enabled" | |||||
| - name: Ensure dimension Docker image doesn't exist | |||||
| docker_image: | |||||
| name: "{{ matrix_dimension_docker_image }}" | |||||
| state: absent | |||||
| when: "not matrix_dimension_enabled" | |||||
| @@ -0,0 +1,80 @@ | |||||
| # The web settings for the service (API and UI). | |||||
| # It is best to have this run on localhost and use a reverse proxy to access Dimension. | |||||
| web: | |||||
| port: 8184 | |||||
| address: '0.0.0.0' | |||||
| # Homeserver configuration | |||||
| homeserver: | |||||
| # The domain name of the homeserver. This is used in many places, such as with go-neb | |||||
| # setups, to identify the homeserver. | |||||
| name: "{{ matrix_domain }}" | |||||
| # The URL that Dimension, go-neb, and other services provisioned by Dimension should | |||||
| # use to access the homeserver with. | |||||
| clientServerUrl: "https://{{ matrix_domain }}" | |||||
| # The URL that Dimension should use when trying to communicate with federated APIs on | |||||
| # the homeserver. If not supplied or left empty Dimension will try to resolve the address | |||||
| # through the normal federation process. | |||||
| #federationUrl: "https://t2bot.io:8448" | |||||
| # The URL that Dimension will redirect media requests to for downloading media such as | |||||
| # stickers. If not supplied or left empty Dimension will use the clientServerUrl. | |||||
| #mediaUrl: "https://t2bot.io" | |||||
| # The access token Dimension should use for miscellaneous access to the homeserver. This | |||||
| # should be for a user on the configured homeserver: any user will do, however it is | |||||
| # recommended to use a dedicated user (such as @dimension:t2bot.io). For information on | |||||
| # how to acquire an access token, visit https://t2bot.io/docs/access_tokens | |||||
| accessToken: "{{ matrix_dimension_access_token }}" | |||||
| # These users can modify the integrations this Dimension supports. | |||||
| # To access the admin interface, open Dimension in Riot and click the settings icon. | |||||
| admins: {{ matrix_dimension_admin }} | |||||
| # IPs and CIDR ranges listed here will be blocked from being widgets. | |||||
| # Note: Widgets may still be embedded with restricted content, although not through Dimension directly. | |||||
| widgetBlacklist: | |||||
| - 10.0.0.0/8 | |||||
| - 172.16.0.0/12 | |||||
| - 192.168.0.0/16 | |||||
| - 127.0.0.0/8 | |||||
| # Where the database for Dimension is | |||||
| database: | |||||
| file: "dimension.db" | |||||
| # Display settings that apply to self-hosted go-neb instances | |||||
| goneb: | |||||
| # The avatars to set for each bot. Usually these don't need to be changed, however if your homeserver | |||||
| # is not able to reach t2bot.io then you should specify your own here. To not use an avatar for a bot, | |||||
| # make the bot's avatar an empty string. | |||||
| avatars: | |||||
| giphy: "mxc://t2bot.io/c5eaab3ef0133c1a61d3c849026deb27" | |||||
| imgur: "mxc://t2bot.io/6749eaf2b302bb2188ae931b2eeb1513" | |||||
| github: "mxc://t2bot.io/905b64b3cd8e2347f91a60c5eb0832e1" | |||||
| wikipedia: "mxc://t2bot.io/7edfb54e9ad9e13fec0df22636feedf1" | |||||
| travisci: "mxc://t2bot.io/7f4703126906fab8bb27df34a17707a8" | |||||
| rss: "mxc://t2bot.io/aace4fcbd045f30afc1b4e5f0928f2f3" | |||||
| google: "mxc://t2bot.io/636ad10742b66c4729bf89881a505142" | |||||
| guggy: "mxc://t2bot.io/e7ef0ed0ba651aaf907655704f9a7526" | |||||
| echo: "mxc://t2bot.io/3407ff2db96b4e954fcbf2c6c0415a13" | |||||
| circleci: "mxc://t2bot.io/cf7d875845a82a6b21f5f66de78f6bee" | |||||
| jira: "mxc://t2bot.io/f4a38ebcc4280ba5b950163ca3e7c329" | |||||
| # Settings for interacting with Telegram. Currently only applies for importing | |||||
| # sticker packs from Telegram. | |||||
| telegram: | |||||
| # Talk to @BotFather on Telegram to get a token | |||||
| botToken: "YourTokenHere" | |||||
| # Settings for controlling how logging works | |||||
| logging: | |||||
| file: logs/dimension.log | |||||
| console: true | |||||
| consoleLevel: info | |||||
| fileLevel: verbose | |||||
| rotate: | |||||
| size: 52428800 # bytes, default is 50mb | |||||
| count: 5 | |||||
| @@ -0,0 +1,23 @@ | |||||
| [Unit] | |||||
| Description=Matrix Dimension | |||||
| After=docker.service | |||||
| Requires=docker.service | |||||
| [Service] | |||||
| Type=simple | |||||
| ExecStartPre=-/usr/bin/docker kill matrix-dimension | |||||
| ExecStartPre=-/usr/bin/docker rm matrix-dimension | |||||
| ExecStart=/usr/bin/docker run --rm --name matrix-dimension \ | |||||
| --log-driver=none \ | |||||
| --cap-drop=ALL \ | |||||
| --network={{ matrix_docker_network }} \ | |||||
| -p 127.0.0.1:8184:8184 \ | |||||
| -v {{ matrix_dimension_base_path }}:/data:rw \ | |||||
| {{ matrix_dimension_docker_image }} | |||||
| ExecStop=-/usr/bin/docker kill matrix-dimension | |||||
| ExecStop=-/usr/bin/docker rm matrix-dimension | |||||
| Restart=always | |||||
| RestartSec=30 | |||||
| [Install] | |||||
| WantedBy=multi-user.target | |||||
| @@ -28,6 +28,10 @@ matrix_nginx_proxy_proxy_riot_hostname: "{{ matrix_server_fqn_riot }}" | |||||
| matrix_nginx_proxy_proxy_matrix_enabled: false | matrix_nginx_proxy_proxy_matrix_enabled: false | ||||
| matrix_nginx_proxy_proxy_matrix_hostname: "{{ matrix_server_fqn_matrix }}" | matrix_nginx_proxy_proxy_matrix_hostname: "{{ matrix_server_fqn_matrix }}" | ||||
| # Controls whether proxying the dimension domain should be done. | |||||
| matrix_nginx_proxy_proxy_dimension_enabled: false | |||||
| matrix_nginx_proxy_proxy_dimension_hostname: "{{ matrix_server_fqn_dimension }}" | |||||
| # Controls whether proxying for the matrix-corporal API (`/_matrix/corporal`) should be done (on the matrix domain) | # Controls whether proxying for the matrix-corporal API (`/_matrix/corporal`) should be done (on the matrix domain) | ||||
| matrix_nginx_proxy_proxy_matrix_corporal_api_enabled: false | matrix_nginx_proxy_proxy_matrix_corporal_api_enabled: false | ||||
| matrix_nginx_proxy_proxy_matrix_corporal_api_addr_with_container: "matrix-corporal:41081" | matrix_nginx_proxy_proxy_matrix_corporal_api_addr_with_container: "matrix-corporal:41081" | ||||
| @@ -66,6 +66,13 @@ | |||||
| mode: 0644 | mode: 0644 | ||||
| when: "matrix_nginx_proxy_proxy_riot_enabled" | when: "matrix_nginx_proxy_proxy_riot_enabled" | ||||
| - name: Ensure Matrix nginx-proxy configuration for dimension domain exists | |||||
| template: | |||||
| src: "{{ role_path }}/templates/nginx/conf.d/matrix-dimension.conf.j2" | |||||
| dest: "{{ matrix_nginx_proxy_confd_path }}/matrix-dimension.conf" | |||||
| mode: 0644 | |||||
| when: "matrix_nginx_proxy_proxy_dimension_enabled" | |||||
| # | # | ||||
| # Tasks related to setting up matrix-nginx-proxy | # Tasks related to setting up matrix-nginx-proxy | ||||
| # | # | ||||
| @@ -139,6 +146,12 @@ | |||||
| state: absent | state: absent | ||||
| when: "not matrix_nginx_proxy_proxy_riot_enabled" | when: "not matrix_nginx_proxy_proxy_riot_enabled" | ||||
| - name: Ensure Matrix nginx-proxy configuration for dimension domain deleted | |||||
| file: | |||||
| path: "{{ matrix_nginx_proxy_confd_path }}/matrix-dimension.conf" | |||||
| state: absent | |||||
| when: "not matrix_nginx_proxy_proxy_dimension_enabled" | |||||
| - name: Ensure Matrix nginx-proxy configuration for main config override deleted | - name: Ensure Matrix nginx-proxy configuration for main config override deleted | ||||
| file: | file: | ||||
| path: "{{ matrix_nginx_proxy_data_path }}/nginx.conf" | path: "{{ matrix_nginx_proxy_data_path }}/nginx.conf" | ||||
| @@ -0,0 +1,56 @@ | |||||
| server { | |||||
| listen {{ 8080 if matrix_nginx_proxy_enabled else 80 }}; | |||||
| server_name {{ matrix_nginx_proxy_proxy_dimension_hostname }}; | |||||
| server_tokens off; | |||||
| location /.well-known/acme-challenge { | |||||
| {% if matrix_nginx_proxy_enabled %} | |||||
| {# Use the embedded DNS resolver in Docker containers to discover the service #} | |||||
| resolver 127.0.0.11 valid=5s; | |||||
| set $backend "matrix-certbot:8080"; | |||||
| proxy_pass http://$backend; | |||||
| {% else %} | |||||
| {# Generic configuration for use outside of our container setup #} | |||||
| proxy_pass http://127.0.0.1:{{ matrix_ssl_lets_encrypt_certbot_standalone_http_port }}; | |||||
| {% endif %} | |||||
| } | |||||
| location / { | |||||
| return 301 https://$http_host$request_uri; | |||||
| } | |||||
| } | |||||
| server { | |||||
| listen {{ 8443 if matrix_nginx_proxy_enabled else 443 }} ssl http2; | |||||
| listen [::]:{{ 8443 if matrix_nginx_proxy_enabled else 443 }} ssl http2; | |||||
| server_name {{ matrix_nginx_proxy_proxy_dimension_hostname }}; | |||||
| server_tokens off; | |||||
| root /dev/null; | |||||
| gzip on; | |||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | |||||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_dimension_hostname }}/fullchain.pem; | |||||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_dimension_hostname }}/privkey.pem; | |||||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||||
| ssl_prefer_server_ciphers on; | |||||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||||
| location / { | |||||
| {% if matrix_nginx_proxy_enabled %} | |||||
| {# Use the embedded DNS resolver in Docker containers to discover the service #} | |||||
| resolver 127.0.0.11 valid=5s; | |||||
| set $backend "matrix-dimension:8184"; | |||||
| proxy_pass http://$backend; | |||||
| {% else %} | |||||
| {# Generic configuration for use outside of our container setup #} | |||||
| proxy_pass http://127.0.0.1:8184; | |||||
| {% endif %} | |||||
| proxy_set_header Host $host; | |||||
| proxy_set_header X-Forwarded-For $remote_addr; | |||||
| } | |||||
| } | |||||
| @@ -12,5 +12,6 @@ | |||||
| - matrix-synapse | - matrix-synapse | ||||
| - matrix-riot-web | - matrix-riot-web | ||||
| - matrix-mxisd | - matrix-mxisd | ||||
| - matrix-dimension | |||||
| - matrix-nginx-proxy | - matrix-nginx-proxy | ||||
| - matrix-common-after | - matrix-common-after | ||||