-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Neilj/improved delegation doc 2 #4832
Changes from 13 commits
974602a
5913669
aeda2d9
2492c1f
0f22464
1711246
062d303
19bf247
95a9dc6
d040ca1
8497958
0f2af37
400fc11
ac94d9e
94615c5
7dc5d82
e5b5ab7
c622e47
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -71,7 +71,8 @@ set this to the hostname of your server. For a more production-ready setup, you | |
will probably want to specify your domain (`example.com`) rather than a | ||
matrix-specific hostname here (in the same way that your email address is | ||
probably `[email protected]` rather than `[email protected]`) - but | ||
doing so may require more advanced setup. - see [Setting up Federation](README.rst#setting-up-federation). Beware that the server name cannot be changed later. | ||
doing so may require more advanced setup: see [Setting up Federation](docs/federate.md). | ||
Beware that the server name cannot be changed later. | ||
|
||
This command will generate you a config file that you can then customise, but it will | ||
also generate a set of keys for you. These keys will allow your Home Server to | ||
|
@@ -348,6 +349,26 @@ https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/misc/matrix- | |
|
||
Once you have installed synapse as above, you will need to configure it. | ||
|
||
|
||
## Setting your server_name | ||
|
||
Note that you can NOT change the ``server_name`` after the database | ||
is first created. So choose your ``server_name`` with care. | ||
|
||
You can configure your homeserver to use ``<yourdomain.com>`` as the domain in | ||
its user-ids, by setting ``server_name`` on the command line: | ||
|
||
python -m synapse.app.homeserver \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is only valid when installing from source - the packaged installations generally have different ways of doing things. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed, deleted |
||
--server-name <yourdomain.com> \ | ||
--config-path homeserver.yaml \ | ||
--generate-config | ||
python -m synapse.app.homeserver --config-path homeserver.yaml | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you almost certainly don't want to do this here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Deleted |
||
|
||
If you've already generated the config file, you need to edit the ``server_name`` | ||
in your configuration file (often ``homeserver.yaml`` file). If you have | ||
already started Synapse and a database has been created, you will need to | ||
recreate the database. | ||
|
||
## TLS certificates | ||
|
||
The default configuration exposes a single HTTP port: http://localhost:8008. It | ||
|
@@ -375,9 +396,12 @@ To configure Synapse to expose an HTTPS port, you will need to edit | |
`tls_private_key_path` lines under the `TLS` section. You can either | ||
point these settings at an existing certificate and key, or you can | ||
enable Synapse's built-in ACME (Let's Encrypt) support. Instructions | ||
for having Synapse automatically provision and renew federation | ||
for having Synapse automatically provision and renew federation | ||
certificates through ACME can be found at [ACME.md](docs/ACME.md). | ||
|
||
For those of you upgrading your TLS certificate in readiness for Synapse 1.0, | ||
please take a look at `our guide <docs/MSC1711_certificates_FAQ.md#configuring-certificates-for-compatibility-with-synapse-100>`_. | ||
|
||
## Registering a user | ||
|
||
You will need at least one user on your server in order to use a Matrix | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -80,7 +80,8 @@ Thanks for using Matrix! | |
Synapse Installation | ||
==================== | ||
|
||
For details on how to install synapse, see `<INSTALL.md>`_. | ||
* For details on how to install synapse, see `<INSTALL.md>`_. | ||
* For specific details on how to configure Synapse for federation see `docs/federate.md <docs/federate.md>`_ | ||
|
||
|
||
Connecting to Synapse from a client | ||
|
@@ -93,13 +94,13 @@ Unless you are running a test instance of Synapse on your local machine, in | |
general, you will need to enable TLS support before you can successfully | ||
connect from a client: see `<INSTALL.md#tls-certificates>`_. | ||
|
||
An easy way to get started is to login or register via Riot at | ||
https://riot.im/app/#/login or https://riot.im/app/#/register respectively. | ||
An easy way to get started is to login or register via Riot at | ||
https://riot.im/app/#/login or https://riot.im/app/#/register respectively. | ||
You will need to change the server you are logging into from ``matrix.org`` | ||
and instead specify a Homeserver URL of ``https://<server_name>:8448`` | ||
(or just ``https://<server_name>`` if you are using a reverse proxy). | ||
(Leave the identity server as the default - see `Identity servers`_.) | ||
If you prefer to use another client, refer to our | ||
and instead specify a Homeserver URL of ``https://<server_name>:8448`` | ||
(or just ``https://<server_name>`` if you are using a reverse proxy). | ||
(Leave the identity server as the default - see `Identity servers`_.) | ||
If you prefer to use another client, refer to our | ||
`client breakdown <https://matrix.org/docs/projects/clients-matrix>`_. | ||
|
||
If all goes well you should at least be able to log in, create a room, and | ||
|
@@ -151,56 +152,6 @@ server on the same domain. | |
See https://github.com/vector-im/riot-web/issues/1977 and | ||
https://developer.github.com/changes/2014-04-25-user-content-security for more details. | ||
|
||
Troubleshooting | ||
=============== | ||
|
||
Running out of File Handles | ||
--------------------------- | ||
|
||
If synapse runs out of filehandles, it typically fails badly - live-locking | ||
at 100% CPU, and/or failing to accept new TCP connections (blocking the | ||
connecting client). Matrix currently can legitimately use a lot of file handles, | ||
thanks to busy rooms like #matrix:matrix.org containing hundreds of participating | ||
servers. The first time a server talks in a room it will try to connect | ||
simultaneously to all participating servers, which could exhaust the available | ||
file descriptors between DNS queries & HTTPS sockets, especially if DNS is slow | ||
to respond. (We need to improve the routing algorithm used to be better than | ||
full mesh, but as of June 2017 this hasn't happened yet). | ||
|
||
If you hit this failure mode, we recommend increasing the maximum number of | ||
open file handles to be at least 4096 (assuming a default of 1024 or 256). | ||
This is typically done by editing ``/etc/security/limits.conf`` | ||
|
||
Separately, Synapse may leak file handles if inbound HTTP requests get stuck | ||
during processing - e.g. blocked behind a lock or talking to a remote server etc. | ||
This is best diagnosed by matching up the 'Received request' and 'Processed request' | ||
log lines and looking for any 'Processed request' lines which take more than | ||
a few seconds to execute. Please let us know at #synapse:matrix.org if | ||
you see this failure mode so we can help debug it, however. | ||
|
||
Help!! Synapse eats all my RAM! | ||
------------------------------- | ||
|
||
Synapse's architecture is quite RAM hungry currently - we deliberately | ||
cache a lot of recent room data and metadata in RAM in order to speed up | ||
common requests. We'll improve this in future, but for now the easiest | ||
way to either reduce the RAM usage (at the risk of slowing things down) | ||
is to set the almost-undocumented ``SYNAPSE_CACHE_FACTOR`` environment | ||
variable. The default is 0.5, which can be decreased to reduce RAM usage | ||
in memory constrained enviroments, or increased if performance starts to | ||
degrade. | ||
|
||
Using `libjemalloc <http://jemalloc.net/>`_ can also yield a significant | ||
improvement in overall amount, and especially in terms of giving back RAM | ||
to the OS. To use it, the library must simply be put in the LD_PRELOAD | ||
environment variable when launching Synapse. On Debian, this can be done | ||
by installing the ``libjemalloc1`` package and adding this line to | ||
``/etc/default/matrix-synapse``:: | ||
|
||
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1 | ||
|
||
This can make a significant difference on Python 2.7 - it's unclear how | ||
much of an improvement it provides on Python 3.x. | ||
|
||
Upgrading an existing Synapse | ||
============================= | ||
|
@@ -211,100 +162,19 @@ versions of synapse. | |
|
||
.. _UPGRADE.rst: UPGRADE.rst | ||
|
||
.. _federation: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've a suspicion this anchor will be used somewhere. It would probably be a good idea to keep it (maybe at the "installation" section). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nods There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I can't see where you've moved this to? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. oversight, added back in. |
||
|
||
Setting up Federation | ||
===================== | ||
|
||
Federation is the process by which users on different servers can participate | ||
in the same room. For this to work, those other servers must be able to contact | ||
yours to send messages. | ||
|
||
The ``server_name`` in your ``homeserver.yaml`` file determines the way that | ||
other servers will reach yours. By default, they will treat it as a hostname | ||
and try to connect to port 8448. This is easy to set up and will work with the | ||
default configuration, provided you set the ``server_name`` to match your | ||
machine's public DNS hostname, and give Synapse a TLS certificate which is | ||
valid for your ``server_name``. | ||
|
||
For a more flexible configuration, you can set up a DNS SRV record. This allows | ||
you to run your server on a machine that might not have the same name as your | ||
domain name. For example, you might want to run your server at | ||
``synapse.example.com``, but have your Matrix user-ids look like | ||
``@user:example.com``. (A SRV record also allows you to change the port from | ||
the default 8448). | ||
|
||
To use a SRV record, first create your SRV record and publish it in DNS. This | ||
should have the format ``_matrix._tcp.<yourdomain.com> <ttl> IN SRV 10 0 <port> | ||
<synapse.server.name>``. The DNS record should then look something like:: | ||
|
||
$ dig -t srv _matrix._tcp.example.com | ||
_matrix._tcp.example.com. 3600 IN SRV 10 0 8448 synapse.example.com. | ||
|
||
Note that the server hostname cannot be an alias (CNAME record): it has to point | ||
directly to the server hosting the synapse instance. | ||
|
||
You can then configure your homeserver to use ``<yourdomain.com>`` as the domain in | ||
its user-ids, by setting ``server_name``:: | ||
|
||
python -m synapse.app.homeserver \ | ||
--server-name <yourdomain.com> \ | ||
--config-path homeserver.yaml \ | ||
--generate-config | ||
python -m synapse.app.homeserver --config-path homeserver.yaml | ||
|
||
If you've already generated the config file, you need to edit the ``server_name`` | ||
in your ``homeserver.yaml`` file. If you've already started Synapse and a | ||
database has been created, you will have to recreate the database. | ||
|
||
If all goes well, you should be able to `connect to your server with a client`__, | ||
and then join a room via federation. (Try ``#matrix-dev:matrix.org`` as a first | ||
step. "Matrix HQ"'s sheer size and activity level tends to make even the | ||
largest boxes pause for thought.) | ||
|
||
.. __: `Connecting to Synapse from a client`_ | ||
|
||
Troubleshooting | ||
--------------- | ||
|
||
You can use the `federation tester <https://matrix.org/federationtester>`_ to | ||
check if your homeserver is all set. | ||
|
||
The typical failure mode with federation is that when you try to join a room, | ||
it is rejected with "401: Unauthorized". Generally this means that other | ||
servers in the room couldn't access yours. (Joining a room over federation is a | ||
complicated dance which requires connections in both directions). | ||
|
||
So, things to check are: | ||
|
||
* If you are not using a SRV record, check that your ``server_name`` (the part | ||
of your user-id after the ``:``) matches your hostname, and that port 8448 on | ||
that hostname is reachable from outside your network. | ||
* If you *are* using a SRV record, check that it matches your ``server_name`` | ||
(it should be ``_matrix._tcp.<server_name>``), and that the port and hostname | ||
it specifies are reachable from outside your network. | ||
|
||
Another common problem is that people on other servers can't join rooms that | ||
you invite them to. This can be caused by an incorrectly-configured reverse | ||
proxy: see `<docs/reverse_proxy.rst>`_ for instructions on how to correctly | ||
configure a reverse proxy. | ||
|
||
Running a Demo Federation of Synapses | ||
------------------------------------- | ||
|
||
If you want to get up and running quickly with a trio of homeservers in a | ||
private federation, there is a script in the ``demo`` directory. This is mainly | ||
useful just for development purposes. See `<demo/README>`_. | ||
|
||
|
||
Using PostgreSQL | ||
================ | ||
|
||
As of Synapse 0.9, `PostgreSQL <https://www.postgresql.org>`_ is supported as an | ||
alternative to the `SQLite <https://sqlite.org/>`_ database that Synapse has | ||
traditionally used for convenience and simplicity. | ||
Synapse offers two database engines: | ||
* `SQLite <https://sqlite.org/>`_ | ||
* `PostgreSQL <https://www.postgresql.org>`_ | ||
|
||
By default Synapse uses SQLite in and doing so trades performance for convenience. | ||
SQLite is only recommended in Synapse for testing purposes or for servers with | ||
light workloads. | ||
|
||
The advantages of Postgres include: | ||
Almost all installations should opt to use PostreSQL. Advantages include: | ||
|
||
* significant performance improvements due to the superior threading and | ||
caching model, smarter query optimiser | ||
|
@@ -440,3 +310,54 @@ sphinxcontrib-napoleon:: | |
Building internal API documentation:: | ||
|
||
python setup.py build_sphinx | ||
|
||
Troubleshooting | ||
=============== | ||
|
||
Running out of File Handles | ||
--------------------------- | ||
|
||
If synapse runs out of file handles, it typically fails badly - live-locking | ||
at 100% CPU, and/or failing to accept new TCP connections (blocking the | ||
connecting client). Matrix currently can legitimately use a lot of file handles, | ||
thanks to busy rooms like #matrix:matrix.org containing hundreds of participating | ||
servers. The first time a server talks in a room it will try to connect | ||
simultaneously to all participating servers, which could exhaust the available | ||
file descriptors between DNS queries & HTTPS sockets, especially if DNS is slow | ||
to respond. (We need to improve the routing algorithm used to be better than | ||
full mesh, but as of March 2019 this hasn't happened yet). | ||
|
||
If you hit this failure mode, we recommend increasing the maximum number of | ||
open file handles to be at least 4096 (assuming a default of 1024 or 256). | ||
This is typically done by editing ``/etc/security/limits.conf`` | ||
|
||
Separately, Synapse may leak file handles if inbound HTTP requests get stuck | ||
during processing - e.g. blocked behind a lock or talking to a remote server etc. | ||
This is best diagnosed by matching up the 'Received request' and 'Processed request' | ||
log lines and looking for any 'Processed request' lines which take more than | ||
a few seconds to execute. Please let us know at #synapse:matrix.org if | ||
you see this failure mode so we can help debug it, however. | ||
|
||
Help!! Synapse eats all my RAM! | ||
------------------------------- | ||
|
||
Synapse's architecture is quite RAM hungry currently - we deliberately | ||
cache a lot of recent room data and metadata in RAM in order to speed up | ||
common requests. We'll improve this in the future, but for now the easiest | ||
way to either reduce the RAM usage (at the risk of slowing things down) | ||
is to set the almost-undocumented ``SYNAPSE_CACHE_FACTOR`` environment | ||
variable. The default is 0.5, which can be decreased to reduce RAM usage | ||
in memory constrained enviroments, or increased if performance starts to | ||
degrade. | ||
|
||
Using `libjemalloc <http://jemalloc.net/>`_ can also yield a significant | ||
improvement in overall amount, and especially in terms of giving back RAM | ||
to the OS. To use it, the library must simply be put in the LD_PRELOAD | ||
environment variable when launching Synapse. On Debian, this can be done | ||
by installing the ``libjemalloc1`` package and adding this line to | ||
``/etc/default/matrix-synapse``:: | ||
|
||
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1 | ||
|
||
This can make a significant difference on Python 2.7 - it's unclear how | ||
much of an improvement it provides on Python 3.x. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Improve federation documentation, specifically .well-known support. Many thanks to @vaab. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The instructions above talk about generating the config and setting the server_name, so this is too late.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
basically it feels like this section isn't adding anything here. One idea would be to have a section which explains what the server_name does, but instructions here on how you change this one configuration option don't seem to be very helpful.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed, it shouldn't be here - have deleted since it doesn't add much over the config at the beginning of the file