Difference between revisions of "Matrix"
(→See also: Advanced Ansible playbook for deployment of many bridges) |
(→Docker installation: using compose) |
||
Line 2: | Line 2: | ||
== Docker installation == | == Docker installation == | ||
− | First generate a default configuration file for your domain as follows | + | First you'll need to configure your web-server as a reverse proxy from SSL ports 443 and 8448 to the internal non-SSL port 8008. This is the default Matrix port for unsecured HTTP traffic, so that a reverse proxy needs to be set up from your web-server to handle the HTTPS side of things on exposing the default Matrix HTTPS port of '''8448''' to the public that connects to the the internal HTTP port on 8008. Also there needs to be a connection from port '''443''', see the official [https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.md reverse proxy notes] for details about the reverse proxy setup. |
+ | |||
+ | We'll be using ''PostgreSQL'' instead of the default ''SQLite'' database, which means that we'll need to use ''docker-compose''. So first create a directory for the configuration and data and then put a ''docker-compose.yml'' file in it with the following content. | ||
+ | <source lang="yaml"> | ||
+ | version: '3' | ||
+ | services: | ||
+ | |||
+ | postgres: | ||
+ | restart: unless-stopped | ||
+ | image: postgres:9.6-alpine | ||
+ | environment: | ||
+ | - POSTGRES_USER=synapse | ||
+ | - POSTGRES_DB=synapse | ||
+ | networks: | ||
+ | - internal_network | ||
+ | volumes: | ||
+ | - ./data/postgres:/var/lib/postgresql/data | ||
+ | |||
+ | synapse: | ||
+ | image: matrixdotorg/synapse:latest | ||
+ | restart: unless-stopped | ||
+ | networks: | ||
+ | - external_network | ||
+ | - internal_network | ||
+ | ports: | ||
+ | - "127.0.0.1:8008:8008" | ||
+ | environment: | ||
+ | - SYNAPSE_SERVER_NAME=organicdesign.co.nz | ||
+ | - SYNAPSE_REPORT_STATS=no | ||
+ | depends_on: | ||
+ | - postgres | ||
+ | volumes: | ||
+ | - ./data/system:/data | ||
+ | |||
+ | networks: | ||
+ | external_network: | ||
+ | internal_network: | ||
+ | internal: true | ||
+ | </source> | ||
+ | |||
+ | |||
+ | Next, generate a default configuration file for your domain as follows. | ||
<source lang="bash"> | <source lang="bash"> | ||
− | docker run -it --rm - | + | docker run -it --rm -v "{!/FULL/PATH/TO/DIR!}/data/system:/data" -e SYNAPSE_SERVER_NAME=organicdesign.co.nz -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate |
</source> | </source> | ||
− | This will create a new volume with your persistent configuration file in it | + | This will create a new volume with your persistent configuration file in it called ''homeserver.yaml'' as well as some keys for your domain. |
− | + | ||
+ | Then start the container in the background. | ||
<source lang="bash"> | <source lang="bash"> | ||
− | docker | + | docker-compose up -d |
+ | </source> | ||
+ | |||
+ | |||
+ | Now we need to create a database with the correct encoding (we may need to drop an initially created one first). So first log in to the ''PostgreSQL'' database. | ||
+ | <source lang="bash"> | ||
+ | docker exec -it {!CONTAINER-ID!} psql -U synapse | ||
+ | </source> | ||
+ | |||
+ | |||
+ | Connect to the ''postgres'' database so you can drop ''synapse'', and then create a new ''synapse'' database with the correct encoding. | ||
+ | <source lang="pgsql"> | ||
+ | \connect postgres | ||
+ | DROP DATABASE synapse; | ||
+ | CREATE DATABASE synapse | ||
+ | ENCODING 'UTF8' | ||
+ | LC_COLLATE='C' | ||
+ | LC_CTYPE='C' | ||
+ | template=template0 | ||
+ | OWNER synapse; | ||
</source> | </source> | ||
− | |||
− | + | Then exit out of ''PostgreSQL'', restart the container and set up a user (check the logs to ensure its running): | |
<source lang="bash"> | <source lang="bash"> | ||
− | docker exec -it | + | docker-compose down |
+ | docker-compose up -d | ||
+ | docker exec -it {!CONTAINER_ID!} register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008 | ||
</source> | </source> | ||
Revision as of 22:48, 17 June 2020
Docker installation
First you'll need to configure your web-server as a reverse proxy from SSL ports 443 and 8448 to the internal non-SSL port 8008. This is the default Matrix port for unsecured HTTP traffic, so that a reverse proxy needs to be set up from your web-server to handle the HTTPS side of things on exposing the default Matrix HTTPS port of 8448 to the public that connects to the the internal HTTP port on 8008. Also there needs to be a connection from port 443, see the official reverse proxy notes for details about the reverse proxy setup.
We'll be using PostgreSQL instead of the default SQLite database, which means that we'll need to use docker-compose. So first create a directory for the configuration and data and then put a docker-compose.yml file in it with the following content.
version: '3'
services:
postgres:
restart: unless-stopped
image: postgres:9.6-alpine
environment:
- POSTGRES_USER=synapse
- POSTGRES_DB=synapse
networks:
- internal_network
volumes:
- ./data/postgres:/var/lib/postgresql/data
synapse:
image: matrixdotorg/synapse:latest
restart: unless-stopped
networks:
- external_network
- internal_network
ports:
- "127.0.0.1:8008:8008"
environment:
- SYNAPSE_SERVER_NAME=organicdesign.co.nz
- SYNAPSE_REPORT_STATS=no
depends_on:
- postgres
volumes:
- ./data/system:/data
networks:
external_network:
internal_network:
internal: true
Next, generate a default configuration file for your domain as follows.
docker run -it --rm -v "/FULL/PATH/TO/DIR/data/system:/data" -e SYNAPSE_SERVER_NAME=organicdesign.co.nz -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate
This will create a new volume with your persistent configuration file in it called homeserver.yaml as well as some keys for your domain.
Then start the container in the background.
docker-compose up -d
Now we need to create a database with the correct encoding (we may need to drop an initially created one first). So first log in to the PostgreSQL database.
docker exec -it CONTAINER-ID psql -U synapse
Connect to the postgres database so you can drop synapse, and then create a new synapse database with the correct encoding.
\connect postgres
DROP DATABASE synapse;
CREATE DATABASE synapse
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
template=template0
OWNER synapse;
Then exit out of PostgreSQL, restart the container and set up a user (check the logs to ensure its running):
docker-compose down
docker-compose up -d
docker exec -it CONTAINER_ID register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
Troubleshooting
Check https://YOURDOMAIN/_matrix/client/versions in a browser, it should respond with something like the following:
{
"versions": ["r0.0.1", "r0.1.0", "r0.2.0", "r0.3.0", "r0.4.0", "r0.5.0"],
"unstable_features": {
"m.id_access_token": true,
"m.require_identity_server": false,
"m.separate_add_and_bind": true,
"org.matrix.label_based_filtering": true,
"org.matrix.e2e_cross_signing": true,
"org.matrix.msc2432": true
}
}
And it should have the following CORS headers:
access-control-allow-headers Origin, X-Requested-With, Content-Type, Accept, Authorization
access-control-allow-methods GET, POST, PUT, DELETE, OPTIONS
access-control-allow-origin *