Skip to content
Snippets Groups Projects
SynapseWorkers.Dockerfile 2.68 KiB
Newer Older
  • Learn to ignore specific revisions
  • # This dockerfile builds on top of 'docker/Dockerfile-worker' in matrix-org/synapse
    # by including a built-in postgres instance, as well as setting up the homeserver so
    # that it is ready for testing via Complement.
    #
    # Instructions for building this image from those it depends on is detailed in this guide:
    # https://github.com/matrix-org/synapse/blob/develop/docker/README-testing.md#testing-with-postgresql-and-single-or-multi-process-synapse
    FROM matrixdotorg/synapse-workers
    
    # Download a caddy server to stand in front of nginx and terminate TLS using Complement's
    # custom CA.
    # We include this near the top of the file in order to cache the result.
    RUN curl -OL "https://github.com/caddyserver/caddy/releases/download/v2.3.0/caddy_2.3.0_linux_amd64.tar.gz" && \
      tar xzf caddy_2.3.0_linux_amd64.tar.gz && rm caddy_2.3.0_linux_amd64.tar.gz && mv caddy /root
    
    # Install postgresql
    RUN apt-get update
    RUN apt-get install -y postgresql
    
    # Configure a user and create a database for Synapse
    RUN pg_ctlcluster 13 main start &&  su postgres -c "echo \
     \"ALTER USER postgres PASSWORD 'somesecret'; \
     CREATE DATABASE synapse \
      ENCODING 'UTF8' \
      LC_COLLATE='C' \
      LC_CTYPE='C' \
      template=template0;\" | psql" && pg_ctlcluster 13 main stop
    
    # Modify the shared homeserver config with postgres support, certificate setup
    # and the disabling of rate-limiting
    COPY conf-workers/workers-shared.yaml /conf/workers/shared.yaml
    
    WORKDIR /data
    
    # Copy the caddy config
    COPY conf-workers/caddy.complement.json /root/caddy.json
    
    # Expose caddy's listener ports
    EXPOSE 8008 8448
    
    ENTRYPOINT \
      # Replace the server name in the caddy config
      sed -i "s/{{ server_name }}/${SERVER_NAME}/g" /root/caddy.json && \
      # Start postgres
      pg_ctlcluster 13 main start 2>&1 && \
      # Start caddy
      /root/caddy start --config /root/caddy.json 2>&1 && \
      # Set the server name of the homeserver
      SYNAPSE_SERVER_NAME=${SERVER_NAME} \
      # No need to report stats here
      SYNAPSE_REPORT_STATS=no \
      # Set postgres authentication details which will be placed in the homeserver config file
      POSTGRES_PASSWORD=somesecret POSTGRES_USER=postgres POSTGRES_HOST=localhost \
      # Specify the workers to test with
      SYNAPSE_WORKER_TYPES="\
        event_persister, \
        event_persister, \
        background_worker, \
        frontend_proxy, \
        event_creator, \
        user_dir, \
        media_repository, \
        federation_inbound, \
        federation_reader, \
        federation_sender, \
        synchrotron, \
        appservice, \
        pusher" \
      # Run the script that writes the necessary config files and starts supervisord, which in turn
      # starts everything else
      /configure_workers_and_start.py
    
    HEALTHCHECK --start-period=5s --interval=1s --timeout=1s \
        CMD /bin/sh /healthcheck.sh