mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-06 07:37:21 +02:00
Created Synapse (Matrix) in Docker with federation support for Zoraxy (markdown)
parent
a9372dbaf7
commit
8532975ea9
171
Synapse-(Matrix)-in-Docker-with-federation-support-for-Zoraxy.md
Normal file
171
Synapse-(Matrix)-in-Docker-with-federation-support-for-Zoraxy.md
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
Matrix is a good chatserver, so I like to show you how it works with Zoraxy as reverse proxy.
|
||||||
|
|
||||||
|
I assume Matrix is already running in docker with docker compose and you want to switch over to Zoraxy installed on your hostsystem. We will use a little workaround and use NGINX on the hostsystem.
|
||||||
|
|
||||||
|
Stop the container with `docker compose down`
|
||||||
|
|
||||||
|
Your docker-compose.yml looks something like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
`version: '3'
|
||||||
|
`services:`
|
||||||
|
`synapse:`
|
||||||
|
`image: matrixdotorg/synapse:latest`
|
||||||
|
`restart: unless-stopped`
|
||||||
|
`ports:`
|
||||||
|
`- "8008:8008"`
|
||||||
|
`environment:`
|
||||||
|
`- TZ=Europe/Berlin`
|
||||||
|
`volumes:`
|
||||||
|
`- ./files:/data`
|
||||||
|
`healthcheck:`
|
||||||
|
`test: ["CMD", "curl", "-fSs", "http://localhost:8008/health"]`
|
||||||
|
`interval: 15s`
|
||||||
|
`timeout: 5s`
|
||||||
|
`retries: 3`
|
||||||
|
`start_period: 5s`
|
||||||
|
|
||||||
|
`db:`
|
||||||
|
`image: postgres:15-alpine`
|
||||||
|
`container_name: matrix-db`
|
||||||
|
`restart: unless-stopped`
|
||||||
|
`volumes:`
|
||||||
|
`- ./schemas:/var/lib/postgresql/data`
|
||||||
|
`environment:`
|
||||||
|
`- POSTGRES_DB=synapse`
|
||||||
|
`- POSTGRES_USER=synapse`
|
||||||
|
`- POSTGRES_PASSWORD=changeme`
|
||||||
|
`- POSTGRES_INITDB_ARGS= --encoding='UTF8' --lc-collate='C' --lc-ctype='C'
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
We will now create a new docker network and set a static IP to the synapse container. This is needed, since we can not use docker hostnames, because Zoraxy is outside the container.
|
||||||
|
|
||||||
|
If you just use the current IP from the container Synapse will be offline, if you do `docker compose down` and `docker compose up -d` again.
|
||||||
|
|
||||||
|
First let us create the network with:
|
||||||
|
|
||||||
|
`docker network create --subnet=172.40.0.0/16 staticnet`
|
||||||
|
|
||||||
|
If it is successfull it will give you a long output like "2cabe0428cb514e3e3d8e49d358df0930f519b8a80a39886dd8c8cae4fd6cfa1", if it fails with "Error response from daemon: Pool overlaps with other one on this address space", then increase the number 40 to 41, 42 etc.. in the subnet parameter. Now we have a new network named "staticnet".
|
||||||
|
|
||||||
|
Next step is to integrate this network in the docker-compose.
|
||||||
|
|
||||||
|
`nano docker-compose.yml`
|
||||||
|
|
||||||
|
Paste the following lines into your file and comment out the ports of synapse (they are not needed anymore):
|
||||||
|
|
||||||
|
```
|
||||||
|
###This needs to be integrated in the synapse container###
|
||||||
|
networks:
|
||||||
|
staticnet:
|
||||||
|
ipv4_address: 172.40.0.2
|
||||||
|
|
||||||
|
###Those lines at the END of your file###
|
||||||
|
networks:
|
||||||
|
staticnet:
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Your file should now look similar to this:
|
||||||
|
```
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
synapse:
|
||||||
|
image: matrixdotorg/synapse:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
# ports:
|
||||||
|
# - "8008:8008"
|
||||||
|
networks:
|
||||||
|
staticnet:
|
||||||
|
ipv4_address: 172.40.0.2
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
volumes:
|
||||||
|
- ./files:/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-fSs", "http://localhost:8008/health"]
|
||||||
|
interval: 15s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 3
|
||||||
|
start_period: 5s
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:15-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./schemas:/var/lib/postgresql/data
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=synapse
|
||||||
|
- POSTGRES_USER=synapse
|
||||||
|
- POSTGRES_PASSWORD=changeme
|
||||||
|
- POSTGRES_INITDB_ARGS= --encoding='UTF8' --lc-collate='C' --lc-ctype='C'
|
||||||
|
|
||||||
|
networks:
|
||||||
|
staticnet:
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
Save with CTRL + O and close with CTRL + X
|
||||||
|
|
||||||
|
|
||||||
|
We have now successfully set a static IP to Synapse. This works for other conatiners too. You only need to increase the last number 172.40.0.2 to 172.40.0.3, 172.40.0.4 and so on...
|
||||||
|
|
||||||
|
Next step is to install nginx on the host system and stop it afterwards so it won´t interfere with other services.
|
||||||
|
|
||||||
|
`sudo apt install nginx && sudo systemctl stop nginx`
|
||||||
|
|
||||||
|
Let´s create a vHost for Synapse now:
|
||||||
|
|
||||||
|
`sudo nano /etc/nginx/sites-available/matrix`
|
||||||
|
|
||||||
|
Paste these lines inside the new file and ONLY modify MATRIX.YOUR.DOMAIN to your actual domain. It is needed 3 times. Keep the portnumber at the last one (:443)!
|
||||||
|
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
listen 8200;
|
||||||
|
listen [::]:8200;
|
||||||
|
server_name MATRIX.YOUR.DOMAIN;
|
||||||
|
|
||||||
|
location ~ ^(/_matrix|/_synapse/client) {
|
||||||
|
# note: do not add a path (even a single /) after the port in `proxy_pass`,
|
||||||
|
# otherwise nginx will canonicalise the URI and cause signature verification
|
||||||
|
# errors.
|
||||||
|
proxy_pass http://172.40.0.2:8008;
|
||||||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /.well-known/matrix/client {
|
||||||
|
return 200 '{\"m.homeserver\": {\"base_url\": \"https://MATRIX.YOUR.DOMAIN\"}}';
|
||||||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
client_max_body_size 50M;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /.well-known/matrix/server {
|
||||||
|
return 200 '{\"m.server\": \"MATRIX.YOUR.DOMAIN:443\"}';
|
||||||
|
}
|
||||||
|
|
||||||
|
# Synapse responses may be chunked, which is an HTTP/1.1 feature.
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Save with CTRL + O and close with CTRL + X
|
||||||
|
|
||||||
|
|
||||||
|
Now activate the vHost and start Nginx again:
|
||||||
|
|
||||||
|
`sudo ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/matrix && sudo systemctl start nginx`
|
||||||
|
|
||||||
|
|
||||||
|
Now Nginx listens for Synapse on port 8200. It proxies the traffic inside the container (that´s why we needed the static IP) to port 8008 INSIDE the container. You don´t need portmappings with the static IP, this is why we commented it out.
|
||||||
|
|
||||||
|
In Zoraxy you can set your Matrix (sub)domain to localhost:8200
|
||||||
|
|
||||||
|
You do not need to open the port 8200 in your firewall!
|
||||||
|
I wanted originally to integrate nginx to the docker-compose.yml but it did not work as I expected, so it is better to have nginx on the hostsystem.
|
Loading…
x
Reference in New Issue
Block a user