Create docker-compose for testing purposes

This commit is contained in:
Gnuxie 2021-07-30 15:03:36 +01:00 committed by gnuxie
parent c262bc26db
commit 002e4ee749
7 changed files with 163 additions and 0 deletions

30
docker-compose.yaml Normal file
View File

@ -0,0 +1,30 @@
# THIS IS TO BE USED FOR DEVELOPMENT AND TESTING PURPOSES ONLY
version: '3.8'
services:
synapse_release:
build:
context: .
dockerfile: docker/Dockerfile.synapse.latest
ports:
- "9999:9999"
volumes:
- ./docker/synapse-data:/data
synapse_registration:
build:
context: .
dockerfile: docker/Dockerfile.synapse.registration
volumes:
- ./docker/synapse-data:/data
depends_on: [synapse_release]
mjolnir:
environment:
NODE_ENV: development
build:
context: .
dockerfile: Dockerfile
ports:
- "8005/tcp"
volumes:
- ./config:/data/config
- ./lib:/mjolnir/lib
depends_on: [synapse_registration]

View File

@ -0,0 +1,12 @@
# A custom Dockerfile to rebuild synapse from the official release + plugins
FROM matrixdotorg/synapse:latest
RUN pip show matrix-synapse
COPY synapse_antispam /synapse_antispam
RUN /usr/local/bin/python -m pip install /synapse_antispam
VOLUME ["/data"]
EXPOSE 8008/tcp 8009/tcp 8448/tcp

View File

@ -0,0 +1,6 @@
# Only exists to register a user, temporary solution
FROM matrixdotorg/synapse:latest
VOLUME ["/data"]
CMD ["-c", "/data/homeserver.yaml", "-u", "mjolnir", "-p", "mjolnir", "--admin", "http://synapse_release:9999"]
ENTRYPOINT ["register_new_matrix_user"]

10
docker/README.md Normal file
View File

@ -0,0 +1,10 @@
## Testing mjolnir with docker
At the moment a test environment for mjolnir can be setup by running
`./mjolnir_testing.sh` from the parent directory. This script will use
the `docker-compose.yaml` in the parent directory.
This sets up synapse container with a user for mjolnir to use.
The container for mjolnir, creates and joins the moderation room
which has to be specified with an alias in the config under `managementRoom`.
Eventually this setup should be moved to a testing module.

View File

@ -0,0 +1,70 @@
server_name: localhost:9999
pid_file: /data/homeserver.pid
public_baseurl: http://localhost:9999
listeners:
- port: 9999
tls: false
type: http
x_forwarded: true
resources:
- names: [client, federation]
compress: false
federation_ip_range_blacklist:
- '127.0.0.0/8'
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '100.64.0.0/10'
- '169.254.0.0/16'
- '::1/128'
- 'fe80::/64'
- 'fc00::/7'
# can not figure out how to exclude the db from the /data volume
database:
name: sqlite3
args:
database: /data/homeserver.db
media_store_path: "/data/media_store"
enable_registration: true
report_stats: false
registration_shared_secret: "REGISTRATION_SHARED_SECRET"
macaroon_secret_key: "MACROON_SECRET_KEY"
#form_secret: ""
signing_key_path: "/data/localhost:9999.signing.key"
trusted_key_servers:
- server_name: "matrix.org"
suppress_key_server_warning: true
rc_message:
per_second: 10000
burst_count: 10000
rc_registration:
per_second: 10000
burst_count: 10000
rc_login:
address:
per_second: 10000
burst_count: 10000
account:
per_second: 10000
burst_count: 10000
failed_attempts:
per_second: 10000
burst_count: 10000
rc_admin_redaction:
per_second: 10000
burst_count: 10000
rc_joins:
local:
per_second: 10000
burst_count: 10000
remote:
per_second: 10000
burst_count: 10000

23
mjolnir_testing.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
# This script only exists so that the persitent state in volumes
# is removed. Eventually this should be moved to a module
# managing the integration tests.
cleanup () {
set +e
rm -f docker/synapse-data/homeserver.db
set -e
}
case "$1" in
up)
cleanup
exec docker-compose up
;;
down)
exec docker-compose down
;;
*)
echo "Usage: $SCRIPTNAME {up|down}" >&2
exit 3
;;
esac

View File

@ -44,6 +44,11 @@ if (config.health.healthz.enabled) {
Healthz.listen(); Healthz.listen();
} }
async function createManagementRoom(client: MatrixClient, alias: string) {
let roomId = await client.createRoom();
await client.createRoomAlias(alias, roomId);
}
(async function () { (async function () {
const storage = new SimpleFsStorageProvider(path.join(config.dataPath, "bot.json")); const storage = new SimpleFsStorageProvider(path.join(config.dataPath, "bot.json"));
@ -56,6 +61,13 @@ if (config.health.healthz.enabled) {
} }
config.RUNTIME.client = client; config.RUNTIME.client = client;
// probably better to change to a config value
if (process.env.NODE_ENV === "development") {
// expects the config value to be an alias
// don't know what to do about that for now
// probably should validate it so someone doesn't have a huge headache
await createManagementRoom(client, config.managementRoom);
}
client.on("room.invite", async (roomId: string, inviteEvent: any) => { client.on("room.invite", async (roomId: string, inviteEvent: any) => {
const membershipEvent = new MembershipEvent(inviteEvent); const membershipEvent = new MembershipEvent(inviteEvent);