From 76fea49291fc4f84d50d45c9a872fd7d885aeaab Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 20 May 2020 17:13:21 +0100 Subject: [PATCH] Working polylith setup and build tools --- docker/hub/Dockerfile.clientapi | 11 +-- docker/hub/Dockerfile.clientproxy | 7 +- docker/hub/Dockerfile.eduserver | 11 +-- docker/hub/Dockerfile.federationapi | 13 +-- docker/hub/Dockerfile.federationproxy | 11 +-- docker/hub/Dockerfile.federationsender | 11 +-- docker/hub/Dockerfile.keyserver | 13 +++ docker/hub/Dockerfile.mediaapi | 14 +++ docker/hub/Dockerfile.monolith | 11 +-- docker/hub/Dockerfile.publicroomsapi | 13 +++ docker/hub/Dockerfile.roomserver | 13 +++ docker/hub/Dockerfile.syncapi | 13 +++ docker/hub/build.sh | 12 +++ docker/hub/docker-compose.deps.yml | 38 ++++++++ docker/hub/docker-compose.monolith.yml | 18 ++++ docker/hub/docker-compose.polylith.yml | 118 +++++++++++++++++++++++++ 16 files changed, 292 insertions(+), 35 deletions(-) create mode 100644 docker/hub/Dockerfile.keyserver create mode 100644 docker/hub/Dockerfile.mediaapi create mode 100644 docker/hub/Dockerfile.publicroomsapi create mode 100644 docker/hub/Dockerfile.roomserver create mode 100644 docker/hub/Dockerfile.syncapi create mode 100644 docker/hub/build.sh create mode 100644 docker/hub/docker-compose.deps.yml create mode 100644 docker/hub/docker-compose.monolith.yml create mode 100644 docker/hub/docker-compose.polylith.yml diff --git a/docker/hub/Dockerfile.clientapi b/docker/hub/Dockerfile.clientapi index 03929c016..e3065cad0 100644 --- a/docker/hub/Dockerfile.clientapi +++ b/docker/hub/Dockerfile.clientapi @@ -1,12 +1,13 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest COPY --from=base /build/bin/dendrite-client-api-server /usr/bin -COPY --from=base /build/docker/services/dendrite-client-api-server.sh /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/dendrite-client-api-server.sh +ENTRYPOINT ["/usr/bin/dendrite-client-api-server", "--config=dendrite.yaml"] -EXPOSE 7771 \ No newline at end of file +EXPOSE 7771 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.clientproxy b/docker/hub/Dockerfile.clientproxy index bee8aaf9c..20e6444e9 100644 --- a/docker/hub/Dockerfile.clientproxy +++ b/docker/hub/Dockerfile.clientproxy @@ -1,13 +1,12 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest COPY --from=base /build/bin/client-api-proxy /usr/bin -COPY --from=base /build/docker/services/client-api-proxy.sh /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/client-api-proxy.sh +ENTRYPOINT [ "/usr/bin/client-api-proxy", "--bind-address=:8008", "--client-api-server-url=http://client_api:7771", "--sync-api-server-url=http://sync_api:7773", "--media-api-server-url=http://media_api:7774", "--public-rooms-api-server-url=http://public_rooms_api:7775" ] EXPOSE 8008 EXPOSE 8448 \ No newline at end of file diff --git a/docker/hub/Dockerfile.eduserver b/docker/hub/Dockerfile.eduserver index a80a6c5d5..f436d7cc5 100644 --- a/docker/hub/Dockerfile.eduserver +++ b/docker/hub/Dockerfile.eduserver @@ -1,12 +1,13 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest COPY --from=base /build/bin/dendrite-edu-server /usr/bin -COPY --from=base /build/docker/services/edu-server.sh /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/edu-server.sh +ENTRYPOINT ["/usr/bin/dendrite-edu-server", "--config=dendrite.yaml"] -EXPOSE 7777 \ No newline at end of file +EXPOSE 7777 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.federationapi b/docker/hub/Dockerfile.federationapi index efc1f98f2..0a032327e 100644 --- a/docker/hub/Dockerfile.federationapi +++ b/docker/hub/Dockerfile.federationapi @@ -1,12 +1,13 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest -COPY --from=base /build/bin/dendrite-federation-api /usr/bin -COPY --from=base /build/docker/services/federation-api.sh /usr/bin +COPY --from=base /build/bin/dendrite-federation-api-server /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/federation-api.sh +ENTRYPOINT ["/usr/bin/dendrite-federation-api-server", "--config=dendrite.yaml"] -EXPOSE 7772 \ No newline at end of file +EXPOSE 7772 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.federationproxy b/docker/hub/Dockerfile.federationproxy index 93f81b145..ca21edb17 100644 --- a/docker/hub/Dockerfile.federationproxy +++ b/docker/hub/Dockerfile.federationproxy @@ -1,13 +1,14 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest COPY --from=base /build/bin/federation-api-proxy /usr/bin -COPY --from=base /build/docker/services/federation-api-proxy.sh /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/federation-api-proxy.sh +ENTRYPOINT ["/usr/bin/federation-api-proxy", "--bind-address=:8448", "--federation-api-url=http://federation_api_server:7772", "--media-api-server-url=http://media_api:7774" ] EXPOSE 8008 -EXPOSE 8448 \ No newline at end of file +EXPOSE 8448 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.federationsender b/docker/hub/Dockerfile.federationsender index 120a3bfe9..e2e9698d3 100644 --- a/docker/hub/Dockerfile.federationsender +++ b/docker/hub/Dockerfile.federationsender @@ -1,12 +1,13 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest COPY --from=base /build/bin/dendrite-federation-sender-server /usr/bin -COPY --from=base /build/docker/services/federation-sender.sh /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/federation-sender.sh +ENTRYPOINT ["/usr/bin/dendrite-federation-sender-server", "--config=dendrite.yaml"] -EXPOSE 7776 \ No newline at end of file +EXPOSE 7776 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.keyserver b/docker/hub/Dockerfile.keyserver new file mode 100644 index 000000000..fc398a0ba --- /dev/null +++ b/docker/hub/Dockerfile.keyserver @@ -0,0 +1,13 @@ +FROM matrixdotorg/dendrite:latest AS base + +FROM alpine:latest + +COPY --from=base /build/bin/dendrite-key-server /usr/bin + +WORKDIR /etc/dendrite + +ENTRYPOINT ["/usr/bin/dendrite-key-server", "--config=dendrite.yaml"] + +EXPOSE 7778 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.mediaapi b/docker/hub/Dockerfile.mediaapi new file mode 100644 index 000000000..3515ab4bd --- /dev/null +++ b/docker/hub/Dockerfile.mediaapi @@ -0,0 +1,14 @@ +FROM matrixdotorg/dendrite:latest AS base + +FROM alpine:latest + +COPY --from=base /build/bin/dendrite-media-api-server /usr/bin + +WORKDIR /etc/dendrite + +ENTRYPOINT ["/usr/bin/dendrite-media-api-server", "--config=dendrite.yaml"] + +EXPOSE 7774 + +VOLUME /etc/dendrite +VOLUME /var/dendrite/media \ No newline at end of file diff --git a/docker/hub/Dockerfile.monolith b/docker/hub/Dockerfile.monolith index fafb8e834..053f9590b 100644 --- a/docker/hub/Dockerfile.monolith +++ b/docker/hub/Dockerfile.monolith @@ -1,13 +1,14 @@ -FROM neilalexander/dendrite:latest AS base +FROM matrixdotorg/dendrite:latest AS base FROM alpine:latest COPY --from=base /build/bin/dendrite-monolith-server /usr/bin -COPY --from=base /build/docker/services/monolith.sh /usr/bin -WORKDIR /usr +WORKDIR /etc/dendrite -ENTRYPOINT ./bin/monolith.sh +ENTRYPOINT [ "/usr/bin/dendrite-monolith-server", "--tls-cert=server.crt", "--tls-key=server.key", "--config=dendrite.yaml" ] EXPOSE 8008 -EXPOSE 8448 \ No newline at end of file +EXPOSE 8448 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.publicroomsapi b/docker/hub/Dockerfile.publicroomsapi new file mode 100644 index 000000000..7abcca356 --- /dev/null +++ b/docker/hub/Dockerfile.publicroomsapi @@ -0,0 +1,13 @@ +FROM matrixdotorg/dendrite:latest AS base + +FROM alpine:latest + +COPY --from=base /build/bin/dendrite-public-rooms-api-server /usr/bin + +WORKDIR /etc/dendrite + +ENTRYPOINT ["/usr/bin/dendrite-public-rooms-api-server", "--config=dendrite.yaml"] + +EXPOSE 7775 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.roomserver b/docker/hub/Dockerfile.roomserver new file mode 100644 index 000000000..b8fa01442 --- /dev/null +++ b/docker/hub/Dockerfile.roomserver @@ -0,0 +1,13 @@ +FROM matrixdotorg/dendrite:latest AS base + +FROM alpine:latest + +COPY --from=base /build/bin/dendrite-room-server /usr/bin + +WORKDIR /etc/dendrite + +ENTRYPOINT ["/usr/bin/dendrite-room-server", "--config=dendrite.yaml"] + +EXPOSE 7770 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/Dockerfile.syncapi b/docker/hub/Dockerfile.syncapi new file mode 100644 index 000000000..587423c58 --- /dev/null +++ b/docker/hub/Dockerfile.syncapi @@ -0,0 +1,13 @@ +FROM matrixdotorg/dendrite:latest AS base + +FROM alpine:latest + +COPY --from=base /build/bin/dendrite-sync-api-server /usr/bin + +WORKDIR /etc/dendrite + +ENTRYPOINT ["/usr/bin/dendrite-sync-api-server", "--config=dendrite.yaml"] + +EXPOSE 7773 + +VOLUME /etc/dendrite \ No newline at end of file diff --git a/docker/hub/build.sh b/docker/hub/build.sh new file mode 100644 index 000000000..05963c140 --- /dev/null +++ b/docker/hub/build.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +cd $(git rev-parse --show-toplevel) + +# go run ./cmd/generate-keys --private-key=docker/hub/config/matrix_key.pem -tls-cert=docker/hub/config/server.crt -tls-key=docker/hub/config/server.key + +docker build -f docker/hub/Dockerfile -t matrixdotorg/dendrite:latest . + +COMPONENTS=$(ls docker/hub/Dockerfile.* | cut -d "." -f2) +for NAME in $COMPONENTS; do + docker build -f docker/hub/Dockerfile.$NAME -t matrixdotorg/dendrite:$NAME . +done \ No newline at end of file diff --git a/docker/hub/docker-compose.deps.yml b/docker/hub/docker-compose.deps.yml new file mode 100644 index 000000000..75567fd10 --- /dev/null +++ b/docker/hub/docker-compose.deps.yml @@ -0,0 +1,38 @@ +version: "3.4" +services: + postgres: + container_name: dendrite_postgres + hostname: postgres + image: postgres:9.5 + restart: always + volumes: + - ../postgres/create_db.sh:/docker-entrypoint-initdb.d/20-create_db.sh + environment: + POSTGRES_PASSWORD: itsasecret + POSTGRES_USER: dendrite + networks: + - internal + + zookeeper: + container_name: dendrite_zookeeper + hostname: zookeeper + image: zookeeper + networks: + - internal + + kafka: + container_name: dendrite_kafka + hostname: kafka + image: wurstmeister/kafka + environment: + KAFKA_ADVERTISED_HOST_NAME: "kafka" + KAFKA_DELETE_TOPIC_ENABLE: "true" + KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" + depends_on: + - zookeeper + networks: + - internal + +networks: + internal: + attachable: true diff --git a/docker/hub/docker-compose.monolith.yml b/docker/hub/docker-compose.monolith.yml new file mode 100644 index 000000000..3f6c3e307 --- /dev/null +++ b/docker/hub/docker-compose.monolith.yml @@ -0,0 +1,18 @@ +version: "3.4" +services: + postgres: + container_name: dendrite_postgres + hostname: postgres + image: postgres:9.5 + restart: always + volumes: + - ./postgres/create_db.sh:/docker-entrypoint-initdb.d/20-create_db.sh + environment: + POSTGRES_PASSWORD: itsasecret + POSTGRES_USER: dendrite + networks: + - internal + +networks: + internal: + attachable: true diff --git a/docker/hub/docker-compose.polylith.yml b/docker/hub/docker-compose.polylith.yml new file mode 100644 index 000000000..2edef9928 --- /dev/null +++ b/docker/hub/docker-compose.polylith.yml @@ -0,0 +1,118 @@ +version: "3.4" +services: + client_api_proxy: + container_name: dendrite_client_api_proxy + hostname: client_api_proxy + image: matrixdotorg/dendrite:clientproxy + volumes: + - ./config:/etc/dendrite + networks: + - internal + depends_on: + - sync_api + - client_api + - media_api + - public_rooms_api + ports: + - "8008:8008" + + client_api: + container_name: dendrite_client_api + hostname: client_api + image: matrixdotorg/dendrite:clientapi + volumes: + - ./config:/etc/dendrite + - room_server + networks: + - internal + + media_api: + container_name: dendrite_media_api + hostname: media_api + image: matrixdotorg/dendrite:mediaapi + volumes: + - ./config:/etc/dendrite + networks: + - internal + + public_rooms_api: + container_name: dendrite_public_rooms_api + hostname: public_rooms_api + image: matrixdotorg/dendrite:publicroomsapi + volumes: + - ./config:/etc/dendrite + networks: + - internal + + sync_api: + container_name: dendrite_sync_api + hostname: sync_api + image: matrixdotorg/dendrite:syncapi + volumes: + - ./config:/etc/dendrite + networks: + - internal + + room_server: + container_name: dendrite_room_server + hostname: room_server + image: matrixdotorg/dendrite:roomserver + volumes: + - ./config:/etc/dendrite + networks: + - internal + + edu_server: + container_name: dendrite_edu_server + hostname: edu_server + image: matrixdotorg/dendrite:eduserver + volumes: + - ./config:/etc/dendrite + networks: + - internal + + federation_api_proxy: + container_name: dendrite_federation_api_proxy + hostname: federation_api_proxy + image: matrixdotorg/dendrite:federationproxy + volumes: + - ./config:/etc/dendrite + depends_on: + - federation_api + - federation_sender + - media_api + networks: + - internal + ports: + - "8448:8448" + + federation_api: + container_name: dendrite_federation_api + hostname: federation_api + image: matrixdotorg/dendrite:federationapi + volumes: + - ./config:/etc/dendrite + networks: + - internal + + federation_sender: + container_name: dendrite_federation_sender + hostname: federation_sender + image: matrixdotorg/dendrite:federationsender + volumes: + - ./config:/etc/dendrite + networks: + - internal + + key_server: + container_name: dendrite_key_server + hostname: key_server + image: matrixdotorg/dendrite:keyserver + volumes: + - ./config:/etc/dendrite + networks: + - internal + +networks: + internal: + attachable: true