Auto-migration and everything seems to work. It's just that matrix-registration cannot load the Python modules required for talking to a Postgres database. Tracked here: https://github.com/ZerataX/matrix-registration/issues/44 Until this gets fixed, we'll continue default to 'sqlite'.pull/740/head
| @@ -1010,6 +1010,12 @@ matrix_postgres_additional_databases: | | |||||
| 'password': matrix_bot_matrix_reminder_bot_database_password, | 'password': matrix_bot_matrix_reminder_bot_database_password, | ||||
| }] if (matrix_bot_matrix_reminder_bot_enabled and matrix_bot_matrix_reminder_bot_database_engine == 'postgres' and matrix_bot_matrix_reminder_bot_database_hostname == 'matrix-postgres') else []) | }] if (matrix_bot_matrix_reminder_bot_enabled and matrix_bot_matrix_reminder_bot_database_engine == 'postgres' and matrix_bot_matrix_reminder_bot_database_hostname == 'matrix-postgres') else []) | ||||
| + | + | ||||
| ([{ | |||||
| 'name': matrix_registration_database_db_name, | |||||
| 'username': matrix_registration_database_username, | |||||
| 'password': matrix_registration_database_password, | |||||
| }] if (matrix_registration_enabled and matrix_registration_database_engine == 'postgres' and matrix_registration_database_hostname == 'matrix-postgres') else []) | |||||
| + | |||||
| ([{ | ([{ | ||||
| 'name': matrix_appservice_discord_database_db_name, | 'name': matrix_appservice_discord_database_db_name, | ||||
| 'username': matrix_appservice_discord_database_username, | 'username': matrix_appservice_discord_database_username, | ||||
| @@ -1291,6 +1297,18 @@ matrix_registration_api_validate_certs: "{{ false if matrix_ssl_retrieval_method | |||||
| matrix_registration_container_image_self_build: "{{ matrix_architecture != 'amd64' }}" | matrix_registration_container_image_self_build: "{{ matrix_architecture != 'amd64' }}" | ||||
| matrix_registration_systemd_required_services_list: | | |||||
| {{ | |||||
| ['docker.service'] | |||||
| + | |||||
| (['matrix-postgres.service'] if matrix_postgres_enabled else []) | |||||
| }} | |||||
| # We'd like to use 'postgres' if matrix_postgres_enabled, but the container image doesn't seem to support that. | |||||
| # Learn more here: https://github.com/ZerataX/matrix-registration/issues/44 | |||||
| matrix_registration_database_engine: 'sqlite' | |||||
| matrix_registration_database_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'mx.registr.db') | to_uuid }}" | |||||
| ###################################################################### | ###################################################################### | ||||
| # | # | ||||
| # /matrix-registration | # /matrix-registration | ||||
| @@ -32,6 +32,36 @@ matrix_registration_systemd_wanted_services_list: [] | |||||
| # Takes an "<ip>:<port>" or "<port>" value (e.g. "127.0.0.1:8767"), or empty string to not expose. | # Takes an "<ip>:<port>" or "<port>" value (e.g. "127.0.0.1:8767"), or empty string to not expose. | ||||
| matrix_registration_container_http_host_bind_port: '' | matrix_registration_container_http_host_bind_port: '' | ||||
| # Database-related configuration fields. | |||||
| # | |||||
| # To use SQLite, stick to these defaults. | |||||
| # | |||||
| # To use Postgres: | |||||
| # - change the engine (`matrix_registration_database_engine: 'postgres'`) | |||||
| # - adjust your database credentials via the `matrix_registration_postgres_*` variables | |||||
| matrix_registration_database_engine: 'sqlite' | |||||
| matrix_registration_sqlite_database_path_local: "{{ matrix_registration_data_path }}/db.sqlite3" | |||||
| matrix_registration_sqlite_database_path_in_container: "/data/db.sqlite3" | |||||
| matrix_registration_database_username: 'matrix_registration' | |||||
| matrix_registration_database_password: 'some-password' | |||||
| matrix_registration_database_hostname: 'matrix-postgres' | |||||
| matrix_registration_database_port: 5432 | |||||
| matrix_registration_database_db_name: 'matrix_registration' | |||||
| matrix_registration_database_connection_string: 'postgresql://{{ matrix_registration_database_username }}:{{ matrix_registration_database_password }}@{{ matrix_registration_database_hostname }}:{{ matrix_registration_database_port }}/{{ matrix_registration_database_db_name }}' | |||||
| # For some reason, matrix-registraiton expects the `db` field to be like this: `sqlite:////data/db.sqlite3`. | |||||
| # (seems like one too many slashes, but..) | |||||
| matrix_registration_db: "{{ | |||||
| { | |||||
| 'sqlite': ('sqlite:///' + matrix_registration_sqlite_database_path_in_container), | |||||
| 'postgres': matrix_registration_database_connection_string, | |||||
| }[matrix_registration_database_engine] | |||||
| }}" | |||||
| # The path at which Matrix Registration will be exposed on `matrix.DOMAIN` | # The path at which Matrix Registration will be exposed on `matrix.DOMAIN` | ||||
| # (only applies when matrix-nginx-proxy is used). | # (only applies when matrix-nginx-proxy is used). | ||||
| matrix_registration_public_endpoint: /matrix-registration | matrix_registration_public_endpoint: /matrix-registration | ||||
| @@ -1,5 +1,31 @@ | |||||
| --- | --- | ||||
| - set_fact: | |||||
| matrix_registration_requires_restart: false | |||||
| - block: | |||||
| - name: Check if an SQLite database already exists | |||||
| stat: | |||||
| path: "{{ matrix_registration_sqlite_database_path_local }}" | |||||
| register: matrix_registration_sqlite_database_path_local_stat_result | |||||
| - block: | |||||
| - set_fact: | |||||
| matrix_postgres_db_migration_request: | |||||
| src: "{{ matrix_registration_sqlite_database_path_local }}" | |||||
| dst: "{{ matrix_registration_database_connection_string }}" | |||||
| caller: "{{ role_path|basename }}" | |||||
| engine_variable_name: 'matrix_registration_database_engine' | |||||
| engine_old: 'sqlite' | |||||
| systemd_services_to_stop: ['matrix-registration.service'] | |||||
| - import_tasks: "roles/matrix-postgres/tasks/util/migrate_db_to_postgres.yml" | |||||
| - set_fact: | |||||
| matrix_registration_requires_restart: true | |||||
| when: "matrix_registration_sqlite_database_path_local_stat_result.stat.exists|bool" | |||||
| when: "matrix_registration_database_engine == 'postgres'" | |||||
| - name: Ensure matrix-registration paths exist | - name: Ensure matrix-registration paths exist | ||||
| file: | file: | ||||
| path: "{{ item.path }}" | path: "{{ item.path }}" | ||||
| @@ -61,3 +87,9 @@ | |||||
| service: | service: | ||||
| daemon_reload: yes | daemon_reload: yes | ||||
| when: "matrix_registration_systemd_service_result.changed|bool" | when: "matrix_registration_systemd_service_result.changed|bool" | ||||
| - name: Ensure matrix-registration.service restarted, if necessary | |||||
| service: | |||||
| name: "matrix-registration.service" | |||||
| state: restarted | |||||
| when: "matrix_registration_requires_restart|bool" | |||||
| @@ -18,3 +18,10 @@ | |||||
| when: "item.old in vars" | when: "item.old in vars" | ||||
| with_items: | with_items: | ||||
| - {'old': 'matrix_registration_docker_repo', 'new': 'matrix_registration_container_image_self_build_repo'} | - {'old': 'matrix_registration_docker_repo', 'new': 'matrix_registration_container_image_self_build_repo'} | ||||
| - name: Fail if Postgres usage attempted | |||||
| fail: | |||||
| msg: > | |||||
| matrix-registration doesn't support using Postgres just yet. | |||||
| Learn more here: https://github.com/ZerataX/matrix-registration/issues/44 | |||||
| when: "matrix_registration_database_engine == 'postgres'" | |||||
| @@ -3,7 +3,7 @@ server_name: {{ matrix_registration_server_name|to_json }} | |||||
| shared_secret: {{ matrix_registration_shared_secret|to_json }} | shared_secret: {{ matrix_registration_shared_secret|to_json }} | ||||
| admin_secret: {{ matrix_registration_admin_secret|to_json }} | admin_secret: {{ matrix_registration_admin_secret|to_json }} | ||||
| riot_instance: {{ matrix_registration_riot_instance|to_json }} | riot_instance: {{ matrix_registration_riot_instance|to_json }} | ||||
| db: 'sqlite:////data/db.sqlite3' | |||||
| db: {{ matrix_registration_db|to_json }} | |||||
| host: '0.0.0.0' | host: '0.0.0.0' | ||||
| port: 5000 | port: 5000 | ||||
| rate_limit: ["100 per day", "10 per minute"] | rate_limit: ["100 per day", "10 per minute"] | ||||