Make appservice-discord support both SQLite and Postgres

People can toggle between them now. The playbook also defaults
to using SQLite if an external Postgres server is used.

Ideally, we'd be able to create databases/users in external Postgres
servers as well, but our initialization logic (and `docker run` command,
etc.) hardcode too many things right now.
This commit is contained in:
Slavi Pantaleev 2020-12-14 00:52:25 +02:00
parent 46a4034d3e
commit a374d309c8
4 changed files with 34 additions and 6 deletions

View File

@ -67,6 +67,11 @@ matrix_appservice_discord_appservice_token: "{{ matrix_synapse_macaroon_secret_k
matrix_appservice_discord_homeserver_token: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'discord.hs.token') | to_uuid }}" matrix_appservice_discord_homeserver_token: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'discord.hs.token') | to_uuid }}"
# We only make this use Postgres if our own Postgres server is enabled.
# It's only then (for now) that we can automatically create the necessary database and user for this service.
matrix_appservice_discord_database_engine: "{{ 'postgres' if matrix_postgres_enabled else 'sqlite' }}"
matrix_appservice_discord_database_connString_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'as.discord.db') }}"
###################################################################### ######################################################################
# #
# /matrix-bridge-appservice-discord # /matrix-bridge-appservice-discord
@ -892,10 +897,10 @@ matrix_postgres_db_name: "homeserver"
matrix_postgres_additional_databases: | matrix_postgres_additional_databases: |
{{ {{
([{ ([{
'name': 'matrix_appservice_discord', 'name': matrix_appservice_discord_database_connString_db_name,
'username': 'matrix_appservice_discord', 'username': matrix_appservice_discord_database_connString_username,
'password': matrix_synapse_macaroon_secret_key | password_hash('sha512', 'app_discord.db.secret') | string, 'password': matrix_appservice_discord_database_connString_password,
}] if matrix_appservice_discord_enabled else []) }] if (matrix_appservice_discord_enabled and matrix_appservice_discord_database_engine == 'postgres' and matrix_appservice_discord_database_connString_hostname == 'matrix-postgres') else [])
+ ([{ + ([{
'name': 'matrix_appservice_slack', 'name': 'matrix_appservice_slack',
'username': 'matrix_appservice_slack', 'username': 'matrix_appservice_slack',

View File

@ -41,6 +41,22 @@ matrix_appservice_discord_bridge_homeserverUrl: "http://matrix-synapse:8008"
matrix_appservice_discord_bridge_disablePresence: false matrix_appservice_discord_bridge_disablePresence: false
matrix_appservice_discord_bridge_enableSelfServiceBridging: false matrix_appservice_discord_bridge_enableSelfServiceBridging: false
# Database-related configuration fields.
#
# To use SQLite, stick to these defaults.
#
# To use Postgres:
# - change the engine (`matrix_appservice_discord_database_engine: 'postgres'`)
# - adjust your database credentials
matrix_appservice_discord_database_engine: 'sqlite'
matrix_appservice_discord_database_filename: "/data/discord.db"
matrix_appservice_discord_database_connString: 'postgresql://{{ matrix_appservice_discord_database_connString_username }}:{{ matrix_appservice_discord_database_connString_password }}@{{ matrix_appservice_discord_database_connString_hostname }}:{{ matrix_appservice_discord_database_connString_port }}/{{ matrix_appservice_discord_database_connString_db_name }}'
matrix_appservice_discord_database_connString_username: 'matrix_appservice_discord'
matrix_appservice_discord_database_connString_password: 'some-password'
matrix_appservice_discord_database_connString_hostname: 'matrix-postgres'
matrix_appservice_discord_database_connString_port: 5432
matrix_appservice_discord_database_connString_db_name: 'matrix_appservice_discord'
# Tells whether the bot should make use of "Privileged Gateway Intents". # Tells whether the bot should make use of "Privileged Gateway Intents".
# #
# Enabling this means that you need to enable it for the bot (Discord application) as well, # Enabling this means that you need to enable it for the bot (Discord application) as well,

View File

@ -20,3 +20,7 @@
when: "item.old in vars" when: "item.old in vars"
with_items: with_items:
- {'old': 'matrix_appservice_discord_container_expose_client_server_api_port', 'new': '<superseded by matrix_appservice_discord_container_http_host_bind_port>'} - {'old': 'matrix_appservice_discord_container_expose_client_server_api_port', 'new': '<superseded by matrix_appservice_discord_container_http_host_bind_port>'}
- name: Require a valid database engine
fail: msg="`matrix_appservice_discord_database_engine` needs to be either 'sqlite' or 'postgres'"
when: "matrix_appservice_discord_database_engine not in ['sqlite', 'postgres']"

View File

@ -58,8 +58,11 @@ database:
# If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite # If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite
# WARNING: You will almost certainly be fine with sqlite unless your bridge # WARNING: You will almost certainly be fine with sqlite unless your bridge
# is in heavy demand and you suffer from IO slowness. # is in heavy demand and you suffer from IO slowness.
#filename: "/data/discord.db" {% if matrix_appservice_discord_database_engine == 'sqlite' %}
connString: "postgresql://matrix_appservice_discord:{{ matrix_additional_databases | selectattr('name', 'equalto', 'matrix_appservice_discord') | map(attribute='pass') | first }}@{{ matrix_postgres_connection_hostname }}/matrix_appservice_discord" filename: {{ matrix_appservice_discord_database_filename|to_json }}
{% else %}
connString: {{ matrix_appservice_discord_database_connString|to_json }}
{% endif %}
room: room:
# Set the default visibility of alias rooms, defaults to "public". # Set the default visibility of alias rooms, defaults to "public".
# One of: "public", "private" # One of: "public", "private"