From 4c8cea2b44a8c9f1052e00f1a17791b9fd7cd950 Mon Sep 17 00:00:00 2001 From: Esteban Borai Date: Sun, 19 Nov 2023 16:35:41 -0300 Subject: [PATCH] chore: docs and arch --- .env.example | 17 ++ .gitignore | 9 + Justfile | 29 ++ README.md | 53 +++- docker-compose.yml | 28 ++ docker/.gitkeep | 0 docs/diagrams/diagram.excalidraw | 475 +++++++++++++++++++++++++++++++ docs/diagrams/diagram.png | Bin 0 -> 27142 bytes 8 files changed, 609 insertions(+), 2 deletions(-) create mode 100644 .env.example create mode 100644 Justfile create mode 100644 docker-compose.yml create mode 100644 docker/.gitkeep create mode 100644 docs/diagrams/diagram.excalidraw create mode 100644 docs/diagrams/diagram.png diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a4eee53 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# Matrix Client +MATRIX_HOST=http://localhost:8008 +MATRIX_ADMIN_TOKEN=secret + +# PostgreSQL +POSTGRES_USER=synapse_user +POSTGRES_PASSWORD=secretpassword +POSTGRES_DB=synapse +# https://www.postgresql.org/docs/current/app-initdb.html +POSTGRES_INITDB_ARGS='--no-locale --encoding=UTF8' + +# Synapse +SYNAPSE_SERVER_NAME=matrix.localhost +SYNAPSE_REPORT_STATS=yes +SYNAPSE_ENABLE_REGISTRATION=yes +SYNAPSE_NO_TLS=true +SYNAPSE_USER_DIR_SEARCH_ALL_USERS=true diff --git a/.gitignore b/.gitignore index 6985cf1..d673cb1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,12 @@ Cargo.lock # MSVC Windows builds of rustc generate these, which store debugging information *.pdb + +# Development +/docker/* +!/docker/.gitkeep +!/docker/postgre +.env + +# System Specific +.DS_Store diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..ab74a98 --- /dev/null +++ b/Justfile @@ -0,0 +1,29 @@ +set positional-arguments + +# Lists all available commands +default: + just --list + +# Creates the `.env` file if it doesn't exist +dotenv: + cp -n .env.example .env || true + +# Generates the synapse configuration file and saves it +gen_synapse_conf: dotenv + docker run -it --rm \ + -v ./docker/synapse:/data \ + --env-file .env \ + matrixdotorg/synapse:v1.96.1 generate + +# Runs backend dependency services +backend: dotenv + docker compose up --build + +# Stops backend dependency services +stop: + docker compose down + +# Removes oll Docker related config, volumes and containers for this project +clear: stop + docker compose rm --all --force --volumes --stop + docker volume rm commune_synapse_database || true diff --git a/README.md b/README.md index bf84f02..e31545b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,51 @@ -# commune -Commune Server +
+

commune

+

+ Commune Server +

