aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-10-20 16:11:24 +0100
committerGitHub <noreply@github.com>2020-10-20 16:11:24 +0100
commit39c7a8915ccba3ac4d281ae7938f2e912ad966b4 (patch)
tree321ebe39b305dea1d844e9bd922939aa0ea4d70d
parent6c3c621de09a62c7ec8d89b2d8e6a9d73833fd0b (diff)
Multi-personality polylith binary (#1552)
* Initial work oon multipersonality binary * Remove old binaries * Monolith and polylith binaries * Better logging * dendrite-poly-multi * Fix path * Copyright notices etc * Tweaks * Update Docker, INSTALL.md * Take first argument if flags package doesn't find any args * Postgres 9.6 or later, fix some more Docker stuff * Don't create unnecessary e2ekey DB * Run go mod tidy
-rw-r--r--build/docker/Dockerfile2
-rw-r--r--build/docker/Dockerfile.component14
-rw-r--r--build/docker/Dockerfile.monolith13
-rw-r--r--build/docker/Dockerfile.polylith13
-rw-r--r--build/docker/docker-compose.deps.yml2
-rw-r--r--build/docker/docker-compose.monolith.yml1
-rw-r--r--build/docker/docker-compose.polylith.yml67
-rwxr-xr-xbuild/docker/images-build.sh15
-rwxr-xr-xbuild/docker/images-pull.sh13
-rwxr-xr-xbuild/docker/images-push.sh13
-rwxr-xr-xbuild/docker/postgres/create_db.sh2
-rw-r--r--cmd/dendrite-polylith-multi/main.go78
-rw-r--r--cmd/dendrite-polylith-multi/personalities/appservice.go (renamed from cmd/dendrite-appservice-server/main.go)11
-rw-r--r--cmd/dendrite-polylith-multi/personalities/clientapi.go (renamed from cmd/dendrite-client-api-server/main.go)12
-rw-r--r--cmd/dendrite-polylith-multi/personalities/eduserver.go (renamed from cmd/dendrite-edu-server/main.go)18
-rw-r--r--cmd/dendrite-polylith-multi/personalities/federationapi.go (renamed from cmd/dendrite-federation-api-server/main.go)11
-rw-r--r--cmd/dendrite-polylith-multi/personalities/federationsender.go (renamed from cmd/dendrite-federation-sender-server/main.go)11
-rw-r--r--cmd/dendrite-polylith-multi/personalities/keyserver.go (renamed from cmd/dendrite-key-server/main.go)9
-rw-r--r--cmd/dendrite-polylith-multi/personalities/mediaapi.go (renamed from cmd/dendrite-media-api-server/main.go)11
-rw-r--r--cmd/dendrite-polylith-multi/personalities/roomserver.go (renamed from cmd/dendrite-room-server/main.go)11
-rw-r--r--cmd/dendrite-polylith-multi/personalities/signingkeyserver.go (renamed from cmd/dendrite-signing-key-server/main.go)9
-rw-r--r--cmd/dendrite-polylith-multi/personalities/syncapi.go (renamed from cmd/dendrite-sync-api-server/main.go)12
-rw-r--r--cmd/dendrite-polylith-multi/personalities/userapi.go (renamed from cmd/dendrite-user-api-server/main.go)11
-rw-r--r--docs/INSTALL.md26
24 files changed, 189 insertions, 196 deletions
diff --git a/build/docker/Dockerfile b/build/docker/Dockerfile
index d8e07681..5cab0530 100644
--- a/build/docker/Dockerfile
+++ b/build/docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM docker.io/golang:1.13.7-alpine3.11 AS builder
+FROM docker.io/golang:1.15-alpine AS builder
RUN apk --update --no-cache add bash build-base
diff --git a/build/docker/Dockerfile.component b/build/docker/Dockerfile.component
deleted file mode 100644
index 1acf510f..00000000
--- a/build/docker/Dockerfile.component
+++ /dev/null
@@ -1,14 +0,0 @@
-FROM matrixdotorg/dendrite:latest AS base
-
-FROM alpine:latest
-
-ARG component=monolith
-ENV entrypoint=${component}
-
-COPY --from=base /build/bin/${component} /usr/bin
-COPY --from=base /build/bin/goose /usr/bin
-
-VOLUME /etc/dendrite
-WORKDIR /etc/dendrite
-
-ENTRYPOINT /usr/bin/${entrypoint} $@ \ No newline at end of file
diff --git a/build/docker/Dockerfile.monolith b/build/docker/Dockerfile.monolith
new file mode 100644
index 00000000..3e9d0cba
--- /dev/null
+++ b/build/docker/Dockerfile.monolith
@@ -0,0 +1,13 @@
+FROM matrixdotorg/dendrite:latest AS base
+
+FROM alpine:latest
+
+COPY --from=base /build/bin/dendrite-monolith-server /usr/bin
+COPY --from=base /build/bin/goose /usr/bin
+COPY --from=base /build/bin/create-account /usr/bin
+COPY --from=base /build/bin/generate-keys /usr/bin
+
+VOLUME /etc/dendrite
+WORKDIR /etc/dendrite
+
+ENTRYPOINT ["/usr/bin/dendrite-monolith-server"] \ No newline at end of file
diff --git a/build/docker/Dockerfile.polylith b/build/docker/Dockerfile.polylith
new file mode 100644
index 00000000..dd4cbd38
--- /dev/null
+++ b/build/docker/Dockerfile.polylith
@@ -0,0 +1,13 @@
+FROM matrixdotorg/dendrite:latest AS base
+
+FROM alpine:latest
+
+COPY --from=base /build/bin/dendrite-polylith-multi /usr/bin
+COPY --from=base /build/bin/goose /usr/bin
+COPY --from=base /build/bin/create-account /usr/bin
+COPY --from=base /build/bin/generate-keys /usr/bin
+
+VOLUME /etc/dendrite
+WORKDIR /etc/dendrite
+
+ENTRYPOINT ["/usr/bin/dendrite-polylith-multi"] \ No newline at end of file
diff --git a/build/docker/docker-compose.deps.yml b/build/docker/docker-compose.deps.yml
index 74e478a8..1a27ffac 100644
--- a/build/docker/docker-compose.deps.yml
+++ b/build/docker/docker-compose.deps.yml
@@ -2,7 +2,7 @@ version: "3.4"
services:
postgres:
hostname: postgres
- image: postgres:9.5
+ image: postgres:9.6
restart: always
volumes:
- ./postgres/create_db.sh:/docker-entrypoint-initdb.d/20-create_db.sh
diff --git a/build/docker/docker-compose.monolith.yml b/build/docker/docker-compose.monolith.yml
index 7d63e1c6..8fb79834 100644
--- a/build/docker/docker-compose.monolith.yml
+++ b/build/docker/docker-compose.monolith.yml
@@ -4,7 +4,6 @@ services:
hostname: monolith
image: matrixdotorg/dendrite-monolith:latest
command: [
- "--config=dendrite.yaml",
"--tls-cert=server.crt",
"--tls-key=server.key"
]
diff --git a/build/docker/docker-compose.polylith.yml b/build/docker/docker-compose.polylith.yml
index e8da9c24..f377e36f 100644
--- a/build/docker/docker-compose.polylith.yml
+++ b/build/docker/docker-compose.polylith.yml
@@ -2,22 +2,17 @@ version: "3.4"
services:
client_api:
hostname: client_api
- image: matrixdotorg/dendrite-clientapi:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: clientapi
volumes:
- ./config:/etc/dendrite
- - room_server
networks:
- internal
media_api:
hostname: media_api
- image: matrixdotorg/dendrite-mediaapi:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: mediaapi
volumes:
- ./config:/etc/dendrite
networks:
@@ -25,10 +20,8 @@ services:
sync_api:
hostname: sync_api
- image: matrixdotorg/dendrite-syncapi:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: syncapi
volumes:
- ./config:/etc/dendrite
networks:
@@ -36,10 +29,8 @@ services:
room_server:
hostname: room_server
- image: matrixdotorg/dendrite-roomserver:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: roomserver
volumes:
- ./config:/etc/dendrite
networks:
@@ -47,10 +38,8 @@ services:
edu_server:
hostname: edu_server
- image: matrixdotorg/dendrite-eduserver:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: eduserver
volumes:
- ./config:/etc/dendrite
networks:
@@ -58,10 +47,8 @@ services:
federation_api:
hostname: federation_api
- image: matrixdotorg/dendrite-federationapi:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: federationapi
volumes:
- ./config:/etc/dendrite
networks:
@@ -69,10 +56,8 @@ services:
federation_sender:
hostname: federation_sender
- image: matrixdotorg/dendrite-federationsender:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: federationsender
volumes:
- ./config:/etc/dendrite
networks:
@@ -80,10 +65,8 @@ services:
key_server:
hostname: key_server
- image: matrixdotorg/dendrite-keyserver:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: keyserver
volumes:
- ./config:/etc/dendrite
networks:
@@ -91,10 +74,8 @@ services:
signing_key_server:
hostname: signing_key_server
- image: matrixdotorg/dendrite-signingkeyserver:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: signingkeyserver
volumes:
- ./config:/etc/dendrite
networks:
@@ -102,10 +83,8 @@ services:
user_api:
hostname: user_api
- image: matrixdotorg/dendrite-userapi:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: userapi
volumes:
- ./config:/etc/dendrite
networks:
@@ -113,10 +92,8 @@ services:
appservice_api:
hostname: appservice_api
- image: matrixdotorg/dendrite-appservice:latest
- command: [
- "--config=dendrite.yaml"
- ]
+ image: matrixdotorg/dendrite-polylith:latest
+ command: appservice
volumes:
- ./config:/etc/dendrite
networks:
diff --git a/build/docker/images-build.sh b/build/docker/images-build.sh
index daad63be..f80f6bed 100755
--- a/build/docker/images-build.sh
+++ b/build/docker/images-build.sh
@@ -8,16 +8,5 @@ echo "Building tag '${TAG}'"
docker build -f build/docker/Dockerfile -t matrixdotorg/dendrite:${TAG} .
-docker build -t matrixdotorg/dendrite-monolith:${TAG} --build-arg component=dendrite-monolith-server -f build/docker/Dockerfile.component .
-
-docker build -t matrixdotorg/dendrite-appservice:${TAG} --build-arg component=dendrite-appservice-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-clientapi:${TAG} --build-arg component=dendrite-client-api-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-eduserver:${TAG} --build-arg component=dendrite-edu-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-federationapi:${TAG} --build-arg component=dendrite-federation-api-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-federationsender:${TAG} --build-arg component=dendrite-federation-sender-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-keyserver:${TAG} --build-arg component=dendrite-key-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-mediaapi:${TAG} --build-arg component=dendrite-media-api-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-roomserver:${TAG} --build-arg component=dendrite-room-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-syncapi:${TAG} --build-arg component=dendrite-sync-api-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-signingkeyserver:${TAG} --build-arg component=dendrite-signing-key-server -f build/docker/Dockerfile.component .
-docker build -t matrixdotorg/dendrite-userapi:${TAG} --build-arg component=dendrite-user-api-server -f build/docker/Dockerfile.component .
+docker build -t matrixdotorg/dendrite-monolith:${TAG} -f build/docker/Dockerfile.monolith .
+docker build -t matrixdotorg/dendrite-polylith:${TAG} -f build/docker/Dockerfile.polylith . \ No newline at end of file
diff --git a/build/docker/images-pull.sh b/build/docker/images-pull.sh
index e3284a2a..496e8006 100755
--- a/build/docker/images-pull.sh
+++ b/build/docker/images-pull.sh
@@ -5,15 +5,4 @@ TAG=${1:-latest}
echo "Pulling tag '${TAG}'"
docker pull matrixdotorg/dendrite-monolith:${TAG}
-
-docker pull matrixdotorg/dendrite-appservice:${TAG}
-docker pull matrixdotorg/dendrite-clientapi:${TAG}
-docker pull matrixdotorg/dendrite-eduserver:${TAG}
-docker pull matrixdotorg/dendrite-federationapi:${TAG}
-docker pull matrixdotorg/dendrite-federationsender:${TAG}
-docker pull matrixdotorg/dendrite-keyserver:${TAG}
-docker pull matrixdotorg/dendrite-mediaapi:${TAG}
-docker pull matrixdotorg/dendrite-roomserver:${TAG}
-docker pull matrixdotorg/dendrite-syncapi:${TAG}
-docker pull matrixdotorg/dendrite-signingkeyserver:${TAG}
-docker pull matrixdotorg/dendrite-userapi:${TAG}
+docker pull matrixdotorg/dendrite-polylith:${TAG} \ No newline at end of file
diff --git a/build/docker/images-push.sh b/build/docker/images-push.sh
index e4eb773a..fd9b999e 100755
--- a/build/docker/images-push.sh
+++ b/build/docker/images-push.sh
@@ -5,15 +5,4 @@ TAG=${1:-latest}
echo "Pushing tag '${TAG}'"
docker push matrixdotorg/dendrite-monolith:${TAG}
-
-docker push matrixdotorg/dendrite-appservice:${TAG}
-docker push matrixdotorg/dendrite-clientapi:${TAG}
-docker push matrixdotorg/dendrite-eduserver:${TAG}
-docker push matrixdotorg/dendrite-federationapi:${TAG}
-docker push matrixdotorg/dendrite-federationsender:${TAG}
-docker push matrixdotorg/dendrite-keyserver:${TAG}
-docker push matrixdotorg/dendrite-mediaapi:${TAG}
-docker push matrixdotorg/dendrite-roomserver:${TAG}
-docker push matrixdotorg/dendrite-syncapi:${TAG}
-docker push matrixdotorg/dendrite-signingkeyserver:${TAG}
-docker push matrixdotorg/dendrite-userapi:${TAG}
+docker push matrixdotorg/dendrite-polylith:${TAG} \ No newline at end of file
diff --git a/build/docker/postgres/create_db.sh b/build/docker/postgres/create_db.sh
index 97514467..7495a397 100755
--- a/build/docker/postgres/create_db.sh
+++ b/build/docker/postgres/create_db.sh
@@ -1,5 +1,5 @@
#!/bin/sh
-for db in account device mediaapi syncapi roomserver signingkeyserver keyserver federationsender appservice e2ekey naffka; do
+for db in account device mediaapi syncapi roomserver signingkeyserver keyserver federationsender appservice naffka; do
createdb -U dendrite -O dendrite dendrite_$db
done
diff --git a/cmd/dendrite-polylith-multi/main.go b/cmd/dendrite-polylith-multi/main.go
new file mode 100644
index 00000000..0d6406c0
--- /dev/null
+++ b/cmd/dendrite-polylith-multi/main.go
@@ -0,0 +1,78 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package main
+
+import (
+ "flag"
+ "os"
+ "strings"
+
+ "github.com/matrix-org/dendrite/cmd/dendrite-polylith-multi/personalities"
+ "github.com/matrix-org/dendrite/internal/config"
+ "github.com/matrix-org/dendrite/internal/setup"
+ "github.com/sirupsen/logrus"
+)
+
+type entrypoint func(base *setup.BaseDendrite, cfg *config.Dendrite)
+
+func main() {
+ cfg := setup.ParseFlags(true)
+
+ component := ""
+ if flag.NFlag() > 0 {
+ component = flag.Arg(0) // ./dendrite-polylith-multi --config=... clientapi
+ } else if len(os.Args) > 1 {
+ component = os.Args[1] // ./dendrite-polylith-multi clientapi
+ }
+
+ components := map[string]entrypoint{
+ "appservice": personalities.Appservice,
+ "clientapi": personalities.ClientAPI,
+ "eduserver": personalities.EDUServer,
+ "federationapi": personalities.FederationAPI,
+ "federationsender": personalities.FederationSender,
+ "keyserver": personalities.KeyServer,
+ "mediaapi": personalities.MediaAPI,
+ "roomserver": personalities.RoomServer,
+ "signingkeyserver": personalities.SigningKeyServer,
+ "syncapi": personalities.SyncAPI,
+ "userapi": personalities.UserAPI,
+ }
+
+ start, ok := components[component]
+ if !ok {
+ if component == "" {
+ logrus.Errorf("No component specified")
+ logrus.Info("The first argument on the command line must be the name of the component to run")
+ } else {
+ logrus.Errorf("Unknown component %q specified", component)
+ }
+
+ var list []string
+ for c := range components {
+ list = append(list, c)
+ }
+ logrus.Infof("Valid components: %s", strings.Join(list, ", "))
+
+ os.Exit(1)
+ }
+
+ logrus.Infof("Starting %q component", component)
+
+ base := setup.NewBaseDendrite(cfg, component, false) // TODO
+ defer base.Close() // nolint: errcheck
+
+ start(base, cfg)
+}
diff --git a/cmd/dendrite-appservice-server/main.go b/cmd/dendrite-polylith-multi/personalities/appservice.go
index 6adbdb17..7fa87b11 100644
--- a/cmd/dendrite-appservice-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/appservice.go
@@ -1,4 +1,4 @@
-// Copyright 2018 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
"github.com/matrix-org/dendrite/appservice"
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "AppServiceAPI", true)
-
- defer base.Close() // nolint: errcheck
+func Appservice(base *setup.BaseDendrite, cfg *config.Dendrite) {
userAPI := base.UserAPIClient()
rsAPI := base.RoomserverHTTPClient()
diff --git a/cmd/dendrite-client-api-server/main.go b/cmd/dendrite-polylith-multi/personalities/clientapi.go
index 0061de74..09fc63ab 100644
--- a/cmd/dendrite-client-api-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/clientapi.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,20 +12,16 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
"github.com/matrix-org/dendrite/clientapi"
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/internal/transactions"
)
-func main() {
- cfg := setup.ParseFlags(false)
-
- base := setup.NewBaseDendrite(cfg, "ClientAPI", true)
- defer base.Close() // nolint: errcheck
-
+func ClientAPI(base *setup.BaseDendrite, cfg *config.Dendrite) {
accountDB := base.CreateAccountsDB()
federation := base.CreateFederationClient()
diff --git a/cmd/dendrite-edu-server/main.go b/cmd/dendrite-polylith-multi/personalities/eduserver.go
index 3a34b9a6..a5d2926f 100644
--- a/cmd/dendrite-edu-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/eduserver.go
@@ -1,3 +1,5 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -10,26 +12,16 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
- _ "net/http/pprof"
-
"github.com/matrix-org/dendrite/eduserver"
"github.com/matrix-org/dendrite/eduserver/cache"
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
- "github.com/sirupsen/logrus"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "EDUServerAPI", true)
- defer func() {
- if err := base.Close(); err != nil {
- logrus.WithError(err).Warn("BaseDendrite close failed")
- }
- }()
-
+func EDUServer(base *setup.BaseDendrite, cfg *config.Dendrite) {
intAPI := eduserver.NewInternalAPI(base, cache.New(), base.UserAPIClient())
eduserver.AddInternalRoutes(base.InternalAPIMux, intAPI)
diff --git a/cmd/dendrite-federation-api-server/main.go b/cmd/dendrite-polylith-multi/personalities/federationapi.go
index 3ebb16f4..a1bbeafa 100644
--- a/cmd/dendrite-federation-api-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/federationapi.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
"github.com/matrix-org/dendrite/federationapi"
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "FederationAPI", true)
- defer base.Close() // nolint: errcheck
-
+func FederationAPI(base *setup.BaseDendrite, cfg *config.Dendrite) {
userAPI := base.UserAPIClient()
federation := base.CreateFederationClient()
serverKeyAPI := base.SigningKeyServerHTTPClient()
diff --git a/cmd/dendrite-federation-sender-server/main.go b/cmd/dendrite-polylith-multi/personalities/federationsender.go
index 99b416c4..05252378 100644
--- a/cmd/dendrite-federation-sender-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/federationsender.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
"github.com/matrix-org/dendrite/federationsender"
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "FederationSender", true)
- defer base.Close() // nolint: errcheck
-
+func FederationSender(base *setup.BaseDendrite, cfg *config.Dendrite) {
federation := base.CreateFederationClient()
serverKeyAPI := base.SigningKeyServerHTTPClient()
diff --git a/cmd/dendrite-key-server/main.go b/cmd/dendrite-polylith-multi/personalities/keyserver.go
index ff5b2223..8c159ad0 100644
--- a/cmd/dendrite-key-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/keyserver.go
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/keyserver"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "KeyServer", true)
- defer base.Close() // nolint: errcheck
-
+func KeyServer(base *setup.BaseDendrite, cfg *config.Dendrite) {
intAPI := keyserver.NewInternalAPI(&base.Cfg.KeyServer, base.CreateFederationClient())
intAPI.SetUserAPI(base.UserAPIClient())
diff --git a/cmd/dendrite-media-api-server/main.go b/cmd/dendrite-polylith-multi/personalities/mediaapi.go
index 2c2fe3b3..64e5bc31 100644
--- a/cmd/dendrite-media-api-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/mediaapi.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/mediaapi"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "MediaAPI", true)
- defer base.Close() // nolint: errcheck
-
+func MediaAPI(base *setup.BaseDendrite, cfg *config.Dendrite) {
userAPI := base.UserAPIClient()
client := base.CreateClient()
diff --git a/cmd/dendrite-room-server/main.go b/cmd/dendrite-polylith-multi/personalities/roomserver.go
index d3f14574..91027506 100644
--- a/cmd/dendrite-room-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/roomserver.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/roomserver"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "RoomServerAPI", true)
- defer base.Close() // nolint: errcheck
-
+func RoomServer(base *setup.BaseDendrite, cfg *config.Dendrite) {
serverKeyAPI := base.SigningKeyServerHTTPClient()
keyRing := serverKeyAPI.KeyRing()
diff --git a/cmd/dendrite-signing-key-server/main.go b/cmd/dendrite-polylith-multi/personalities/signingkeyserver.go
index a4d48d36..a7bfff10 100644
--- a/cmd/dendrite-signing-key-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/signingkeyserver.go
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/signingkeyserver"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "SigningKeyServer", true)
- defer base.Close() // nolint: errcheck
-
+func SigningKeyServer(base *setup.BaseDendrite, cfg *config.Dendrite) {
federation := base.CreateFederationClient()
intAPI := signingkeyserver.NewInternalAPI(&base.Cfg.SigningKeyServer, federation, base.Caches)
diff --git a/cmd/dendrite-sync-api-server/main.go b/cmd/dendrite-polylith-multi/personalities/syncapi.go
index 351dbc5f..2d5c0b52 100644
--- a/cmd/dendrite-sync-api-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/syncapi.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,19 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/syncapi"
)
-func main() {
- cfg := setup.ParseFlags(false)
-
- base := setup.NewBaseDendrite(cfg, "SyncAPI", true)
- defer base.Close() // nolint: errcheck
-
+func SyncAPI(base *setup.BaseDendrite, cfg *config.Dendrite) {
userAPI := base.UserAPIClient()
federation := base.CreateFederationClient()
diff --git a/cmd/dendrite-user-api-server/main.go b/cmd/dendrite-polylith-multi/personalities/userapi.go
index fb65fefb..fe5e4fbd 100644
--- a/cmd/dendrite-user-api-server/main.go
+++ b/cmd/dendrite-polylith-multi/personalities/userapi.go
@@ -1,4 +1,4 @@
-// Copyright 2017 Vector Creations Ltd
+// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,18 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package main
+package personalities
import (
+ "github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/dendrite/internal/setup"
"github.com/matrix-org/dendrite/userapi"
)
-func main() {
- cfg := setup.ParseFlags(false)
- base := setup.NewBaseDendrite(cfg, "UserAPI", true)
- defer base.Close() // nolint: errcheck
-
+func UserAPI(base *setup.BaseDendrite, cfg *config.Dendrite) {
accountDB := base.CreateAccountsDB()
userAPI := userapi.NewInternalAPI(accountDB, &cfg.UserAPI, cfg.Derived.ApplicationServices, base.KeyServerHTTPClient())
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
index d246e922..f804193c 100644
--- a/docs/INSTALL.md
+++ b/docs/INSTALL.md
@@ -24,7 +24,7 @@ use in production environments just yet!
Dendrite requires:
* Go 1.13 or higher
-* Postgres 9.5 or higher (if using Postgres databases, not needed for SQLite)
+* Postgres 9.6 or higher (if using Postgres databases, not needed for SQLite)
If you want to run a polylith deployment, you also need:
@@ -98,7 +98,7 @@ create them automatically at startup.
### Postgres database setup
-Assuming that Postgres 9.5 (or later) is installed:
+Assuming that Postgres 9.6 (or later) is installed:
* Create role, choosing a new password when prompted:
@@ -189,7 +189,7 @@ This is what implements CS API endpoints. Clients talk to this via the proxy in
order to send messages, create and join rooms, etc.
```bash
-./bin/dendrite-client-api-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml clientapi
```
### Sync server
@@ -198,7 +198,7 @@ This is what implements `/sync` requests. Clients talk to this via the proxy
in order to receive messages.
```bash
-./bin/dendrite-sync-api-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml syncapi
```
### Media server
@@ -207,7 +207,7 @@ This implements `/media` requests. Clients talk to this via the proxy in
order to upload and retrieve media.
```bash
-./bin/dendrite-media-api-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml mediaapi
```
### Federation API server
@@ -217,7 +217,7 @@ order to send transactions. This is only required if you want to support
federation.
```bash
-./bin/dendrite-federation-api-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml federationapi
```
### Internal components
@@ -230,7 +230,7 @@ contacted by other components. This includes the following components.
This is what implements the room DAG. Clients do not talk to this.
```bash
-./bin/dendrite-room-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml roomserver
```
#### Federation sender
@@ -239,7 +239,7 @@ This sends events from our users to other servers. This is only required if
you want to support federation.
```bash
-./bin/dendrite-federation-sender-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml federationsender
```
#### Appservice server
@@ -250,7 +250,7 @@ running locally. This is only required if you want to support running
application services on your homeserver.
```bash
-./bin/dendrite-appservice-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml appservice
```
#### Key server
@@ -258,7 +258,7 @@ application services on your homeserver.
This manages end-to-end encryption keys for users.
```bash
-./bin/dendrite-key-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml keyserver
```
#### Signing key server
@@ -266,7 +266,7 @@ This manages end-to-end encryption keys for users.
This manages signing keys for servers.
```bash
-./bin/dendrite-signing-key-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml signingkeyserver
```
#### EDU server
@@ -274,7 +274,7 @@ This manages signing keys for servers.
This manages processing EDUs such as typing, send-to-device events and presence. Clients do not talk to
```bash
-./bin/dendrite-edu-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml eduserver
```
#### User server
@@ -283,6 +283,6 @@ This manages user accounts, device access tokens and user account data,
amongst other things.
```bash
-./bin/dendrite-user-api-server --config dendrite.yaml
+./bin/dendrite-polylith-multi --config=dendrite.yaml userapi
```