# conduwuit - Behind Traefik Reverse Proxy
version: '2.4' # uses '2.4' for cpuset

services:
    homeserver:
        ### If you already built the conduwuit image with 'docker build' or want to use the Docker Hub image,
        ### then you are ready to go.
        image: girlbossceo/conduwuit:latest
        restart: unless-stopped
        volumes:
            - db:/srv/conduwuit/.local/share/conduwuit
            #- ./conduwuit.toml:/etc/conduwuit.toml
        networks:
            - proxy
        environment:
            CONDUWUIT_SERVER_NAME: your.server.name # EDIT THIS
            CONDUWUIT_TRUSTED_SERVERS: '["matrix.org"]'
            CONDUWUIT_ALLOW_REGISTRATION : 'true'
            #CONDUWUIT_CONFIG: './conduwuit.toml' # Uncomment if you mapped config toml above
            ### Uncomment and change values as desired
            # CONDUWUIT_ADDRESS: 0.0.0.0
            # CONDUWUIT_PORT: 6167
            # CONDUWUIT_LOG: info  # default is: "warn,state_res=warn"
            # CONDUWUIT_ALLOW_JAEGER: 'false'
            # CONDUWUIT_ALLOW_ENCRYPTION: 'true'
            # CONDUWUIT_ALLOW_FEDERATION: 'true'
            # CONDUWUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
            # CONDUWUIT_DATABASE_PATH: /srv/conduwuit/.local/share/conduwuit
            # CONDUWUIT_WORKERS: 10
            # CONDUWUIT_MAX_REQUEST_SIZE: 20000000  # in bytes, ~20 MB
        #cpuset: "0-4" # Uncomment to limit to specific CPU cores

    # We need some way to server the client and server .well-known json. The simplest way is to use a nginx container
    # to serve those two as static files. If you want to use a different way, delete or comment the below service, here
    # and in the docker compose override file.
    well-known:
        image: nginx:latest
        restart: unless-stopped
        volumes:
            - ./nginx/matrix.conf:/etc/nginx/conf.d/matrix.conf # the config to serve the .well-known/matrix files
            - ./nginx/www:/var/www/ # location of the client and server .well-known-files

    ### Uncomment if you want to use your own Element-Web App.
    ### Note: You need to provide a config.json for Element and you also need a second
    ###       Domain or Subdomain for the communication between Element and conduwuit
    ### Config-Docs: https://github.com/vector-im/element-web/blob/develop/docs/config.md
    # element-web:
    #     image: vectorim/element-web:latest
    #     restart: unless-stopped
    #     volumes:
    #         - ./element_config.json:/app/config.json
    #     networks:
    #         - proxy
    #     depends_on:
    #         - homeserver

    traefik:
        image: "traefik:latest"
        container_name: "traefik"
        restart: "unless-stopped"
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
            # - "./traefik_config:/etc/traefik"
            - "acme:/etc/traefik/acme"
        labels:
            - "traefik.enable=true"

            # middleware redirect
            - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
            # global redirect to https
            - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
            - "traefik.http.routers.redirs.entrypoints=http"
            - "traefik.http.routers.redirs.middlewares=redirect-to-https"

        networks:
            - proxy

volumes:
    db:
    acme:

networks:
    proxy: