# compose-matrix Matrix Stack bestehend aus Matrix Server "Synapse" sowie dem Frontend "Element". ## Inital setup 1. Copy env file: `cp env.sample .env` 2. Edit env file: `nano .env` 1. Basedir: Full path to dir with compose file (important for swarm shares) 2. Versionnumbers 3. DB settings 4. Domain! (no default) 2. Genreate inital config for synapse: 1. `source .env` 2. `docker run -it --rm --env-file .env -v ${BASEDIR:-.}/files/synapse:/data -e SYNAPSE_SERVER_NAME=$DOMAIN -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate` - This generate certs and basic inital config (homeserver.yml) for $DOMAIN only for first setup needed Postgress by default not in use! Default DB is SQLite. 3. (optional) Set db in config: `nano ${BASEDIR:-.}/files/synapse/homeserver.yaml` 4. Edit element config: `nano files/element-config.json` 1. set "default_server_name" to your domain for Synapse - must be manually add in first indention from json, was removed from newer versions (?) ```json { "default_server_name": "ao-it.net", "default_server_config": { "m.homeserver": { "base_url": "https://ao-it.net", "server_name": "matrix.org" }, ... ``` - is need for correct display by registration (else it will display "matrix.org" even if the correct server is addressed in the backend) 2. set "m.homeserver" => "base_url" to your domain for Element ($DOMAIN variable) - the backend server for synapse 3. Hint: by default connection to main servers of matrix.org is enabled 4. Hint: by default jitsi (cloud!) is uses for **group** videocalls - > [^jitsi]: 1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those calls work directly between clients or via TURN servers configured on the respective homeservers. - Hint: Jisi can be selfhost (no templace exist atm) 5. Run stack `docker compose up` ## howto ### enable registration 1. edit `homeserver.yaml` 1. set "enable_registration" to "True" 2. set "enable_registration_without_verification" to "True" # note: maybe not comming soon.. For disable ... well you know, set "enable_registration" to "False" ### create user via cli 1. Import .env or set $DOMAIN manually 2. Set env $USERNAME and $USERPASS oder replace it directly ``` source .env docker exec -it matrix_app_1 register_new_matrix_user -u $USERNAME -p $USERPASS -a -c /data/homeserver.yaml $DOMAIN ``` ### caddy config #### synapse ``` synapse.example.com { reverse_proxy /_matrix/* $IPOFDOCKERHOST:8008 reverse_proxy /_synapse/client/* $IPOFDOCKERHOST:8008 header { X-Content-Type-Options nosniff Referrer-Policy strict-origin-when-cross-origin Strict-Transport-Security "max-age=63072000; includeSubDomains;" Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), interest-cohort=()" X-Frame-Options SAMEORIGIN X-XSS-Protection 1 X-Robots-Tag none -server } } ``` #### element ``` element.example.com { encode zstd gzip reverse_proxy $IPOFDOCKERHOST:8080 header { X-Content-Type-Options nosniff Referrer-Policy strict-origin-when-cross-origin Strict-Transport-Security "max-age=63072000; includeSubDomains;" Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), interest-cohort=()" X-Frame-Options SAMEORIGIN X-XSS-Protection 1 X-Robots-Tag none -server } } ``` ## todo - setup script to auto edits - db in homeserver.yml - domain in config.json (element) ## sources - https://docs.docker.com/reference/cli/docker/container/run/ - https://adfinis.com/en/blog/how-to-set-up-your-own-matrix-org-homeserver-with-federation/ - https://zerowidthjoiner.net/2020/03/20/setting-up-matrix-and-riot-with-docker - https://linuxhandbook.com/install-matrix-synapse-docker/ - https://cyberhost.uk/element-matrix-setup/ - https://raw.githubusercontent.com/vector-im/element-web/v1.5.13/config.sample.json - https://github.com/element-hq/element-web/blob/develop/docs/jitsi.md [^jitsi]: https://github.com/element-hq/element-web/blob/develop/docs/jitsi.md