rite-cloud
A cloud backup solution for the rite text editor. Written in Rust using Tide.
Usage
You can try out rite-cloud
using the instance hosted here. If you would like to host your own instance of rite-cloud, read on.
Self-hosting
You'll need a working Rust toolchain, and openssl
and sqlite3
installed.
Clone the repository and cd into it.
git clone https://github.com/xyzshantaram/rite-cloud
cd rite-cloud
Since rite uses GitHub for authentication, you will need to create a GitHub app and generate a client secret. Note down the redirect URL you set here, we'll use it later.
Once this is done, you'll need to set the following environment variables:
CLIENT_ID
- The client ID of the GitHub app you created in the last step.CLIENT_SECRET
- The client secret you generated in the last step.APP_URL
- The local URL where you want your app to be, along with the port number. For example:127.0.0.1:8080
.TOKEN_URL
- The URL where the app will obtain its access token from. Set it tohttps://github.com/login/oauth/access_token
.AUTH_URL
- The URL where the app will use for authorization. Set it tohttps://github.com/login/oauth/authorize
.REDIRECT_URL
- The URL that GitHub will redirect to on successful auth. It should be the URL of where your app is hosted, followed by the string/auth/github/authorized
. For example, the instance at https://riteapp.co.in has the REDIRECT_URLhttps://riteapp.co.in/auth/github/authorized
TIDE_SECRET
- A string to use as the cookie signing secret. MUST be atleast 32 bytes long and should be cryptographically random to be secure.DATABASE_URL
- A path to an sqlite db (will be created if it doesn't exist) that will be used as the rite database.FILE_LIMIT
- the maximum size of an upload request.
Finally, run the app with cargo run --release
. You should be able to open it by navigating to the APP_URL
.
systemd service
To make your Rite Cloud instance start on boot, carry out the following steps:
Copy files
cd rite-cloud
cargo build --release
sudo mkdir /opt/rite-cloud
sudo cp "$PWD/target/release/rite-cloud" "/opt/rite-cloud/rite-cloud"
sudo chmod +x /opt/rite-cloud/rite-cloud # make it executable
sudo cp -r "$PWD/res" "/opt/rite-cloud/res"
sudo cp -r "$PWD/templates" "/opt/rite-cloud/templates"
Create a storage directory
sudo mkdir -p /opt/rite-cloud/storage
Set up the start script
Copy the start-rite-cloud.sh
script to /opt/rite-cloud/start-rite-cloud.sh
. Open it with your editor of choice and edit it to add the required environment variables.
sudo cp install-files/start-rite-cloud.sh /opt/rite-cloud/start-rite-cloud.sh
sudo nano /opt/rite-cloud/start-rite-cloud.sh
Make sure it is executable.
sudo chmod +x /opt/rite-cloud/start-rite-cloud.sh
Set up the systemd service
Next, copy the rite-cloud.service
file to /etc/systemd/system
and give it the correct permissions.
sudo cp install-files/rite-cloud.service /etc/systemd/system/rite-cloud.service
sudo chmod 644 /etc/systemd/system/rite-cloud.service
Finally, enable the service with systemctl
.
sudo systemctl enable rite-cloud
You should now have an instance of rite-cloud set up that starts when your server does.
Updating
To update your rite-cloud instance, pull the latest copy of the source, build it, and then copy over the files to /opt/rite-cloud
again.
cd rite-cloud
git pull
cargo build --release
sudo cp "$PWD/target/release/rite-cloud" "/opt/rite-cloud/rite-cloud"
sudo chmod +x /opt/rite-cloud/rite-cloud # make it executable
sudo cp -r "$PWD/res" "/opt/rite-cloud/res"
sudo cp -r "$PWD/templates" "/opt/rite-cloud/templates"
Uninstalling
To uninstall, just disable the service, and remove the /opt/rite-cloud
dir along with /etc/systemd/system/rite-cloud.service
.
Acknowledgements
- async-sqlx-session used under the terms of the MIT license. I've temporarily forked it to fix the version of async-session until Tide updates with the correct fixes to the SQLite session middleware.
Contributing
To contribute code, feature ideas or bug reports, open an issue, or fork the repo and make a PR.
If you would like to help out with hosting costs or just like using rite-cloud, you can support me financially using one of the means listed here.