My friends are open to leaving Discord which has finally given me a reason to look into Element/Matrix. I found the install instructions and am immediately put off. Is this it? No official docker compose? 😞
I was scared off a couple years ago when I attempted to host it myself. I took a break from selfhosting, but now I’m back, and from what I learned in the past, I know now not to torture myself swimming upstream when there are far easier downstream currents to follow.
I’m looking at conduit but I’m currently writing up a doc to plan out the process, and understand it before I actually deploy anything. I don’t want to open ports, don’t need federation and don’t need encryption, since I’ll be using tailscale to host a private server to only members of my tailnet.
I’ll report back, either here or in the main community, because I don’t want to expose ports, rent a VPS or use ansible for a simple private server for less than 10 people.
Forget about synapse and the “official” method. Install Continuwuity a matrix server written in rust, much much more efficient than synapse.
I took some notes while installing it here https://wiki.gardiol.org/doku.php?id=matrix%3Aconduwuit
I didn’t use docker but directly installation is very easy, it’s a single executable.
I’ll look into it, thanks.
I’m still in the information gathering phase. Do you know if the element client works with the continuwuity server? Is it as easy as entering the domain, user, and password in the client?
Any client should be compatible with any server, if both are fairly up to date. Though, I never found a client nor server that are actually fully feature complete. The closest to that are synapse and element
Yes both element and elementx and actually any matrix client. That’s the beauty of having standards
But its a pain because all clients from matrix. Org will push you to matrix. Org and need manual taps&clicks to select a different server when you sign up the first time. A bit annoying IMHO and maybe even fraudolent.
You are recommending to follow your wiki article but it claims to not use it?
Note: Sadly, Conduwuit project has been abandoned by the current devs and archived. Conduwuit is deprecated, the following instructions are left for historical reference only, DO NOT FOLLOW.
Now I don’t know what to believe.
Yes need to fix that wording its a leftover, done.
They picked it up again?
Continuwuity was never discontinued, the note was for Conduwuit, I forgot to remove it after updated the article.
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
Fewer Letters More Letters CSAM Child Sexual Abuse Material Git Popular version control system, primarily for code HTTP Hypertext Transfer Protocol, the Web IP Internet Protocol LVM (Linux) Logical Volume Manager for filesystem mapping SSL Secure Sockets Layer, for transparent encryption TLS Transport Layer Security, supersedes SSL VPS Virtual Private Server (opposed to shared hosting) XMPP Extensible Messaging and Presence Protocol (‘Jabber’) for open instant messaging k8s Kubernetes container management package nginx Popular HTTP server
9 acronyms in this thread; the most compressed thread commented on today has 8 acronyms.
[Thread #85 for this comm, first seen 12th Feb 2026, 01:20] [FAQ] [Full list] [Contact] [Source code]
Helm is what is used for real world software deployments. It has its problems but it’s better than Docker Compose.
Out of curiosity, what makes it better?
A quick search says it’s a package manger for kubernetes. Besides plex, everything I selfhost is just for me. Would you say helm/kubernetes is worth looking into for a hobbyist who doesn’t work in the tech field?
Absolutely no. Kubernetes has it’s benefits and it can make sense to get into it for tinkering etc, but if you just want to set up matrix and not learn an entire new system, stay away from it.
If you’re proficient it’s 30minutes
Something like this for server.
generate config
docker run -it --rm \ -v <your-data-path>:/data \ -e SYNAPSE_SERVER_NAME=<your-public-address-subdomain> \ -e SYNAPSE_REPORT_STATS=no \ matrixdotorg/synapse:v1.136.0 generaterun
docker run -d \ --restart=always \ --name synapse \ -e SYNAPSE_REPORT_STATS=no \ -v <your-data-path>:/data \ -p 8008:8008 matrixdotorg/synapse:v1.136.0register user
docker exec -ti synapse register_new_matrix_user http://localhost:8008/ -c /data/homeserver.yaml -u <username> -p <password> --exists-okProxy it using ex. openresty / nginx
location / { proxy_pass http://127.0.0.1:8008/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $remote_addr; proxy_connect_timeout 600; proxy_read_timeout 86400; }For UI if you want element on your domain, download and unpack tar.gz from.
https://github.com/element-hq/element-web/releasesPoint this location to your proxy server ex. openresty / nginx
location / { root /opt/element-v1.11.109; index index.html; }Modify
config.jsoninside/opt/element-v1.11.109to point location to<your-public-address-subdomain>By default it’s using sqlite if you want postgres or other database then modify
homeserver.yamlto use postgresIf you like compose files: https://www.composerize.com/
docker run -it --rm -v <your-data-path>:/data -e SYNAPSE_SERVER_NAME=<your-public-address-subdomain> -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:v1.136.0 generate:name: <your project name> services: synapse: stdin_open: true tty: true volumes: - <your-data-path>:/data environment: - SYNAPSE_SERVER_NAME=<your-public-address-subdomain> - SYNAPSE_REPORT_STATS=no image: matrixdotorg/synapse:v1.136.0 command: generatedocker run -d --restart=always --name synapse -e SYNAPSE_REPORT_STATS=no -v <your-data-path>:/data -p 8008:8008 matrixdotorg/synapse:v1.136.0:name: <your project name> services: synapse: restart: always container_name: synapse environment: - SYNAPSE_REPORT_STATS=no volumes: - <your-data-path>:/data ports: - 8008:8008 image: matrixdotorg/synapse:v1.136.0I don’t like compose files :)
How do you manage your containers?
I have a git repo with some directory convention and bash scripts. Ex stop is just
#!/bin/bash name=synapse docker stop $name docker rm $nameetc. depending on what actions I need to do against container I have bash script for that and if I need to perform same action against other container I just copy paste this file and change name variable. I pull this repo to my containers host and just type ./bin/synapse/stop and I stop synapse.
Hope that makes sense.
Have you considered replace the name with input from stdin? So instead of
name=synapseyou could doname=$1and have one script to use for all containers.yeah but I don’t mind having duplicated scripts, it’s just easier to go to single script and don’t have to worry about everything else, I keep them like
bin/synapse/run,bin/synapse/stop,bin/synapse/logsetc. What I haven’t figured out is better way to keep all ports in one place instead ofports.mdfile but on the other hand it’s not like I have thousands of containers running.it’s not like I have thousands of containers running
I feel you. I have ~20 container files (some are multiple containers in one file, e.g. db and web server) and I seldom have to do changes to them. Once properly configured, I don’t really have to do anything.





