Script to migrate users, channels and messages from Rocket.Chat communication platform to a Matrix Synapse server. It currently has beta quality and comes with no warranty.
This setup is intended to migrate from Rocket.Chat to Synapse once, using mongo database dumps and a fresh Synapse instance. After the migration and some clean up, the Synapse might be used by users.
Currently manually via mongodb. Run the following on the server:
mongoexport --collection=rocketchat_message --db=rocketchat --out=rocketchat_message.json
mongoexport --collection=rocketchat_room --db=rocketchat --out=rocketchat_room.json
mongoexport --collection=users --db=rocketchat --out=users.json
Export them to inputs/
Generate a Synapse homeserver config with the following command (you might change my.matrix.host
for the actual server name, as it can't be changed afterwards):
docker compose run --rm -e SYNAPSE_SERVER_NAME=my.matrix.host -e SYNAPSE_REPORT_STATS=no synapse generate
To run the script without hitting rate limiting and activating an Application Service to send messages by different users with our desired timestamps, you MUST add the following options to the freshly generated files/homeserver.yaml
. Do not leave these in the production setup!
rc_joins:
local:
per_second: 1024
burst_count: 2048
rc_joins_per_room:
per_second: 1024
burst_count: 2048
rc_message:
per_second: 1024
burst_count: 2048
rc_invites:
per_room:
per_second: 1024
burst_count: 2048
per_user:
per_second: 1024
burst_count: 2048
per_issuer:
per_second: 1024
burst_count: 2048
app_service_config_files:
- /data/app-service.yaml
Now edit app-service.example.yaml
and save it at files/app-service.yaml
, changing the tokens manually.
Copy over .env.example
to .env
and insert your values. Also export the variables with source .env
.
Boot up the container and (for the first time starting the server or after resetting it manually) create an admin user:
docker compose up -d
# Wait for the Server to boot, then register an admin user
docker compose exec -it synapse register_new_matrix_user http://localhost:8008 --config /data/homeserver.yaml --admin --user $ADMIN_USERNAME --password $ADMIN_PASSWORD
Then you can access the homeserver in Element Web or the local admin interface as http://localhost:8008
with your $ADMIN_USERNAME
/$ADMIN_PASSWORD
as username/password.
Store an access token for that user:
curl --request POST \
--url http://localhost:8008/_matrix/client/v3/login \
--header 'Content-Type: application/json' \
--data "{\"type\": \"m.login.password\",\"user\": \"$ADMIN_USERNAME\",\"password\": \"$ADMIN_PASSWORD\",\"device_id\": \"DEV\"}" \
> src/config/synapse_access_token.json
Install NodeJS >= v19 and npm on your system, install the script's dependencies via npm install --omit=optional
.
To finally run the script, execute it via npm start
.
npm test
.
To clean up the Synapse server and local storage database, run either the convenience script ./reset.sh
or start with:
docker compose down
sudo rm files/homeserver.db
rm db.sqlite
Then you can restart with an empty but quite equal server, following the instructions above to start the dev server.
src/emojis.json
can be modified (PRs with additions are appreciated)This FOSS project is open for contributions. Just open an issue or a pull request.
To keep the code clean and properly formatted, install and use pre-commit
.
Install it via pip install pre-commit
Install the repo's pre-commit hooks for yourself: pre-commit install
.
Now it will run whenever you commit something
Run pre-commit against all files: pre-commit run --all-files
Licensed under AGPL v3 or newer. Copyright 2023 verdigado eG support@verdigado.com.
Contact support@verdigado.com to get an offer for personal or commercial support. Community support might be provided through the issue tracker.