| @@ -1081,13 +1081,33 @@ matrix_bot_mjolnir_systemd_required_services_list: | | |||||
| ###################################################################### | ###################################################################### | ||||
| matrix_backup_borg_enabled: false | matrix_backup_borg_enabled: false | ||||
| matrix_backup_borg_container_image_self_build: "{{ matrix_architecture not in ['amd64', 'arm32', 'arm64'] }}" | |||||
| matrix_backup_borg_postgresql_enabled: "{{ matrix_postgres_enabled }}" | |||||
| matrix_backup_borg_postgresql_databases_hostname: "{{ matrix_postgres_connection_hostname }}" | |||||
| matrix_backup_borg_postgresql_databases_username: "{{ matrix_postgres_connection_username }}" | |||||
| matrix_backup_borg_postgresql_databases_password: "{{ matrix_postgres_connection_password }}" | |||||
| matrix_backup_borg_postgresql_databases_port: "{{ matrix_postgres_connection_port }}" | |||||
| matrix_backup_borg_postgresql_databases: | | |||||
| {{ | |||||
| (([{ | |||||
| 'name': matrix_synapse_database_database | |||||
| }] if (matrix_synapse_enabled and matrix_synapse_database_database == matrix_postgres_db_name and matrix_synapse_database_host == 'matrix-postgres') else []) | |||||
| + | |||||
| matrix_postgres_additional_databases)|map(attribute='name')|list | |||||
| }} | |||||
| matrix_backup_borg_location_source_directories: | matrix_backup_borg_location_source_directories: | ||||
| - "{{ matrix_base_data_path }}" | - "{{ matrix_base_data_path }}" | ||||
| matrix_backup_borg_location_exclude_patterns: | | matrix_backup_borg_location_exclude_patterns: | | ||||
| {{ | {{ | ||||
| { | |||||
| 'synapse': ["{{ matrix_synapse_media_store_path }}/local_thumbnails", "{{ matrix_synapse_media_store_path }}/remote_thumbnail", "{{ matrix_synapse_media_store_path }}/url_cache", "{{ matrix_synapse_media_store_path }}/url_cache_thumbnails"], | |||||
| }[matrix_homeserver_implementation] | |||||
| ([matrix_synapse_media_store_path + '/local_thumbnails', matrix_synapse_media_store_path + '/remote_thumbnail', matrix_synapse_media_store_path + '/url_cache', matrix_synapse_media_store_path + '/url_cache_thumbnails'] if matrix_homeserver_implementation == 'synapse' else []) | |||||
| + | |||||
| ([matrix_postgres_data_path] if matrix_postgres_enabled else []) | |||||
| }} | |||||
| matrix_backup_borg_systemd_required_services_list: | | |||||
| {{ | |||||
| ['docker.service'] | |||||
| + | |||||
| (['matrix-postgres.service'] if matrix_postgres_enabled else []) | |||||
| }} | }} | ||||
| ###################################################################### | ###################################################################### | ||||
| @@ -1,17 +1,18 @@ | |||||
| --- | --- | ||||
| matrix_backup_borg_enabled: true | matrix_backup_borg_enabled: true | ||||
| matrix_backup_borg_base_path: "{{ matrix_base_data_path }}/backup-borg" | |||||
| matrix_backup_borg_config_path: "{{ matrix_backup_borg_base_path }}/config" | |||||
| matrix_backup_borg_container_image_self_build: false | matrix_backup_borg_container_image_self_build: false | ||||
| matrix_backup_borg_docker_repo: "https://github.com/borgmatic-collective/docker-borgmatic" | |||||
| matrix_backup_borg_docker_src_files_path: "{{ matrix_base_data_path }}/borg/docker-src" | |||||
| matrix_backup_borg_docker_repo: "https://gitlab.com/etke.cc/borgmatic" | |||||
| matrix_backup_borg_docker_src_files_path: "{{ matrix_backup_borg_base_path }}/docker-src" | |||||
| matrix_backup_borg_version: latest | |||||
| # version determined automatically, based on postgres server version (if enabled), otherwise latest is used | |||||
| matrix_backup_borg_version: "" | |||||
| matrix_backup_borg_docker_image: "{{ matrix_backup_borg_docker_image_name_prefix }}etke.cc/borgmatic:{{ matrix_backup_borg_version }}" | matrix_backup_borg_docker_image: "{{ matrix_backup_borg_docker_image_name_prefix }}etke.cc/borgmatic:{{ matrix_backup_borg_version }}" | ||||
| matrix_backup_borg_docker_image_name_prefix: "{{ 'localhost/' if matrix_backup_borg_container_image_self_build else 'registry.gitlab.com/' }}" | matrix_backup_borg_docker_image_name_prefix: "{{ 'localhost/' if matrix_backup_borg_container_image_self_build else 'registry.gitlab.com/' }}" | ||||
| matrix_backup_borg_docker_image_force_pull: "{{ matrix_backup_borg_docker_image.endswith(':latest') }}" | |||||
| matrix_backup_borg_base_path: "{{ matrix_base_data_path }}/backup-borg" | |||||
| matrix_backup_borg_config_path: "{{ matrix_backup_borg_base_path }}/config" | |||||
| matrix_backup_borg_docker_image_force_pull: "{{ matrix_backup_borg_docker_image.endswith(':latest') or matrix_backup_borg_version|default('') == '' }}" | |||||
| # A list of extra arguments to pass to the container | # A list of extra arguments to pass to the container | ||||
| matrix_backup_borg_container_extra_arguments: [] | matrix_backup_borg_container_extra_arguments: [] | ||||
| @@ -28,6 +29,15 @@ matrix_backup_borg_schedule: "*-*-* 04:00:00" | |||||
| # what directories should be added to backup | # what directories should be added to backup | ||||
| matrix_backup_borg_location_source_directories: [] | matrix_backup_borg_location_source_directories: [] | ||||
| # postgres db backup | |||||
| matrix_backup_borg_postgresql_enabled: true | |||||
| matrix_backup_borg_supported_postgres_versions: ['12', '13', '14'] | |||||
| matrix_backup_borg_postgresql_databases: [] | |||||
| matrix_backup_borg_postgresql_databases_hostname: "matrix-postgres" | |||||
| matrix_backup_borg_postgresql_databases_username: "matrix" | |||||
| matrix_backup_borg_postgresql_databases_password: "" | |||||
| matrix_backup_borg_postgresql_databases_port: 5432 | |||||
| # target repositories | # target repositories | ||||
| matrix_backup_borg_location_repositories: [] | matrix_backup_borg_location_repositories: [] | ||||
| @@ -50,7 +60,7 @@ matrix_backup_borg_storage_ssh_command: ssh -o "StrictHostKeyChecking accept-new | |||||
| matrix_backup_borg_storage_compression: lz4 | matrix_backup_borg_storage_compression: lz4 | ||||
| # archive name format | # archive name format | ||||
| matrix_backup_borg_storage_archive_name_format: "matrix-{now:%Y-%m-%d-%H%M%S}" | |||||
| matrix_backup_borg_storage_archive_name_format: matrix-{now:%Y-%m-%d-%H%M%S} | |||||
| # repository passphrase | # repository passphrase | ||||
| matrix_backup_borg_storage_encryption_passphrase: "" | matrix_backup_borg_storage_encryption_passphrase: "" | ||||
| @@ -63,4 +73,26 @@ matrix_backup_borg_retention_keep_monthly: 12 | |||||
| matrix_backup_borg_retention_keep_yearly: 2 | matrix_backup_borg_retention_keep_yearly: 2 | ||||
| # retention prefix | # retention prefix | ||||
| matrix_backup_borg_retention_prefix: "matrix-" | |||||
| matrix_backup_borg_retention_prefix: matrix- | |||||
| # Default borgmatic configuration template which covers the generic use case. | |||||
| # You can customize it by controlling the various variables inside it. | |||||
| # | |||||
| # For a more advanced customization, you can extend the default (see `matrix_backup_borg_configuration_extension_yaml`) | |||||
| # or completely replace this variable with your own template. | |||||
| matrix_backup_borg_configuration_yaml: "{{ lookup('template', 'templates/config.yaml.j2') }}" | |||||
| matrix_backup_borg_configuration_extension_yaml: | | |||||
| # Your custom YAML configuration for borgmatic goes here. | |||||
| # This configuration extends the default starting configuration (`matrix_borg_configuration_yaml`). | |||||
| # | |||||
| # You can override individual variables from the default configuration, or introduce new ones. | |||||
| # | |||||
| # If you need something more special, you can take full control by | |||||
| # completely redefining `matrix_backup_borg_configuration_yaml`. | |||||
| matrix_backup_borg_configuration_extension: "{{ matrix_backup_borg_configuration_extension_yaml|from_yaml if matrix_backup_borg_configuration_extension_yaml|from_yaml is mapping else {} }}" | |||||
| # Holds the final borgmatic configuration (a combination of the default and its extension). | |||||
| # You most likely don't need to touch this variable. Instead, see `matrix_backup_borg_configuration_yaml`. | |||||
| matrix_backup_borg_configuration: "{{ matrix_backup_borg_configuration_yaml|from_yaml|combine(matrix_backup_borg_configuration_extension, recursive=True) }}" | |||||
| @@ -1,4 +1,17 @@ | |||||
| --- | --- | ||||
| - block: | |||||
| - import_tasks: "{{ role_path }}/../matrix-postgres/tasks/util/detect_existing_postgres_version.yml" | |||||
| - name: Fail if detected Postgres version is unsupported | |||||
| fail: | |||||
| msg: "You cannot use borg backup with such an old version ({{ matrix_postgres_detected_version }}) of Postgres. Consider upgrading - link to docs for upgrading Postgres: docs/maintenance-postgres.md#upgrading-postgresql" | |||||
| when: "matrix_postgres_detected_version not in matrix_backup_borg_supported_postgres_versions" | |||||
| - name: Set the correct borg backup version to use | |||||
| set_fact: | |||||
| matrix_backup_borg_version: "{{ matrix_postgres_detected_version }}" | |||||
| when: matrix_backup_borg_postgresql_enabled|bool and matrix_backup_borg_version == '' | |||||
| - name: Ensure borg paths exist | - name: Ensure borg paths exist | ||||
| file: | file: | ||||
| path: "{{ item.path }}" | path: "{{ item.path }}" | ||||
| @@ -11,9 +24,9 @@ | |||||
| - {path: "{{ matrix_backup_borg_docker_src_files_path }}", when: true} | - {path: "{{ matrix_backup_borg_docker_src_files_path }}", when: true} | ||||
| when: "item.when|bool" | when: "item.when|bool" | ||||
| - name: Ensure borg config is created | |||||
| template: | |||||
| src: "{{ role_path }}/templates/config.yaml.j2" | |||||
| - name: Ensure borgmatic config is created | |||||
| copy: | |||||
| content: "{{ matrix_backup_borg_configuration|to_nice_yaml(indent=2, width=999999) }}" | |||||
| dest: "{{ matrix_backup_borg_config_path }}/config.yaml" | dest: "{{ matrix_backup_borg_config_path }}/config.yaml" | ||||
| owner: "{{ matrix_user_username }}" | owner: "{{ matrix_user_username }}" | ||||
| group: "{{ matrix_user_groupname }}" | group: "{{ matrix_user_groupname }}" | ||||
| @@ -7,19 +7,25 @@ location: | |||||
| exclude_patterns: {{ matrix_backup_borg_location_exclude_patterns|to_json }} | exclude_patterns: {{ matrix_backup_borg_location_exclude_patterns|to_json }} | ||||
| storage: | storage: | ||||
| <<<<<<< HEAD | |||||
| compression: {{ matrix_backup_borg_storage_compression }} | compression: {{ matrix_backup_borg_storage_compression }} | ||||
| ssh_command: {{ matrix_backup_borg_storage_ssh_command }} | ssh_command: {{ matrix_backup_borg_storage_ssh_command }} | ||||
| archive_name_format: '{{ matrix_backup_borg_storage_archive_name_format }}' | archive_name_format: '{{ matrix_backup_borg_storage_archive_name_format }}' | ||||
| encryption_passphrase: {{ matrix_backup_borg_storage_encryption_passphrase }} | encryption_passphrase: {{ matrix_backup_borg_storage_encryption_passphrase }} | ||||
| unknown_unencrypted_repo_access_is_ok: {{ matrix_backup_borg_unknown_unencrypted_repo_access_is_ok|to_json }} | |||||
| ======= | |||||
| compression: {{ matrix_backup_borg_storage_compression|to_json }} | |||||
| ssh_command: {{ matrix_backup_borg_storage_ssh_command|to_json }} | |||||
| archive_name_format: {{ matrix_backup_borg_storage_archive_name_format|to_json }} | |||||
| encryption_passphrase: {{ matrix_backup_borg_storage_encryption_passphrase|to_json }} | |||||
| >>>>>>> 5c1ee66e8dab15485b8bcb69e0a153012d6d40cf | |||||
| retention: | retention: | ||||
| keep_hourly: {{ matrix_backup_borg_retention_keep_hourly }} | |||||
| keep_daily: {{ matrix_backup_borg_retention_keep_daily }} | |||||
| keep_weekly: {{ matrix_backup_borg_retention_keep_weekly }} | |||||
| keep_monthly: {{ matrix_backup_borg_retention_keep_monthly }} | |||||
| keep_yearly: {{ matrix_backup_borg_retention_keep_yearly }} | |||||
| prefix: '{{ matrix_backup_borg_retention_prefix }}' | |||||
| keep_hourly: {{ matrix_backup_borg_retention_keep_hourly|to_json }} | |||||
| keep_daily: {{ matrix_backup_borg_retention_keep_daily|to_json }} | |||||
| keep_weekly: {{ matrix_backup_borg_retention_keep_weekly|to_json }} | |||||
| keep_monthly: {{ matrix_backup_borg_retention_keep_monthly|to_json }} | |||||
| keep_yearly: {{ matrix_backup_borg_retention_keep_yearly|to_json }} | |||||
| prefix: {{ matrix_backup_borg_retention_prefix|to_json }} | |||||
| consistency: | consistency: | ||||
| checks: | checks: | ||||
| @@ -27,6 +33,16 @@ consistency: | |||||
| - archives | - archives | ||||
| hooks: | hooks: | ||||
| {% if matrix_backup_borg_postgresql_enabled and matrix_backup_borg_postgresql_databases|length > 0 %} | |||||
| postgresql_databases: | |||||
| {% for database in matrix_backup_borg_postgresql_databases %} | |||||
| - name: {{ database|to_json }} | |||||
| hostname: {{ matrix_backup_borg_postgresql_databases_hostname|to_json }} | |||||
| username: {{ matrix_backup_borg_postgresql_databases_username|to_json }} | |||||
| password: {{ matrix_backup_borg_postgresql_databases_password|to_json }} | |||||
| port: {{ matrix_backup_borg_postgresql_databases_port|to_json }} | |||||
| {% endfor %} | |||||
| {% endif %} | |||||
| after_backup: | after_backup: | ||||
| - echo "Backup created." | - echo "Backup created." | ||||
| on_error: | on_error: | ||||
| @@ -8,7 +8,7 @@ matrix_mautrix_whatsapp_container_image_self_build: false | |||||
| matrix_mautrix_whatsapp_container_image_self_build_repo: "https://mau.dev/mautrix/whatsapp.git" | matrix_mautrix_whatsapp_container_image_self_build_repo: "https://mau.dev/mautrix/whatsapp.git" | ||||
| matrix_mautrix_whatsapp_container_image_self_build_branch: "{{ 'master' if matrix_mautrix_whatsapp_version == 'latest' else matrix_mautrix_whatsapp_version }}" | matrix_mautrix_whatsapp_container_image_self_build_branch: "{{ 'master' if matrix_mautrix_whatsapp_version == 'latest' else matrix_mautrix_whatsapp_version }}" | ||||
| matrix_mautrix_whatsapp_version: v0.3.0 | |||||
| matrix_mautrix_whatsapp_version: v0.3.1 | |||||
| # See: https://mau.dev/mautrix/whatsapp/container_registry | # See: https://mau.dev/mautrix/whatsapp/container_registry | ||||
| matrix_mautrix_whatsapp_docker_image: "{{ matrix_mautrix_whatsapp_docker_image_name_prefix }}mautrix/whatsapp:{{ matrix_mautrix_whatsapp_version }}" | matrix_mautrix_whatsapp_docker_image: "{{ matrix_mautrix_whatsapp_docker_image_name_prefix }}mautrix/whatsapp:{{ matrix_mautrix_whatsapp_version }}" | ||||
| matrix_mautrix_whatsapp_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_whatsapp_container_image_self_build else 'dock.mau.dev/' }}" | matrix_mautrix_whatsapp_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_whatsapp_container_image_self_build else 'dock.mau.dev/' }}" | ||||
| @@ -9,7 +9,7 @@ matrix_client_element_container_image_self_build_repo: "https://github.com/vecto | |||||
| # - https://github.com/vector-im/element-web/issues/19544 | # - https://github.com/vector-im/element-web/issues/19544 | ||||
| matrix_client_element_container_image_self_build_low_memory_system_patch_enabled: "{{ ansible_memtotal_mb < 4096 }}" | matrix_client_element_container_image_self_build_low_memory_system_patch_enabled: "{{ ansible_memtotal_mb < 4096 }}" | ||||
| matrix_client_element_version: v1.10.9 | |||||
| matrix_client_element_version: v1.10.10 | |||||
| matrix_client_element_docker_image: "{{ matrix_client_element_docker_image_name_prefix }}vectorim/element-web:{{ matrix_client_element_version }}" | matrix_client_element_docker_image: "{{ matrix_client_element_docker_image_name_prefix }}vectorim/element-web:{{ matrix_client_element_version }}" | ||||
| matrix_client_element_docker_image_name_prefix: "{{ 'localhost/' if matrix_client_element_container_image_self_build else matrix_container_global_registry_prefix }}" | matrix_client_element_docker_image_name_prefix: "{{ 'localhost/' if matrix_client_element_container_image_self_build else matrix_container_global_registry_prefix }}" | ||||
| matrix_client_element_docker_image_force_pull: "{{ matrix_client_element_docker_image.endswith(':latest') }}" | matrix_client_element_docker_image_force_pull: "{{ matrix_client_element_docker_image.endswith(':latest') }}" | ||||
| @@ -11,17 +11,17 @@ | |||||
| - name: Set matrix_synapse_rust_synapse_compress_state_find_rooms_command_wait_time, if not provided | - name: Set matrix_synapse_rust_synapse_compress_state_find_rooms_command_wait_time, if not provided | ||||
| set_fact: | set_fact: | ||||
| matrix_synapse_rust_synapse_compress_state_find_rooms_command_wait_time: 300 | |||||
| matrix_synapse_rust_synapse_compress_state_find_rooms_command_wait_time: 1800 | |||||
| when: "matrix_synapse_rust_synapse_compress_state_find_rooms_command_wait_time|default('') == ''" | when: "matrix_synapse_rust_synapse_compress_state_find_rooms_command_wait_time|default('') == ''" | ||||
| - name: Set matrix_synapse_rust_synapse_compress_state_compress_room_time, if not provided | - name: Set matrix_synapse_rust_synapse_compress_state_compress_room_time, if not provided | ||||
| set_fact: | set_fact: | ||||
| matrix_synapse_rust_synapse_compress_state_compress_room_time: 1800 | |||||
| matrix_synapse_rust_synapse_compress_state_compress_room_time: 3600 | |||||
| when: "matrix_synapse_rust_synapse_compress_state_compress_room_time|default('') == ''" | when: "matrix_synapse_rust_synapse_compress_state_compress_room_time|default('') == ''" | ||||
| - name: Set matrix_synapse_rust_synapse_compress_state_psql_import_time, if not provided | - name: Set matrix_synapse_rust_synapse_compress_state_psql_import_time, if not provided | ||||
| set_fact: | set_fact: | ||||
| matrix_synapse_rust_synapse_compress_state_psql_import_time: 1800 | |||||
| matrix_synapse_rust_synapse_compress_state_psql_import_time: 3600 | |||||
| when: "matrix_synapse_rust_synapse_compress_state_psql_import_time|default('') == ''" | when: "matrix_synapse_rust_synapse_compress_state_psql_import_time|default('') == ''" | ||||
| - name: Set matrix_synapse_rust_synapse_compress_state_min_state_groups_required, if not provided | - name: Set matrix_synapse_rust_synapse_compress_state_min_state_groups_required, if not provided | ||||
| @@ -13,7 +13,6 @@ | |||||
| - matrix-postgres | - matrix-postgres | ||||
| - matrix-redis | - matrix-redis | ||||
| - matrix-corporal | - matrix-corporal | ||||
| - matrix-backup-borg | |||||
| - matrix-bridge-appservice-discord | - matrix-bridge-appservice-discord | ||||
| - matrix-bridge-appservice-slack | - matrix-bridge-appservice-slack | ||||
| - matrix-bridge-appservice-webhooks | - matrix-bridge-appservice-webhooks | ||||
| @@ -62,4 +61,5 @@ | |||||
| - matrix-aux | - matrix-aux | ||||
| - matrix-postgres-backup | - matrix-postgres-backup | ||||
| - matrix-prometheus-postgres-exporter | - matrix-prometheus-postgres-exporter | ||||
| - matrix-backup-borg | |||||
| - matrix-common-after | - matrix-common-after | ||||