Element/Matrix Official Docker Install Method?
from a_fancy_kiwi@lemmy.world to selfhosted@lemmy.world on 11 Feb 12:50
https://lemmy.world/post/43025075
from a_fancy_kiwi@lemmy.world to selfhosted@lemmy.world on 11 Feb 12:50
https://lemmy.world/post/43025075
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? 😞
threaded - newest
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.
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
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]
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
register user
Proxy 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.
github.com/element-hq/element-web/releases
Point 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: 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
etc. 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.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.