Merge branch '__matrix_synapse' into 'master'
__matrix_synapse types See merge request ungleich-public/cdist-contrib!9
This commit is contained in:
commit
71c28b9d1f
54 changed files with 4011 additions and 0 deletions
2884
type/__matrix_synapse/files/homeserver.yaml.sh
Executable file
2884
type/__matrix_synapse/files/homeserver.yaml.sh
Executable file
File diff suppressed because it is too large
Load diff
70
type/__matrix_synapse/files/log.config.sh
Executable file
70
type/__matrix_synapse/files/log.config.sh
Executable file
|
@ -0,0 +1,70 @@
|
|||
#!/bin/sh
|
||||
|
||||
cat << EOF
|
||||
###############################################################
|
||||
# THIS FILE HAS BEEN GENERATED BY CDIST. DO NOT EDIT BY HAND. #
|
||||
###############################################################
|
||||
|
||||
|
||||
# Log configuration for Synapse.
|
||||
#
|
||||
# This is a YAML file containing a standard Python logging configuration
|
||||
# dictionary. See [1] for details on the valid settings.
|
||||
#
|
||||
# Synapse also supports structured logging for machine readable logs which can
|
||||
# be ingested by ELK stacks. See [2] for details.
|
||||
#
|
||||
# [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema
|
||||
# [2]: https://github.com/matrix-org/synapse/blob/master/docs/structured_logging.md
|
||||
#
|
||||
version: 1
|
||||
|
||||
formatters:
|
||||
precise:
|
||||
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s- %(message)s'
|
||||
|
||||
filters:
|
||||
context:
|
||||
(): synapse.util.logcontext.LoggingContextFilter
|
||||
request: ""
|
||||
|
||||
handlers:
|
||||
file:
|
||||
class: logging.handlers.TimedRotatingFileHandler
|
||||
formatter: precise
|
||||
filename: ${LOG_DIR:?}/homeserver.log
|
||||
when: midnight
|
||||
backupCount: 3 # Does not include the current log file.
|
||||
filters: [context]
|
||||
encoding: utf8
|
||||
# Default to buffering writes to log file for efficiency. This means that
|
||||
# will be a delay for INFO/DEBUG logs to get written, but WARNING/ERROR
|
||||
# logs will still be flushed immediately.
|
||||
buffer:
|
||||
class: logging.handlers.MemoryHandler
|
||||
target: file
|
||||
# The capacity is the number of log lines that are buffered before
|
||||
# being written to disk. Increasing this will lead to better
|
||||
# performance, at the expensive of it taking longer for log lines to
|
||||
# be written to disk.
|
||||
capacity: 10
|
||||
flushLevel: 30 # Flush for WARNING logs as well
|
||||
console:
|
||||
class: logging.StreamHandler
|
||||
formatter: precise
|
||||
level: WARN
|
||||
|
||||
loggers:
|
||||
synapse:
|
||||
level: INFO
|
||||
synapse.storage.SQL:
|
||||
# beware: increasing this to DEBUG will make synapse log sensitive
|
||||
# information such as access tokens.
|
||||
level: INFO
|
||||
twisted:
|
||||
level: INFO
|
||||
|
||||
root:
|
||||
level: INFO
|
||||
handlers: [buffer, console]
|
||||
EOF
|
35
type/__matrix_synapse/gencode-remote
Executable file
35
type/__matrix_synapse/gencode-remote
Executable file
|
@ -0,0 +1,35 @@
|
|||
#!/bin/sh
|
||||
|
||||
os=$(cat "$__global/explorer/os")
|
||||
init=$(cat "$__global/explorer/init")
|
||||
|
||||
case "$os" in
|
||||
alpine)
|
||||
synapse_conf_dir=/etc/synapse
|
||||
synapse_service=synapse
|
||||
;;
|
||||
debian)
|
||||
synapse_conf_dir=/etc/matrix-synapse
|
||||
synapse_service=matrix-synapse
|
||||
;;
|
||||
*)
|
||||
echo "Unknown OS $os." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if grep -qE "^__file$synapse_conf_dir" "${__messages_in}"; then
|
||||
case "$init" in
|
||||
systemd)
|
||||
echo "systemctl restart $synapse_service"
|
||||
;;
|
||||
initd)
|
||||
echo "service --ifstopped $synapse_service start"
|
||||
echo "service --ifstarted $synapse_service restart"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown init $init." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
330
type/__matrix_synapse/man.rst
Normal file
330
type/__matrix_synapse/man.rst
Normal file
|
@ -0,0 +1,330 @@
|
|||
cdist-type__matrix_synapse(7)
|
||||
======================
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__matrix_synapse - Install and configure Synapse, a Matrix homeserver
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This type install and configure the Synapse Matrix homeserver. This is a
|
||||
signleton type.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
server-name
|
||||
Name of your homeserver (e.g. ungleich.ch) used as part of your MXIDs. This
|
||||
value cannot be changed later on.
|
||||
|
||||
base-url
|
||||
Public URL of your homeserver (e.g. `<http://matrix.ungleich.ch>`_).
|
||||
|
||||
database-engine
|
||||
'sqlite3' or 'psycopg2' (= Postgresql).
|
||||
|
||||
database-name
|
||||
Path to database file if SQLite3 is used or database name if PostgresSQL is
|
||||
used.
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
database-host
|
||||
Database node address, only used with PostgresSQL.
|
||||
|
||||
database-user
|
||||
Database user, only used with PostgresSQL.
|
||||
|
||||
database-password
|
||||
Database password, only used with PostgresSQL.
|
||||
|
||||
database-connection-pool-min
|
||||
The minimum number of connections in pool, defaults to 3.
|
||||
|
||||
database-connection-pool-max
|
||||
The maximum number of connections in pool, defaults to 5.
|
||||
|
||||
ldap-uri
|
||||
Address of your LDAP server.
|
||||
|
||||
ldap-base-dn
|
||||
Base DN of your LDAP tree.
|
||||
|
||||
ldap-uid-attribute
|
||||
LDAP attriute mapping to Synapse's uid field, default to uid.
|
||||
|
||||
ldap-mail-attribute
|
||||
LDAP attriute mapping to Synapse's mail field, default to mail.
|
||||
|
||||
ldap-name-attribute
|
||||
LDAP attriute mapping to Synapse's name field, default to givenName.
|
||||
|
||||
ldap-bind-dn
|
||||
User used to authenticate against your LDAP server in 'search' mode.
|
||||
|
||||
ldap-bind-password
|
||||
Password used to authenticate against your LDAP server in 'search' mode.
|
||||
|
||||
ldap-filter
|
||||
LDAP user filter, defaulting to `(objectClass=posixAccount)`.
|
||||
|
||||
tls-cert
|
||||
Path to PEM-encoded X509 TLS certificate. Not needed if TLS termination is
|
||||
handled by a reverse Proxy such as NGINX.
|
||||
|
||||
tls-private-key
|
||||
Path to PEM-encoded TLS private key. Not needed if TLS termination is
|
||||
handled by a reverse Proxy such as NGINX.
|
||||
|
||||
smtp-host
|
||||
The hostname of the outgoing SMTP server to use. Defaults to 'localhost'.
|
||||
|
||||
smtp-port
|
||||
# The port on the mail server for outgoing SMTP. Defaults to 25.
|
||||
|
||||
smtp-user
|
||||
Username for authentication to the SMTP server. By
|
||||
default, no authentication is attempted.
|
||||
|
||||
smtp-password
|
||||
Password for authentication to the SMTP server. By
|
||||
default, no authentication is attempted.
|
||||
|
||||
notification-from
|
||||
From address to use when sending emails. Defaults
|
||||
to "%(app)s <no-reply@$SERVER_NAME>".
|
||||
|
||||
message-max-lifetime
|
||||
Default retention policy. If set, Synapse will apply it to rooms that lack
|
||||
the 'm.room.retention' state event. Ignored if
|
||||
enable-message-retention-policy is not set. Defaults to 1y.
|
||||
|
||||
web-client-url
|
||||
Custom URL for client links within the email
|
||||
notifications. By default links will be based on
|
||||
"https://matrix.to".
|
||||
|
||||
global-cache-factor
|
||||
Controls the global cache factor, which is the default cache factor for all
|
||||
caches if a specific factor for that cache is not otherwise set. Defaults to
|
||||
0.5, which will half the size of all caches.
|
||||
|
||||
event-cache-size
|
||||
The number of events to cache in memory. Not affected by
|
||||
caches.global_factor. Defaults to 10K.
|
||||
|
||||
remote-room-complexity-threshold
|
||||
The limit above which rooms cannot be joined when
|
||||
limit-remote-room-complexity is set. Room complexity is an arbitrary measure
|
||||
based on factors such as the number of users in the room. The default is 1.0.
|
||||
|
||||
room-encrypt-policy
|
||||
Controls whether locally-created rooms should be end-to-end encrypted by
|
||||
default. Possible options are "all" (any locally-created room), "invite"
|
||||
(any room created with the private_chat or trusted_private_chat room
|
||||
creation presets , and "off" (this option will take no effect). Defaults to
|
||||
"off".
|
||||
|
||||
turn-uri
|
||||
URI to TURN server, can be provided multiple times if there is more than one
|
||||
server.
|
||||
|
||||
turn-shared-secret
|
||||
Shared secret used to access the TURN REST API.
|
||||
|
||||
turn-user-lifetime
|
||||
Lifetime of TURN credentials. Defaults to 1h.
|
||||
|
||||
max-upload-size
|
||||
Maximum size for user-uploaded files. Defaults to 10M.
|
||||
|
||||
rc-message-per-second
|
||||
Message rate-limiting (per second). Defaults to 0.17.
|
||||
|
||||
rc-message-burst
|
||||
Message rate-limiting (burst). Defaults to 3.
|
||||
|
||||
rc-login-per-second
|
||||
Login rate-limiting (per-second). Defaults to 0.17.
|
||||
|
||||
rc-login-burst
|
||||
Login rate-limiting (burst). Defaults to 3.
|
||||
|
||||
registration-allows-email-pattern
|
||||
Only allow email addresses matching specified filter. Can be specified multiple times. A pattern must look like `.*@vector\.im`.
|
||||
|
||||
auto-join-room
|
||||
Room where newly-registered users are automatically added. Can be specified multiple times.
|
||||
|
||||
app-service-config-file
|
||||
Path (on remote) of an application service configuration file to load. Can be specified multiple times.
|
||||
|
||||
worker-replication-secret
|
||||
A shared secret used by the replication APIs to authenticate HTTP requests
|
||||
from workers. Ignored if worker-mode is not set. By default this is unused and
|
||||
traffic is not authenticated.
|
||||
|
||||
background-tasks-worker
|
||||
The worker that is used to run background tasks (e.g. cleaning up expired
|
||||
data). If not provided this defaults to the main process.
|
||||
|
||||
outbound-federation-worker
|
||||
Worker to be used for sending federation requests. Can be specified multiple
|
||||
times. Disables sending outbound federation requests from the master process.
|
||||
|
||||
registration-shared-secret
|
||||
If set, allows registration of standard or admin accounts by anyone who
|
||||
has the shared secret, even if registration is otherwise disabled.
|
||||
|
||||
bind-address
|
||||
Address used to bind the synapse listeners. Can be specified multiple times.
|
||||
Defaults to '::1' and '127.0.0.1'.
|
||||
|
||||
extra-setting
|
||||
Arbitrary string to be added to the configuration file. Can be specified multiple times.
|
||||
|
||||
BOOLEAN PARAMETERS
|
||||
------------------
|
||||
enable-registrations
|
||||
Enables user registration on the homeserver.
|
||||
|
||||
enable-ldap-auth
|
||||
Enables ldap-backed authentication.
|
||||
|
||||
ldap-use-starttls
|
||||
Use STARTTLS when connection to the LDAP server.
|
||||
|
||||
report-stats
|
||||
Whether or not to report anonymized homeserver usage statistics.
|
||||
|
||||
expose-metrics
|
||||
Expose metrics endpoint for Prometheus.
|
||||
|
||||
enable-notifications
|
||||
Enable mail notifications (see smtp-* optinal parameters).
|
||||
|
||||
smtp-use-starttls
|
||||
Use STARTTLS when connection to the SMTP server.
|
||||
|
||||
disable-federation
|
||||
Disable federation to the broader matrix network.
|
||||
|
||||
registration-require-email
|
||||
Make email a required field on registration.
|
||||
|
||||
allow-public-rooms-over-federation
|
||||
Allow other homeservers to fetch this server's public room directory.
|
||||
|
||||
allow-public-rooms-without-auth
|
||||
If set to 'false', requires authentication to access the server's public rooms directory through the client API.
|
||||
|
||||
enable-server-notices
|
||||
Enable the server notices room.
|
||||
|
||||
allow-guest-access
|
||||
Allows users to register as guests without a password/email/etc, and
|
||||
participate in rooms hosted on this server which have been made accessible
|
||||
to anonymous users.
|
||||
|
||||
limit-remote-room-complexity
|
||||
When this is enabled, the room "complexity" will be checked before a user joins
|
||||
a new remote room. If it is above the complexity limit (see
|
||||
remote-room-complexity-threshold parameter), the server will disallow
|
||||
joining, or will instantly leave.
|
||||
|
||||
disable-presence
|
||||
Disable presence tracking on this homeserver.
|
||||
|
||||
user-directory-search-all-users
|
||||
Defines whether to search all users visible to your HS when searching the
|
||||
user directory, rather than limiting to users visible in public rooms.
|
||||
If you set it True, you'll have to rebuild the user_directory search indexes,
|
||||
see
|
||||
`<https://github.com/matrix-org/synapse/blob/master/docs/user_directory.md>`_.
|
||||
|
||||
enable-message-retention-policy
|
||||
If this feature is enabled, Synapse will regularly look for and purge events
|
||||
which are older than the room's maximum retention period. Synapse will also
|
||||
filter events received over federation so that events that should have been
|
||||
purged are ignored and not stored again. See message-max-lifetime flag.
|
||||
|
||||
worker-mode
|
||||
For small instances it recommended to run Synapse in the default monolith
|
||||
mode. For larger instances where performance is a concern it can be helpful
|
||||
to split out functionality into multiple separate python processes. These
|
||||
processes are called 'workers'. Please read the WORKER MODE section of this
|
||||
manpage before enabling, as extra work and considerations are required.
|
||||
|
||||
PERFORMANCE
|
||||
-----------
|
||||
|
||||
The Synapse server is not very performant (initial implementation, pretty
|
||||
resource hungry, etc.) and will eventually be replaced by Dendrite. The
|
||||
following parameters (see above descriptions) will help you with performance
|
||||
tuning:
|
||||
|
||||
* global-cache-factor
|
||||
* event-cache-size
|
||||
* disable-presence
|
||||
* limit-remote-room-complexity and remote-room-complexity-threshold
|
||||
|
||||
WORKER MODE
|
||||
-----------
|
||||
|
||||
Worker mode allows to move some processing out of the main synapse process for
|
||||
horizontal scaling. You are expected to use the
|
||||
`cdist-type__matrix_synapse_worker(7)
|
||||
<cdist-type__matrix_synapse_worker.html>`_ type to set up workers when the
|
||||
worker-mode flag is set.
|
||||
|
||||
Worker mode depend on the following components:
|
||||
|
||||
* A working `redis <https://redis.io/>`_ server
|
||||
* The hiredis python package (`python3-hiredis
|
||||
<https://packages.debian.org/buster/python3-hiredis>`_ on debian, not
|
||||
packaged in alpine as of 2021-02-17).
|
||||
* The txredisapi python package, which is not packaged on debian nor alpine
|
||||
as of 2021-02-17.
|
||||
|
||||
The current way to install the above two python packages (if not packaged in
|
||||
your distribution) is sadly to use pip (see `cdist-type__python_pip(7)
|
||||
<cdist-type__python_pip.html>`_ core cdist type).
|
||||
|
||||
It is also recommended to first take a look at:
|
||||
|
||||
- `upstream's high-level overview on workers (matrix.org blog post) <https://matrix.org/blog/2020/11/03/how-we-fixed-synapses-scalability>`_
|
||||
- `upstream's documentation on workers <https://github.com/matrix-org/synapse/blob/develop/docs/workers.md>`_
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
__matrix_synapse --server-name ungleich.ch \
|
||||
--base-url https://matrix.ungleich.ch \
|
||||
--database-engine sqlite3 \
|
||||
--database-name /var/lib/matrix-syanpse/homeserver.db
|
||||
|
||||
You might also be interested in ungleich's `__ungleich_matrix
|
||||
<https://code.ungleich.ch/ungleich-public/cdist-ungleich/-/tree/master/type/__ungleich_matrix>`_
|
||||
meta-type.
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- `cdist-type__matrix_element(7) <cdist-type__matrix_element.html>`_
|
||||
- `cdist-type__matrix_synapse_admin(7) <cdist-type__matrix_synapse_admin.html>`_
|
||||
- `cdist-type__matrix_synapse_worker(7) <cdist-type__matrix_synapse_worker.html>`_
|
||||
|
||||
|
||||
AUTHORS
|
||||
-------
|
||||
Timothée Floure <timothee.floure@ungleich.ch>
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2019-2021 Timothée Floure. You can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
369
type/__matrix_synapse/manifest
Executable file
369
type/__matrix_synapse/manifest
Executable file
|
@ -0,0 +1,369 @@
|
|||
#!/bin/sh -e
|
||||
#
|
||||
# 2019 Timothée Floure (timothee.floure@ungleich.ch)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
# cdist is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# cdist is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# OS-specific configuration.
|
||||
os=$(cat "$__global/explorer/os")
|
||||
distribution=$(cat "$__global/explorer/lsb_codename")
|
||||
|
||||
case "$os" in
|
||||
debian)
|
||||
synapse_user=matrix-synapse
|
||||
synapse_pkg=matrix-synapse
|
||||
synapse_service=matrix-synapse
|
||||
ldap_auth_provider_pkg=matrix-synapse-ldap3
|
||||
synapse_conf_dir='/etc/matrix-synapse'
|
||||
synapse_data_dir='/var/lib/matrix-synapse'
|
||||
|
||||
# See https://packages.debian.org/bullseye/matrix-synapse for state of
|
||||
# synapse packaging in debian.
|
||||
case "$distribution" in
|
||||
stretch)
|
||||
echo "The matrix-synapse package in debian stretch is outdated and unusable." >&2
|
||||
exit 1
|
||||
;;
|
||||
buster)
|
||||
# Enable debian-backports for debian Buster, as the 'stable'
|
||||
# matrix-synapse package is ways too old (< 1.0).
|
||||
apt_target_release=buster-backports
|
||||
__apt_backports
|
||||
;;
|
||||
bullseye|sid)
|
||||
# As of writting (2021-02), the default matrix-synapse of those
|
||||
# release is perfectly usable.
|
||||
:
|
||||
;;
|
||||
*)
|
||||
echo "Unknown debian release '$distribution'. Exiting" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
alpine)
|
||||
synapse_user=synapse
|
||||
synapse_pkg=synapse
|
||||
synapse_service=synapse
|
||||
# Note available as of writing (2021-02-15)
|
||||
ldap_auth_provider_pkg=
|
||||
synapse_conf_dir='/etc/synapse'
|
||||
synapse_data_dir='/var/lib/synapse'
|
||||
;;
|
||||
*)
|
||||
printf "Your operating system (%s) is currently not supported by this type (%s)\n" "$os" "${__type##*/}" >&2
|
||||
printf "Please contribute an implementation for it if you can.\n" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Small helper used to get boolean values which can be used as-is in the
|
||||
# configuration template.
|
||||
get_boolean_for () {
|
||||
if [ -f "$__object/parameter/${1:?}" ]; then
|
||||
echo 'true'
|
||||
else
|
||||
echo 'false'
|
||||
fi
|
||||
}
|
||||
|
||||
# Small helper for erroring out on invalid combinations.
|
||||
is_required_when () {
|
||||
value=$1
|
||||
flag=$2
|
||||
when=$3
|
||||
|
||||
if [ -z "$value" ]; then
|
||||
echo "$flag is required when $when." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Generic configuration.
|
||||
export DATA_DIR=$synapse_data_dir
|
||||
export LOG_DIR='/var/log/matrix-synapse'
|
||||
export PIDFILE='/var/run/matrix/homeserver.pid'
|
||||
export LOG_CONFIG_PATH="$synapse_conf_dir/log.yaml"
|
||||
export SIGNING_KEY_PATH="$synapse_conf_dir/signin.key"
|
||||
|
||||
# Base parameters.
|
||||
SERVER_NAME=$(cat "$__object/parameter/server-name")
|
||||
BASE_URL=$(cat "$__object/parameter/base-url")
|
||||
REPORT_STATS=$(get_boolean_for 'report-stats')
|
||||
MAX_UPLOAD_SIZE=$(cat "$__object/parameter/max-upload-size")
|
||||
EXPOSE_METRICS=$(get_boolean_for 'expose-metrics')
|
||||
WEB_CLIENT_URL=$(cat "$__object/parameter/web-client-url")
|
||||
ROOM_ENCRYPTION_POLICY=$(cat "$__object/parameter/room-encryption-policy")
|
||||
BIND_ADDRESSES=$(cat "$__object/parameter/bind-address")
|
||||
export SERVER_NAME BASE_URL REPORT_STATS MAX_UPLOAD_SIZE EXPOSE_METRICS \
|
||||
WEB_CLIENT_URL ROOM_ENCRYPTION_POLICY BIND_ADDRESSES
|
||||
|
||||
if [ -f "$__object/parameter/enable-server-notices" ]; then
|
||||
export ENABLE_SERVER_NOTICES=1
|
||||
fi
|
||||
|
||||
# TLS.
|
||||
if [ -f "$__object/parameter/tls-cert" ]; then
|
||||
TLS_CERTIFICATE_PATH=$(cat "$__object/parameter/tls-cert")
|
||||
export TLS_CERTIFICATE_PATH
|
||||
fi
|
||||
if [ -f "$__object/parameter/tls-private-key" ]; then
|
||||
TLS_PRIVATE_KEY_PATH=$(cat "$__object/parameter/tls-private-key")
|
||||
export TLS_PRIVATE_KEY_PATH
|
||||
fi
|
||||
|
||||
# Performance flags.
|
||||
GLOBAL_CACHE_FACTOR=$(cat "$__object/parameter/global-cache-factor")
|
||||
EVENT_CACHE_SIZE=$(cat "$__object/parameter/event-cache-size")
|
||||
export GLOBAL_CACHE_FACTOR EVENT_CACHE_SIZE
|
||||
|
||||
if [ -f "$__object/parameter/disable-presence" ]; then
|
||||
export USE_PRESENCE='false'
|
||||
else
|
||||
export USE_PRESENCE='true'
|
||||
fi
|
||||
|
||||
# Database configuration.
|
||||
DATABASE_ENGINE=$(cat "$__object/parameter/database-engine")
|
||||
DATABASE_NAME=$(cat "$__object/parameter/database-name")
|
||||
DATABASE_HOST=$(cat "$__object/parameter/database-host")
|
||||
DATABASE_USER=$(cat "$__object/parameter/database-user")
|
||||
DATABASE_PASSWORD=$(cat "$__object/parameter/database-password")
|
||||
DATABASE_CP_MIN=$(cat "$__object/parameter/database-connection-pool-min")
|
||||
DATABASE_CP_MAX=$(cat "$__object/parameter/database-connection-pool-max")
|
||||
export DATABASE_ENGINE DATABASE_NAME DATABASE_HOST DATABASE_USER \
|
||||
DATABASE_PASSWORD DATABASE_CP_MIN DATABASE_CP_MAX
|
||||
|
||||
# LDAP-based authentication.
|
||||
if [ -f "$__object/parameter/enable-ldap-auth" ]; then
|
||||
ENABLE_LDAP_AUTH=$(get_boolean_for 'enable-ldap-auth')
|
||||
export ENABLE_LDAP_AUTH
|
||||
fi
|
||||
|
||||
LDAP_FILTER=$(cat "$__object/parameter/ldap-filter")
|
||||
LDAP_UID_ATTRIBUTE=$(cat "$__object/parameter/ldap-uid-attribute")
|
||||
LDAP_MAIL_ATTRIBUTE=$(cat "$__object/parameter/ldap-mail-attribute")
|
||||
LDAP_NAME_ATTRIBUTE=$(cat "$__object/parameter/ldap-name-attribute")
|
||||
LDAP_URI=$(cat "$__object/parameter/ldap-uri")
|
||||
LDAP_BASE_DN=$(cat "$__object/parameter/ldap-base-dn")
|
||||
LDAP_BIND_DN=$(cat "$__object/parameter/ldap-bind-dn")
|
||||
LDAP_BIND_PASSWORD=$(cat "$__object/parameter/ldap-bind-password")
|
||||
LDAP_USE_STARTTLS=$(get_boolean_for 'ldap-use-starttls')
|
||||
export LDAP_FILTER LDAP_UID_ATTRIBUTE LDAP_MAIL_ATTRIBUTE LDAP_NAME_ATTRIBUTE \
|
||||
LDAP_URI LDAP_BASE_DN LDAP_BIND_DN LDAP_BIND_PASSWORD LDAP_USE_STARTTLS
|
||||
|
||||
# Outgoing emails (= notifications).
|
||||
ENABLE_NOTIFICATIONS=$(get_boolean_for 'enable-notifications')
|
||||
SMTP_HOST=$(cat "$__object/parameter/smtp-host")
|
||||
SMTP_PORT=$(cat "$__object/parameter/smtp-port")
|
||||
SMTP_USE_STARTTLS=$(get_boolean_for 'smtp-use-starttls')
|
||||
SMTP_USER=$(cat "$__object/parameter/smtp-user")
|
||||
SMTP_PASSWORD=$(cat "$__object/parameter/smtp-password")
|
||||
export SMTP_HOST SMTP_PORT SMTP_USER SMTP_PASSWORD SMTP_USE_STARTTLS \
|
||||
ENABLE_NOTIFICATIONS
|
||||
|
||||
if [ -f "$__object/parameter/notification-from" ]; then
|
||||
NOTIFICATION_FROM=$(cat "$__object/parameter/notification-from")
|
||||
export NOTIFICATION_FROM
|
||||
else
|
||||
export NOTIFICATION_FROM="%(app)s <no-reply@$SERVER_NAME>"
|
||||
fi
|
||||
|
||||
# Registrations and users.
|
||||
ALLOW_GUEST_ACCESS=$(get_boolean_for 'allow-guest-access')
|
||||
ENABLE_REGISTRATIONS=$(get_boolean_for 'enable-registrations')
|
||||
USER_DIRECTORY_SEARCH_ALL_USERS=$(get_boolean_for 'user-directory-search-all-users')
|
||||
export ALLOW_GUEST_ACCESS ENABLE_REGISTRATIONS USER_DIRECTORY_SEARCH_ALL_USERS
|
||||
|
||||
if [ -f "$__object/parameter/registration-shared-token" ]; then
|
||||
REGISTRATION_SHARED_SECRET=$(cat "$__object/parameter/registration-shared-secret")
|
||||
export REGISTRATION_SHARED_SECRET
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/registration-requires-email" ]; then
|
||||
export REGISTRATION_REQUIRES_EMAIL=1
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/auto-join-room" ]; then
|
||||
AUTO_JOIN_ROOMS="$(cat "$__object/parameter/auto-join-room")"
|
||||
export AUTO_JOIN_ROOMS
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/registration-allows-email-pattern" ]; then
|
||||
RESGISTRATION_ALLOWS_EMAIL_PATTERN=$(cat "$__object/parameter/registration-allows-email-pattern")
|
||||
export RESGISTRATION_ALLOWS_EMAIL_PATTERN
|
||||
fi
|
||||
|
||||
# Federation.
|
||||
ALLOW_PUBLIC_ROOMS_OVER_FEDERATION=$(get_boolean_for 'allow-public-room-over-federation')
|
||||
ALLOW_PUBLIC_ROOMS_WITHOUT_AUTH=$(get_boolean_for 'allow-public-rooms-without-auth')
|
||||
LIMIT_REMOTE_ROOM_COMPLEXITY=$(get_boolean_for 'limit-remote-room-complexity')
|
||||
REMOTE_ROOM_COMPLEXITY_THRESHOLD=$(cat "$__object/parameter/remote-room-complexity-threshold")
|
||||
export ALLOW_PUBLIC_ROOMS_OVER_FEDERATION ALLOW_PUBLIC_ROOMS_WITHOUT_AUTH \
|
||||
LIMIT_REMOTE_ROOM_COMPLEXITY REMOTE_ROOM_COMPLEXITY_THRESHOLD
|
||||
|
||||
if [ -f "$__object/parameter/disable-federation" ]; then
|
||||
export DISABLE_FEDERATION=1
|
||||
fi
|
||||
|
||||
# Message retention.
|
||||
ENABLE_MESSAGE_RETENTION_POLICY=$(get_boolean_for 'enable-message-retention-policy')
|
||||
MESSAGE_RETENTION_POLICY_MAX_LIFETIME=$(cat "$__object/parameter/message-max-lifetime")
|
||||
export ENABLE_MESSAGE_RETENTION_POLICY MESSAGE_RETENTION_POLICY_MAX_LIFETIME
|
||||
|
||||
# Previews.
|
||||
ENABLE_URL_PREVIEW=$(get_boolean_for 'enable-url-preview')
|
||||
export ENABLE_URL_PREVIEW
|
||||
|
||||
# Rate-limiting
|
||||
RC_MESSAGE_PER_SECOND=$(cat "$__object/parameter/rc-message-per-second")
|
||||
RC_MESSAGE_BURST=$(cat "$__object/parameter/rc-message-burst")
|
||||
RC_LOGIN_PER_SECOND=$(cat "$__object/parameter/rc-login-per-second")
|
||||
RC_LOGIN_BURST=$(cat "$__object/parameter/rc-login-burst")
|
||||
export RC_MESSAGE_PER_SECOND RC_MESSAGE_BURST RC_LOGIN_PER_SECOND \
|
||||
RC_LOGIN_BURST
|
||||
|
||||
# Application services.
|
||||
if [ -f "$__object/parameter/app-service-config-file" ]; then
|
||||
APP_SERVICE_CONFIG_FILES=$(cat "$__object/parameter/app-service-config-file")
|
||||
export APP_SERVICE_CONFIG_FILES
|
||||
fi
|
||||
|
||||
# Anything that did not fit in this type's template.
|
||||
if [ -f "$__object/parameter/extra-setting" ]; then
|
||||
EXTRA_SETTINGS=$(cat "$__object/parameter/extra-setting")
|
||||
export EXTRA_SETTINGS
|
||||
fi
|
||||
|
||||
# TURN server (NAT traversal for P2P calls).
|
||||
TURN_USER_LIFETIME=$(cat "$__object/parameter/turn-user-lifetime")
|
||||
export TURN_USER_LIFETIME
|
||||
|
||||
if [ -f "$__object/parameter/turn-shared-secret" ]; then
|
||||
TURN_SHARED_SECRET=$(cat "$__object/parameter/turn-shared-secret")
|
||||
export TURN_SHARED_SECRET
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/turn-uri" ]; then
|
||||
TURN_URIS=$(cat "$__object/parameter/turn-uri")
|
||||
export TURN_URIS
|
||||
fi
|
||||
|
||||
# Worker-mode configuration.
|
||||
export MAIN_LISTENER_PORT=8008
|
||||
export ENABLE_MEDIA_REPO='true'
|
||||
if [ -f "$__object/parameter/outbound-federation-worker" ]; then
|
||||
FEDERATION_SENDER_INSTANCES=$(cat "$__object/parameter/outbound-federation-worker")
|
||||
export FEDERATION_SENDER_INSTANCES
|
||||
fi
|
||||
MAIN_LISTENER_RESOURCES="[federation,client]"
|
||||
if [ "$EXPOSE_METRICS" = "true" ]; then
|
||||
MAIN_LISTENER_RESOURCES="$(echo "$MAIN_LISTENER_RESOURCES" | tr -d ']'),metrics]"
|
||||
fi
|
||||
if [ -n "$FEDERATION_SENDER_INSTANCES" ]; then
|
||||
export SEND_FEDERATION_FROM_MAIN_PROCESS='false'
|
||||
else
|
||||
export SEND_FEDERATION_FROM_MAIN_PROCESS='true'
|
||||
fi
|
||||
export MAIN_LISTENER_RESOURCES
|
||||
|
||||
ENABLE_REPLICATION=
|
||||
ENABLE_REDIS_SUPPORT='false'
|
||||
WORKER_REPLICATION_SECRET=$(cat "$__object/parameter/worker-replication-secret")
|
||||
BACKGROUND_TASKS_WORKER=$(cat "$__object/parameter/background-tasks-worker")
|
||||
if [ -f "$__object/parameter/worker-mode" ]; then
|
||||
ENABLE_REPLICATION=1
|
||||
ENABLE_REDIS_SUPPORT='true'
|
||||
fi
|
||||
export ENABLE_REPLICATION ENABLE_REDIS_SUPPORT WORKER_REPLICATION_SECRET \
|
||||
BACKGROUND_TASKS_WORKER
|
||||
|
||||
# Error out on invalid parameter combination.
|
||||
case "$DATABASE_ENGINE" in
|
||||
sqlite3)
|
||||
:
|
||||
;;
|
||||
psycopg2)
|
||||
when='database engine is psycopg2'
|
||||
is_required_when "$DATABASE_HOST" '--database-host' "$when"
|
||||
is_required_when "$DATABASE_USER" '--database-user' "$when"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid database engine: $DATABASE_ENGINE." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# Install OS packages. We have a bit of boilerplate to handle the debian
|
||||
# backports situation.
|
||||
synapse_req=
|
||||
if [ -n "$apt_target_release" ]; then
|
||||
require="__apt_backports" __package_apt "$synapse_pkg" \
|
||||
--target-release "$apt_target_release"
|
||||
synapse_req="__package_apt/$synapse_pkg"
|
||||
else
|
||||
__package "$synapse_pkg"
|
||||
synapse_req="__package/$synapse_pkg"
|
||||
fi
|
||||
|
||||
if [ -n "$ENABLE_LDAP_AUTH" ]; then
|
||||
if [ -n "$apt_target_release" ]; then
|
||||
require="__package_apt/$synapse_pkg" __package_apt "$ldap_auth_provider_pkg" \
|
||||
--target-release "$apt_target_release"
|
||||
else
|
||||
__package "$ldap_auth_provider_pkg"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Generate and deploy configuration files.
|
||||
mkdir -p "$__object/files"
|
||||
"$__type/files/homeserver.yaml.sh" > "$__object/files/homeserver.yaml"
|
||||
"$__type/files/log.config.sh" > "$__object/files/log.config"
|
||||
|
||||
require="$synapse_req" __file "$synapse_conf_dir/homeserver.yaml" \
|
||||
--owner $synapse_user \
|
||||
--mode 600 \
|
||||
--source "$__object/files/homeserver.yaml"
|
||||
require="$synapse_req" __file "$LOG_CONFIG_PATH" \
|
||||
--owner $synapse_user \
|
||||
--mode 600 \
|
||||
--source "$__object/files/log.config"
|
||||
|
||||
for directory in $DATA_DIR $LOG_DIR; do
|
||||
require="$synapse_req" __directory $directory \
|
||||
--state present \
|
||||
--owner $synapse_user
|
||||
done
|
||||
|
||||
# Make dpkg-reconfigure happy on debian systems.
|
||||
if [ "$os" = "debian" ]; then
|
||||
require="$synapse_req" __file "$synapse_conf_dir/conf.d/server_name.yaml" \
|
||||
--owner $synapse_user \
|
||||
--source - <<- EOF
|
||||
server_name: "$SERVER_NAME"
|
||||
EOF
|
||||
|
||||
require="$synapse_req" __file "$synapse_conf_dir/conf.d/report_stats.yaml" \
|
||||
--owner $synapse_user \
|
||||
--source - <<- EOF
|
||||
report_stats: $REPORT_STATS
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Start service at boot - started/reload in gencode-remote.
|
||||
require="$synapse_req" __start_on_boot $synapse_service
|
19
type/__matrix_synapse/parameter/boolean
Normal file
19
type/__matrix_synapse/parameter/boolean
Normal file
|
@ -0,0 +1,19 @@
|
|||
enable-registrations
|
||||
enable-ldap-auth
|
||||
report-stats
|
||||
expose-metrics
|
||||
enable-notifications
|
||||
smtp-use-starttls
|
||||
disable-federation
|
||||
registration-requires-email
|
||||
allow-public-rooms-over-federation
|
||||
enable-server-notices
|
||||
allow-guest-access
|
||||
allow-public-rooms-without-auth
|
||||
limit-remote-room-complexity
|
||||
disable-presence
|
||||
ldap-use-starttls
|
||||
user-directory-search-all-users
|
||||
enable-message-retention-policy
|
||||
worker-mode
|
||||
enable-url-preview
|
1
type/__matrix_synapse/parameter/default/bind-address
Normal file
1
type/__matrix_synapse/parameter/default/bind-address
Normal file
|
@ -0,0 +1 @@
|
|||
::1 127.0.0.1
|
|
@ -0,0 +1 @@
|
|||
5
|
|
@ -0,0 +1 @@
|
|||
3
|
0
type/__matrix_synapse/parameter/default/database-host
Normal file
0
type/__matrix_synapse/parameter/default/database-host
Normal file
0
type/__matrix_synapse/parameter/default/database-user
Normal file
0
type/__matrix_synapse/parameter/default/database-user
Normal file
1
type/__matrix_synapse/parameter/default/event-cache-size
Normal file
1
type/__matrix_synapse/parameter/default/event-cache-size
Normal file
|
@ -0,0 +1 @@
|
|||
10K
|
|
@ -0,0 +1 @@
|
|||
0.5
|
0
type/__matrix_synapse/parameter/default/ldap-base-dn
Normal file
0
type/__matrix_synapse/parameter/default/ldap-base-dn
Normal file
0
type/__matrix_synapse/parameter/default/ldap-bind-dn
Normal file
0
type/__matrix_synapse/parameter/default/ldap-bind-dn
Normal file
1
type/__matrix_synapse/parameter/default/ldap-filter
Normal file
1
type/__matrix_synapse/parameter/default/ldap-filter
Normal file
|
@ -0,0 +1 @@
|
|||
(objectClass=posixAccount)
|
|
@ -0,0 +1 @@
|
|||
mail
|
|
@ -0,0 +1 @@
|
|||
givenName
|
|
@ -0,0 +1 @@
|
|||
uid
|
0
type/__matrix_synapse/parameter/default/ldap-uri
Normal file
0
type/__matrix_synapse/parameter/default/ldap-uri
Normal file
1
type/__matrix_synapse/parameter/default/max-upload-size
Normal file
1
type/__matrix_synapse/parameter/default/max-upload-size
Normal file
|
@ -0,0 +1 @@
|
|||
10M
|
|
@ -0,0 +1 @@
|
|||
1y
|
1
type/__matrix_synapse/parameter/default/rc-login-burst
Normal file
1
type/__matrix_synapse/parameter/default/rc-login-burst
Normal file
|
@ -0,0 +1 @@
|
|||
3
|
|
@ -0,0 +1 @@
|
|||
0.17
|
1
type/__matrix_synapse/parameter/default/rc-message-burst
Normal file
1
type/__matrix_synapse/parameter/default/rc-message-burst
Normal file
|
@ -0,0 +1 @@
|
|||
3
|
|
@ -0,0 +1 @@
|
|||
0.17
|
|
@ -0,0 +1 @@
|
|||
1.0
|
|
@ -0,0 +1 @@
|
|||
off
|
1
type/__matrix_synapse/parameter/default/smtp-host
Normal file
1
type/__matrix_synapse/parameter/default/smtp-host
Normal file
|
@ -0,0 +1 @@
|
|||
localhost
|
0
type/__matrix_synapse/parameter/default/smtp-password
Normal file
0
type/__matrix_synapse/parameter/default/smtp-password
Normal file
1
type/__matrix_synapse/parameter/default/smtp-port
Normal file
1
type/__matrix_synapse/parameter/default/smtp-port
Normal file
|
@ -0,0 +1 @@
|
|||
25
|
0
type/__matrix_synapse/parameter/default/smtp-user
Normal file
0
type/__matrix_synapse/parameter/default/smtp-user
Normal file
|
@ -0,0 +1 @@
|
|||
1h
|
0
type/__matrix_synapse/parameter/default/web-client-url
Normal file
0
type/__matrix_synapse/parameter/default/web-client-url
Normal file
36
type/__matrix_synapse/parameter/optional
Normal file
36
type/__matrix_synapse/parameter/optional
Normal file
|
@ -0,0 +1,36 @@
|
|||
database-host
|
||||
database-user
|
||||
database-password
|
||||
database-connection-pool-min
|
||||
database-connection-pool-max
|
||||
ldap-uri
|
||||
ldap-base-dn
|
||||
ldap-uid-attribute
|
||||
ldap-mail-attribute
|
||||
ldap-name-attribute
|
||||
ldap-bind-dn
|
||||
ldap-bind-password
|
||||
ldap-filter
|
||||
turn-shared-secret
|
||||
turn-user-lifetime
|
||||
max-upload-size
|
||||
smtp-host
|
||||
smtp-port
|
||||
smtp-user
|
||||
smtp-password
|
||||
web-client-url
|
||||
rc-message-per-second
|
||||
rc-message-burst
|
||||
rc-login-per-second
|
||||
rc-login-burst
|
||||
global-cache-factor
|
||||
event-cache-size
|
||||
remote-room-complexity-threshold
|
||||
room-encryption-policy
|
||||
notification-from
|
||||
message-max-lifetime
|
||||
worker-replication-secret
|
||||
background-tasks-worker
|
||||
tls-cert
|
||||
tls-private-key
|
||||
registration-shared-secret
|
7
type/__matrix_synapse/parameter/optional_multiple
Normal file
7
type/__matrix_synapse/parameter/optional_multiple
Normal file
|
@ -0,0 +1,7 @@
|
|||
turn-uri
|
||||
registration-allows-email-pattern
|
||||
auto-join-room
|
||||
app-service-config-file
|
||||
extra-setting
|
||||
bind-address
|
||||
outbound-federation-worker
|
4
type/__matrix_synapse/parameter/required
Normal file
4
type/__matrix_synapse/parameter/required
Normal file
|
@ -0,0 +1,4 @@
|
|||
server-name
|
||||
base-url
|
||||
database-engine
|
||||
database-name
|
0
type/__matrix_synapse/singleton
Normal file
0
type/__matrix_synapse/singleton
Normal file
|
@ -0,0 +1,25 @@
|
|||
[Unit]
|
||||
Description=Synapse %i
|
||||
AssertPathExists=/etc/matrix-synapse/workers/%i.yaml
|
||||
|
||||
# This service should be restarted when the synapse target is restarted.
|
||||
PartOf=matrix-synapse.target
|
||||
|
||||
# if this is started at the same time as the main, let the main process start
|
||||
# first, to initialise the database schema.
|
||||
After=matrix-synapse.service
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
NotifyAccess=main
|
||||
User=matrix-synapse
|
||||
WorkingDirectory=/var/lib/matrix-synapse
|
||||
EnvironmentFile=/etc/default/matrix-synapse
|
||||
ExecStart=/usr/bin/python3 -m synapse.app.generic_worker --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/ --config-path=/etc/matrix-synapse/workers/%i.yaml
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
Restart=on-failure
|
||||
RestartSec=3
|
||||
SyslogIdentifier=matrix-synapse-%i
|
||||
|
||||
[Install]
|
||||
WantedBy=matrix-synapse.target
|
38
type/__matrix_synapse_worker/files/worker.yaml.sh
Executable file
38
type/__matrix_synapse_worker/files/worker.yaml.sh
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
|
||||
generate_bind_addresses () {
|
||||
if [ -n "$WORKER_BIND_ADDRESSES" ]; then
|
||||
echo "bind_addresses:"
|
||||
for addr in $WORKER_BIND_ADDRESSES; do
|
||||
echo " - '$addr'"
|
||||
done
|
||||
else
|
||||
echo "bind_addresses: []"
|
||||
fi
|
||||
}
|
||||
|
||||
cat << EOF
|
||||
worker_app: "${WORKER_APP:?}"
|
||||
worker_name: "${WORKER_NAME:?}"
|
||||
|
||||
# The replication listener on the main synapse process.
|
||||
worker_replication_host: "${WORKER_REPLICATION_HOST:?}"
|
||||
worker_replication_http_port: ${WORKER_REPLICATION_PORT:?}
|
||||
|
||||
worker_listeners:
|
||||
- type: http
|
||||
port: ${WORKER_PORT:?}
|
||||
x_forwarded: true
|
||||
$(generate_bind_addresses)
|
||||
resources:
|
||||
- names:
|
||||
EOF
|
||||
|
||||
for resource in ${WORKER_RESOURCES:?}; do
|
||||
echo " - $resource"
|
||||
done
|
||||
|
||||
cat << EOF
|
||||
|
||||
worker_log_config: "${WORKER_LOG_CONFIG:?}"
|
||||
EOF
|
12
type/__matrix_synapse_worker/gencode-remote
Executable file
12
type/__matrix_synapse_worker/gencode-remote
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Designed for Debian/systemd - make sure to adapt when you add support for other
|
||||
# distributions/OSs.
|
||||
name=$__object_id
|
||||
synapse_conf_dir='/etc/matrix-synapse'
|
||||
synapse_workers_conf_dir="$synapse_conf_dir/workers"
|
||||
systemd_worker_service="matrix-synapse-worker@$name"
|
||||
|
||||
if grep -qE "^__file$synapse_workers_conf_dir/$name" "${__messages_in}"; then
|
||||
echo "systemctl restart $systemd_worker_service"
|
||||
fi
|
83
type/__matrix_synapse_worker/man.rst
Normal file
83
type/__matrix_synapse_worker/man.rst
Normal file
|
@ -0,0 +1,83 @@
|
|||
cdist-type__matrix_synapse(7)
|
||||
======================
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__matrix_synapse_worker - Configure a synapse worker
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This type configures and start a matrix worker. This type does not install
|
||||
synapse: `cdist-type__matrix_synapse(7) <cdist-type__matrix_synapse.html>`_
|
||||
type must be run first.
|
||||
|
||||
It is also recommended to take a look at:
|
||||
|
||||
- `upstream's high-level overview on workers (matrix.org blog post) <https://matrix.org/blog/2020/11/03/how-we-fixed-synapses-scalability>`_
|
||||
- `upstream's documentation on workers <https://github.com/matrix-org/synapse/blob/develop/docs/workers.md>`_
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
app
|
||||
Worker application to be used. A detailed list is available on `upstream's
|
||||
documentation
|
||||
<https://github.com/matrix-org/synapse/blob/master/docs/workers.md#available-worker-applications>`_.
|
||||
|
||||
port
|
||||
Port on which this worker will listen.
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
replication-host
|
||||
Replication endpoint host of your main synapse process. Defaults to
|
||||
localhost.
|
||||
|
||||
replication-port
|
||||
Replication endpoint port of your main synapse process. Defaults to 9093.
|
||||
|
||||
log-config
|
||||
Path to log configuration. Defaults to synapse's main process log
|
||||
configuration.
|
||||
|
||||
resource
|
||||
Resources to be served by this worker. Can be specified multiple times.
|
||||
Defaults to 'client' and 'federation'.
|
||||
|
||||
bind-address
|
||||
Address used to bind the synapse listeners. Can be specified multiple times.
|
||||
Defaults to '::1' and '127.0.0.1'.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
__matrix_synapse --server-name ungleich.ch \
|
||||
--base-url https://matrix.ungleich.ch \
|
||||
--database-engine sqlite3 \
|
||||
--database-name /var/lib/matrix-syanpse/homeserver.db \
|
||||
--worker-mode
|
||||
require="__matrix_synapse" __matrix_synapse_worker generic \
|
||||
--app 'synapse.app.generic_worker' \
|
||||
--port 8083 \
|
||||
--resource 'federation' \
|
||||
--resource 'client'
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- `cdist-type__matrix_synapse(7) <cdist-type__matrix_synapse.html>`_
|
||||
|
||||
|
||||
AUTHORS
|
||||
-------
|
||||
Timothée Floure <timothee.floure@ungleich.ch>
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2019-2021 Timothée Floure. You can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
68
type/__matrix_synapse_worker/manifest
Executable file
68
type/__matrix_synapse_worker/manifest
Executable file
|
@ -0,0 +1,68 @@
|
|||
#!/bin/sh
|
||||
|
||||
# TODO: check if matrix-synapse package is installed (fail if not - it's not
|
||||
# this type's job to install it).
|
||||
|
||||
name=$__object_id
|
||||
os=$(cat "$__global/explorer/os")
|
||||
|
||||
case "$os" in
|
||||
debian)
|
||||
synapse_conf_dir='/etc/matrix-synapse'
|
||||
synapse_workers_conf_dir="$synapse_conf_dir/workers"
|
||||
|
||||
# Synapse log configuration on debian - default value of config-log
|
||||
# parameter.
|
||||
WORKER_LOG_CONFIG="$synapse_conf_dir/log.yaml"
|
||||
|
||||
# As of writing, debian's matrix-synapse package does not install the
|
||||
# matrix-synapse-worker@.service systemd unit.
|
||||
systemd_worker_service_override=present
|
||||
systemd_worker_service="matrix-synapse-worker@$name"
|
||||
;;
|
||||
*)
|
||||
printf "Your operating system (%s) is currently not supported by this type (%s)\n" "$os" "${__type##*/}" >&2
|
||||
printf "Please contribute an implementation for it if you can.\n" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Type parameters.
|
||||
WORKER_NAME=$__object_id
|
||||
WORKER_APP=$(cat "$__object/parameter/app")
|
||||
WORKER_PORT=$(cat "$__object/parameter/port")
|
||||
WORKER_RESOURCES=$(cat "$__object/parameter/resource")
|
||||
WORKER_BIND_ADDRESSES=$(cat "$__object/parameter/bind-address")
|
||||
export WORKER_APP WORKER_NAME WORKER_PORT WORKER_RESOURCES WORKER_BIND_ADDRESSES
|
||||
|
||||
if [ -f "$__object/parameter/log-config" ]; then
|
||||
WORKER_LOG_CONFIG=$(cat "$__object/parameter/log-config")
|
||||
fi
|
||||
export WORKER_LOG_CONFIG
|
||||
|
||||
WORKER_REPLICATION_HOST=$(cat "$__object/parameter/replication-host")
|
||||
WORKER_REPLICATION_PORT=$(cat "$__object/parameter/replication-port")
|
||||
export WORKER_REPLICATION_HOST WORKER_REPLICATION_PORT
|
||||
|
||||
# Generate and deploy configuration files.
|
||||
mkdir -p "$__object/files"
|
||||
"$__type/files/worker.yaml.sh" > "$__object/files/worker.yaml"
|
||||
|
||||
__directory "$synapse_workers_conf_dir" --parents
|
||||
require="__directory/$synapse_workers_conf_dir" \
|
||||
__file "$synapse_workers_conf_dir/$name.yaml" \
|
||||
--source "$__object/files/worker.yaml" \
|
||||
--mode 0644
|
||||
|
||||
__file "/etc/systemd/system/matrix-synapse-worker@.service" \
|
||||
--source "$__type/files/matrix-synapse-worker@.service" \
|
||||
--mode 0644 \
|
||||
--state $systemd_worker_service_override
|
||||
|
||||
# Start service, enable at boot.
|
||||
service_req=
|
||||
if [ "$systemd_worker_service_override" ]; then
|
||||
service_req="__file/etc/systemd/system/matrix-synapse-worker@.service"
|
||||
fi
|
||||
require="__file/$synapse_workers_conf_dir/$name.yaml $service_req" \
|
||||
__start_on_boot "$systemd_worker_service"
|
|
@ -0,0 +1 @@
|
|||
::1 127.0.0.1
|
|
@ -0,0 +1 @@
|
|||
localhost
|
|
@ -0,0 +1 @@
|
|||
9093
|
1
type/__matrix_synapse_worker/parameter/default/resource
Normal file
1
type/__matrix_synapse_worker/parameter/default/resource
Normal file
|
@ -0,0 +1 @@
|
|||
client federation
|
3
type/__matrix_synapse_worker/parameter/optional
Normal file
3
type/__matrix_synapse_worker/parameter/optional
Normal file
|
@ -0,0 +1,3 @@
|
|||
replication-host
|
||||
replication-port
|
||||
log-config
|
2
type/__matrix_synapse_worker/parameter/optional_multiple
Normal file
2
type/__matrix_synapse_worker/parameter/optional_multiple
Normal file
|
@ -0,0 +1,2 @@
|
|||
resource
|
||||
bind-address
|
2
type/__matrix_synapse_worker/parameter/required
Normal file
2
type/__matrix_synapse_worker/parameter/required
Normal file
|
@ -0,0 +1,2 @@
|
|||
app
|
||||
port
|
Loading…
Reference in a new issue