From 842522e5e04016cd365727cc8c006238eeba4482 Mon Sep 17 00:00:00 2001 From: erebion Date: Mon, 9 Oct 2023 18:33:55 +0200 Subject: [PATCH] Added Element Web and renamed some variables for consistency --- host_vars/unhb4/{authentik.yml => unhb4.yml} | 29 ++++++ .../templates/authentik.env.j2 | 6 +- roles/element_web_docker/files/unhb.png | Bin 0 -> 66012 bytes roles/element_web_docker/handlers/main.yml | 15 +++ roles/element_web_docker/tasks/main.yml | 87 ++++++++++++++++++ .../templates/config.json.j2 | 47 ++++++++++ .../templates/element-web-docker.service.j2 | 20 ++++ .../templates/element_web.env.j2 | 4 + site.yml | 1 + 9 files changed, 206 insertions(+), 3 deletions(-) rename host_vars/unhb4/{authentik.yml => unhb4.yml} (54%) create mode 100644 roles/element_web_docker/files/unhb.png create mode 100644 roles/element_web_docker/handlers/main.yml create mode 100644 roles/element_web_docker/tasks/main.yml create mode 100644 roles/element_web_docker/templates/config.json.j2 create mode 100644 roles/element_web_docker/templates/element-web-docker.service.j2 create mode 100644 roles/element_web_docker/templates/element_web.env.j2 diff --git a/host_vars/unhb4/authentik.yml b/host_vars/unhb4/unhb4.yml similarity index 54% rename from host_vars/unhb4/authentik.yml rename to host_vars/unhb4/unhb4.yml index b058e8f..5bd6d9e 100644 --- a/host_vars/unhb4/authentik.yml +++ b/host_vars/unhb4/unhb4.yml @@ -6,6 +6,8 @@ container_names: worker: "authentik-worker-1.server4" redis: "authentik-redis-1.server4" db: "authentik-postgresql-1.server4" + element_web: + element_web: "element_web.server4" authentik_error_reporting: "false" authentik_email_host: "mail.un-hack-bar.de" @@ -24,6 +26,32 @@ authentik_postgres_version: "12-alpine" docker_compose_config_dir: "/srv/docker-config" docker_volumes_dir: "/srv/docker-volumes" +domains: + nginx_virtual_host: + authentik: "auth.un-hack-bar.de,auth.unhb.de" + element_web: "chat.unhb.de,chat.un-hack-bar.de" + letsencrypt_host: + authentik: "auth.un-hack-bar.de,auth.unhb.de" + element_web: "chat.unhb.de,chat.un-hack-bar.de" + +element_web: + homeserver_base_url: "https://matrix.un-hack-bar.de" + homeserver_server_name: "matrix.un-hack-bar.de" + disable_custom_urls_boolean: "false" + terms_and_conditions_links: + link1: + url: "https://www.un-hack-bar.de/datenschutzerklaerung/" + text: "Datenschutzerklärung" + link2: + url: "https://www.un-hack-bar.de/impressum/" + text: "Impressum" + brand: "Matrix-Chat der UN-Hack-Bar" + logo: "unhb.png" + default_country_code: "DE" + show_labs_settings_boolean: "true" + feature_pinning_boolean: "true" + room_directory: "matrix.un-hack-bar.de" + firewall_services: - ssh - http @@ -38,3 +66,4 @@ firewall_ports: version: authentik: "2023.8.3" + element_web: "latest" diff --git a/roles/authentik_docker/templates/authentik.env.j2 b/roles/authentik_docker/templates/authentik.env.j2 index af6e50a..9418dbc 100644 --- a/roles/authentik_docker/templates/authentik.env.j2 +++ b/roles/authentik_docker/templates/authentik.env.j2 @@ -1,7 +1,7 @@ -VIRTUAL_HOST={{ authentik_domain }} +VIRTUAL_HOST={{ domains.nginx_virtual_host.authentik }} VIRTUAL_PORT={{ authentik_port_http }} -LETSENCRYPT_HOST={{ authentik_domain }} -LETSENCRYPT_EMAIL={{letsencrypt_email }} +LETSENCRYPT_HOST={{ domains.letsencrypt_host.authentik }} +LETSENCRYPT_EMAIL={{ letsencrypt_email }} AUTHENTIK_REDIS__HOST="{{ container_names.authentik.redis }}" AUTHENTIK_POSTGRESQL__HOST="{{ container_names.authentik.db }}" AUTHENTIK_POSTGRESQL__USER={{ database_vars.postgres.authentik.user }} diff --git a/roles/element_web_docker/files/unhb.png b/roles/element_web_docker/files/unhb.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd7bdebe27bbe0bb23269fd2b0da235f92f500d GIT binary patch literal 66012 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 literal 0 HcmV?d00001 diff --git a/roles/element_web_docker/handlers/main.yml b/roles/element_web_docker/handlers/main.yml new file mode 100644 index 0000000..4349b67 --- /dev/null +++ b/roles/element_web_docker/handlers/main.yml @@ -0,0 +1,15 @@ +--- + +- name: systemctl-daemon-reload + ansible.builtin.systemd: + daemon_reload: true + when: units.changed + notify: restart-element-web-docker + tags: molecule-notest + +- name: restart-element-web-docker + ansible.builtin.systemd: + state: restarted + name: "element-web-docker.service" + daemon_reload: true + tags: molecule-notest diff --git a/roles/element_web_docker/tasks/main.yml b/roles/element_web_docker/tasks/main.yml new file mode 100644 index 0000000..6b9e4e0 --- /dev/null +++ b/roles/element_web_docker/tasks/main.yml @@ -0,0 +1,87 @@ +--- + +- name: "Install dependencies" + ansible.builtin.apt: + pkg: + - docker.io + +- name: "Create directory for Element Web with Docker" + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: root + group: root + mode: '0750' + with_items: + - "{{ docker_volumes_dir }}/element_web" + +- name: "Create directories for Element Web with Docker" + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: 1000 + group: 1000 + mode: '0750' + with_items: + - "{{ docker_volumes_dir }}/element_web/config" + +- name: "Debug Message" + ansible.builtin.debug: + msg: + - "{{ element_web.terms_and_conditions_links|dict2items }}" + - "{{ element_web.terms_and_conditions_links|dict2items|type_debug }}" + +- name: "Template environment file for Element Web with Docker" + ansible.builtin.template: + src: "element_web.env.j2" + dest: "{{ docker_volumes_dir }}/element_web/element_web.env" + force: true + owner: root + group: root + mode: '0644' + notify: restart-element-web-docker + +- name: "Template config file for Element Web with Docker" + ansible.builtin.template: + src: "config.json.j2" + dest: "{{ docker_volumes_dir }}/element_web/config/config.json" + force: true + owner: root + group: root + mode: '0644' + notify: restart-element-web-docker + +- name: Copy file with owner and permissions + ansible.builtin.copy: + src: "unhb.png" + dest: "{{ docker_volumes_dir }}/element_web/config/unhb.png" + owner: root + group: root + mode: '0644' + notify: restart-element-web-docker + +- name: "Template systemd unit for Element with Docker" + ansible.builtin.template: + src: "{{ item }}.j2" + dest: "/etc/systemd/system/{{ item }}" + force: true + owner: root + group: root + mode: '0664' + with_items: + - element-web-docker.service + register: units + notify: restart-element-web-docker + +- name: "Reload systemd units" + ansible.builtin.systemd: + daemon_reload: yes + when: units.changed + +- name: "Enable systemd units for Element Web with Docker" + ansible.builtin.systemd: + state: started + enabled: true + name: "{{ item }}" + with_items: + - element-web-docker.service diff --git a/roles/element_web_docker/templates/config.json.j2 b/roles/element_web_docker/templates/config.json.j2 new file mode 100644 index 0000000..1bb445f --- /dev/null +++ b/roles/element_web_docker/templates/config.json.j2 @@ -0,0 +1,47 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "{{ element_web.homeserver_base_url }}", + "server_name": "{{ element_web.homeserver_server_name }}" + } + }, + "disable_custom_urls": {{ element_web.disable_custom_urls_boolean }}, + "terms_and_conditions_links": [{% for item in (element_web.terms_and_conditions_links|dict2items) %} + { + "url": "{{ item.value.url }}", + "text": "{{ item.value.text }}" + }{% if not loop.last %},{% endif %}{% endfor %} + ], + "brand": "{{ element_web.brand }}", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "branding": { + "authHeaderLogoUrl": "/{{ element_web.logo }}", + "authFooterLinks": [{% for item in (element_web.terms_and_conditions_links|dict2items) %} + { + "url": "{{ item.value.url }}", + "text": "{{ item.value.text }}" + }{% if not loop.last %},{% endif %}{% endfor %} + ] + }, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "default_country_code": "{{ element_web.default_country_code }}", + "show_labs_settings": {{ element_web.show_labs_settings_boolean }}, + "features": { + "feature_pinning": {{ element_web.feature_pinning_boolean }} + }, + "default_federate": true, + "room_directory": { + "servers": [ + "{{ element_web.room_directory }}" + ] + }, + "enable_presence_by_hs_url": {}, + "setting_defaults": { + "UIFeature.urlPreviews": true, + "UIFeature.advancedSettings": true, + "UIFeature.identityServer": false + } +} diff --git a/roles/element_web_docker/templates/element-web-docker.service.j2 b/roles/element_web_docker/templates/element-web-docker.service.j2 new file mode 100644 index 0000000..44a57ac --- /dev/null +++ b/roles/element_web_docker/templates/element-web-docker.service.j2 @@ -0,0 +1,20 @@ +[Unit] +Description=Element Web with Docker +After=docker.service +Requires=docker.service + +[Service] +ExecStartPre=-/usr/bin/docker rm --force {{ container_names.element_web.element_web }} +ExecStart=/usr/bin/docker run --rm --name {{ container_names.element_web.element_web }} \ + --network nginx_net --env-file {{ docker_volumes_dir }}/element_web/element_web.env \ + -v {{ docker_volumes_dir }}/element/config/config.json:/app/config.json:ro \ + -v {{ docker_volumes_dir }}/element/config/unhb.png:/app/unhb.png:ro \ + vectorim/element-web:{{ version.element_web }} +ExecStop=-/usr/bin/docker stop {{ container_names.element_web.element_web }} +Restart=always +RestartSec=60s +TimeoutRestartSec=60s +Type=exec + +[Install] +WantedBy=multi-user.target diff --git a/roles/element_web_docker/templates/element_web.env.j2 b/roles/element_web_docker/templates/element_web.env.j2 new file mode 100644 index 0000000..81b907c --- /dev/null +++ b/roles/element_web_docker/templates/element_web.env.j2 @@ -0,0 +1,4 @@ +VIRTUAL_HOST={{ domains.nginx_virtual_host.element_web }} +VIRTUAL_PORT=80 +LETSENCRYPT_HOST={{ domains.letsencrypt_host.element_web }} +LETSENCRYPT_EMAIL={{ letsencrypt_email }} diff --git a/site.yml b/site.yml index 78a9150..beabc48 100644 --- a/site.yml +++ b/site.yml @@ -27,3 +27,4 @@ roles: - authentik_docker + - element_web_docker