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? 😞

you are viewing a single comment's thread
view the rest of the comments
[–] 7 points 7 months ago* (last edited 7 months ago) (7 children)

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 generate

run

docker run -d \
  --restart=always \
  --name synapse \
  -e SYNAPSE_REPORT_STATS=no \
  -v <your-data-path>:/data \
  -p 8008:8008 matrixdotorg/synapse:v1.136.0

register user

docker exec -ti synapse register_new_matrix_user http://localhost:8008/ -c /data/homeserver.yaml -u <username> -p <password> --exists-ok

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.
https://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.json inside /opt/element-v1.11.109 to point location to <your-public-address-subdomain>

By default it's using sqlite if you want postgres or other database then modify homeserver.yaml to use postgres

  • source
  • hideshow 7 child comments
  • [–] 8 points 7 months ago (6 children)

    If 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: generate
    

    docker 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.0
    
    
  • source
  • parent
  • hideshow 6 child comments
  • [–] 2 points 7 months ago (5 children)

    I don't like compose files :)

  • source
  • parent
  • hideshow 5 child comments
  • [–] 1 point 7 months ago (4 children)

    How do you manage your containers?

  • source
  • parent
  • hideshow 4 child comments
  • [–] 1 point 7 months ago* (3 children)

    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 $name
    

    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.

  • source
  • parent
  • hideshow 3 child comments
  • [–] 1 point 6 months ago (2 children)

    Have you considered replace the name with input from stdin? So instead of name=synapse you could do name=$1 and have one script to use for all containers.

  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 6 months ago (1 child)

    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/logs etc. What I haven't figured out is better way to keep all ports in one place instead of ports.md file but on the other hand it's not like I have thousands of containers running.

  • source
  • parent
  • hideshow 1 child comment
  • 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.

  • source
  • parent