+
+ +## Development + +### Requirements + +- [Docker](https://www.docker.com/get-started/) +- [Justfile](https://github.com/casey/just) +- [Rust](https://rustup.rs) + +### Getting Started + +1. Generate `Synapse` server configuration + +```bash +just gen_synapse_conf +``` + +2. Run Synapse Server (and other containerized services) using Docker Compose +via: + +```bash +just backend +``` + +**When you are ready** + +Teardown services using `just stop`. If you want to perform a complete cleanup +use `just clear`. + +> **Warning** `just clear` will remove all containers and images. + +### Application Layout + +
+ + Application Layout Overview +
+ +The client, any HTTP Client, comunicates with the Commune Server which may or +may not communicate with Matrix's server _Synapse_ which runs along with its +database in a Docker container. + +## License + +This project is licensed under the Apache License Version 2.0 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fce631b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' + +services: + synapse_database: + image: 'postgres:16' + ports: + - '5432:5432' + volumes: + - synapse_database:/var/lib/postgresql/data + env_file: + - .env + restart: always + + synapse: + image: 'matrixdotorg/synapse:v1.96.1' + ports: + - '8008:8008' + - '8448:8448' + volumes: + - ./docker/synapse:/data + env_file: + - .env + restart: always + depends_on: + - synapse_database + +volumes: + synapse_database: diff --git a/docker/.gitkeep b/docker/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/diagrams/diagram.excalidraw b/docs/diagrams/diagram.excalidraw new file mode 100644 index 0000000..eaa5793 --- /dev/null +++ b/docs/diagrams/diagram.excalidraw @@ -0,0 +1,475 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "RYL6z1yNI4ryhDrjxemyL", + "type": "rectangle", + "x": 364, + "y": 272, + "width": 130, + "height": 119, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1352799417, + "version": 94, + "versionNonce": 297889623, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "NwNRXHacaPiTQKk-sS3iv" + }, + { + "id": "jR76iIplo4TVvNKZBH6vT", + "type": "arrow" + } + ], + "updated": 1700421911263, + "link": null, + "locked": false + }, + { + "id": "NwNRXHacaPiTQKk-sS3iv", + "type": "text", + "x": 393.84375, + "y": 319.5, + "width": 70.3125, + "height": 24, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 683172535, + "version": 80, + "versionNonce": 581421529, + "isDeleted": false, + "boundElements": null, + "updated": 1700421905506, + "link": null, + "locked": false, + "text": "Client", + "fontSize": 20, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 19, + "containerId": "RYL6z1yNI4ryhDrjxemyL", + "originalText": "Client", + "lineHeight": 1.2 + }, + { + "type": "rectangle", + "version": 207, + "versionNonce": 145190007, + "isDeleted": false, + "id": "igO3c0IESW8ZSDcllatP-", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 582, + "y": 269.5, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 130, + "height": 119, + "seed": 2026968473, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "E1cQEf95N_pZWvm755-z4" + }, + { + "id": "jR76iIplo4TVvNKZBH6vT", + "type": "arrow" + }, + { + "id": "I--VThaGzeWEpMH77IyuH", + "type": "arrow" + } + ], + "updated": 1700421911263, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 206, + "versionNonce": 648226489, + "isDeleted": false, + "id": "E1cQEf95N_pZWvm755-z4", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 605.984375, + "y": 305, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "width": 82.03125, + "height": 48, + "seed": 815919225, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700421905506, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "Commune\nServer", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "igO3c0IESW8ZSDcllatP-", + "originalText": "Commune\nServer", + "lineHeight": 1.2, + "baseline": 43 + }, + { + "id": "jR76iIplo4TVvNKZBH6vT", + "type": "arrow", + "x": 495, + "y": 328.38774886792805, + "width": 86, + "height": 0.220972375229735, + "angle": 0, + "strokeColor": "#fa5252", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1227684473, + "version": 56, + "versionNonce": 1745929623, + "isDeleted": false, + "boundElements": null, + "updated": 1700421911263, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 86, + -0.220972375229735 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "RYL6z1yNI4ryhDrjxemyL", + "focus": -0.04931816566337021, + "gap": 1 + }, + "endBinding": { + "elementId": "igO3c0IESW8ZSDcllatP-", + "focus": 0.016806722689075442, + "gap": 1 + }, + "startArrowhead": null, + "endArrowhead": "triangle" + }, + { + "id": "BBin9aP3kMIsghlY9Q3Xb", + "type": "rectangle", + "x": 803, + "y": 235, + "width": 305, + "height": 200, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 1920549721, + "version": 263, + "versionNonce": 2133981879, + "isDeleted": false, + "boundElements": [ + { + "id": "I--VThaGzeWEpMH77IyuH", + "type": "arrow" + } + ], + "updated": 1700421911263, + "link": null, + "locked": false + }, + { + "id": "mxgPLlWP_Rswux186mo6F", + "type": "image", + "x": 906, + "y": 149, + "width": 85, + "height": 85, + "angle": 0, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1091137593, + "version": 301, + "versionNonce": 1118800855, + "isDeleted": false, + "boundElements": null, + "updated": 1700421911263, + "link": null, + "locked": false, + "status": "saved", + "fileId": "674c6c1c00fa6878a440ca4cb9c65ee6ce0b9d51", + "scale": [ + 1, + 1 + ] + }, + { + "id": "4N7vb2roINeGhvAK-EnUr", + "type": "rectangle", + "x": 831, + "y": 278, + "width": 114, + "height": 108, + "angle": 0, + "strokeColor": "#6741d9", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 717291801, + "version": 341, + "versionNonce": 513669367, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "4YZ1HMXFK8M48eFnDMR4v" + } + ], + "updated": 1700421911263, + "link": null, + "locked": false + }, + { + "id": "4YZ1HMXFK8M48eFnDMR4v", + "type": "text", + "x": 846.984375, + "y": 308, + "width": 82.03125, + "height": 48, + "angle": 0, + "strokeColor": "#6741d9", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1393907641, + "version": 262, + "versionNonce": 1356851097, + "isDeleted": false, + "boundElements": null, + "updated": 1700421905507, + "link": null, + "locked": false, + "text": "Matrix\nSynapse", + "fontSize": 20, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 43, + "containerId": "4N7vb2roINeGhvAK-EnUr", + "originalText": "Matrix\nSynapse", + "lineHeight": 1.2 + }, + { + "type": "rectangle", + "version": 494, + "versionNonce": 142721559, + "isDeleted": false, + "id": "9lVssKY2uk0fr5TCbd5kT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 969, + "y": 277, + "strokeColor": "#6741d9", + "backgroundColor": "#d0bfff", + "width": 114, + "height": 108, + "seed": 487814649, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "QJwL5UFm3QWsAGT_IMZZG" + } + ], + "updated": 1700421911263, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 431, + "versionNonce": 462523513, + "isDeleted": false, + "id": "QJwL5UFm3QWsAGT_IMZZG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 979.125, + "y": 321.4, + "strokeColor": "#6741d9", + "backgroundColor": "#d0bfff", + "width": 93.75, + "height": 19.2, + "seed": 1463634583, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700421905508, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "PostgreSQL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "9lVssKY2uk0fr5TCbd5kT", + "originalText": "PostgreSQL", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "arrow", + "version": 257, + "versionNonce": 1364158263, + "isDeleted": false, + "id": "I--VThaGzeWEpMH77IyuH", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 714, + "y": 329.467361039966, + "strokeColor": "#e8590c", + "backgroundColor": "#a5d8ff", + "width": 86, + "height": 0.2401904503404353, + "seed": 184831705, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700421911263, + "link": null, + "locked": false, + "startBinding": { + "elementId": "igO3c0IESW8ZSDcllatP-", + "gap": 2, + "focus": 0.010959919320073687 + }, + "endBinding": { + "elementId": "BBin9aP3kMIsghlY9Q3Xb", + "gap": 3, + "focus": 0.06180802042331033 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 86, + -0.2401904503404353 + ] + ] + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": { + "674c6c1c00fa6878a440ca4cb9c65ee6ce0b9d51": { + "mimeType": "image/png", + "id": "674c6c1c00fa6878a440ca4cb9c65ee6ce0b9d51", + "dataURL": "data:image/png;base64,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", + "created": 1700421758712, + "lastRetrieved": 1700421758712 + } + } +} \ No newline at end of file diff --git a/docs/diagrams/diagram.png b/docs/diagrams/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..bb027bd0d30454880fb425ab3cc483dfade75747 GIT binary patch literal 27142 zcmeFZg;!Kv*fvfINVjx@inMfhw+PbGJ#@oR64D}_3W{_ybazX4cXtiU{6>8qpZEQJ zf5Erbx7L}N!?T{P!H5^H)QP5^)qbI59YRDe*U+@Q2MP#`@j$*U&5jLf-npW-?;^-6s;f zI0~o~pW-%`)$rQH@YpxkvCnrdlF7nd@W~z688GFTaHwelLu@8|Ji6;{49(uXofC%M zq*hf4=oTF+%umf#jkeua7qq^UA06`Ap}>8DM-Bh~j{hq)V8sBRpSYJ2g(Mg7&+#-V z;GiMe=6SEvV$g?=_EqBzcvoUVk~#H9dQ(`JS(xBAMJ!}e;*7xNu$r<0>?8b9vtIpU8A}=X@Bt7A2qp;s8g|j z;1a%z_J1Zv&5rc^7IA{G7!@rJ?)M?)kHfBckH(Bf-lW;9zE)NR!Jx-^jX>}qet

HbrMT<{$e%tV_%-xB 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 Y3gTKPXKX%w@f%DEPm~`Q$r}3oFRc-P!T