Nostr relay
A nostr relay written in Rust with support for the entire relay protocol and data persistence using PostgreSQL or SQLite.
What is Nostr?
Nostr is a straightforward and open protocol for global, decentralized, and censorship-resistant social media. It offers numerous advantages for users and is completely free, requiring no ID or third-party verification to begin connecting with like-minded individuals and expanding your community. While nostr is sometimes confused as just another social media platform, it goes beyond that. Explore the resources provided here to discover its significant potential.
This protocol is based on relays. Relays are servers that can be operated by anyone. By opening a persistent connection with the server, clients (or apps) can push and pull events in real-time.
Relays are the central element of the nostr protocol, responsible for storing events received from clients.
Crucially, relays do not communicate with each other. Only the relays you're connected to will receive and store your events. This is a key feature of nostr, emphasizing the lack of communication between relays. Therefore, you should connect to as many relays as you wish to share your data with.
Clients should always provide users the flexibility to connect to multiple relays. Users can also decide whether they want to read, write, or do both with the relays they're connected to. This means I can choose to connect to a specific relay to access content without necessarily sharing my own events there, or vice versa.
You can obtain more info about nostr on these additional resources:
Requirements
Others
Preparations
Install dependencies
With user
admin
, update and upgrade your OS
Make sure that all necessary software packages are installed
If you want to use the default SQLite database backend, go to the Use the default SQLite database backend extra section to install the additional SQLite dependency packages
Install Rustup + Cargo
Check if you already have Rustup installed
Example of expected output:
Also Cargo
Example of expected output:
If you obtain "command not found" output, you need to follow the Rustup + Cargo bonus guide to install it and then come back to continue with the guide
Install PostgreSQL
Skip this step if you want to use the SQLite database, go directly to the next section
Check if you already have PostgreSQL installed
Example of expected output:
If you obtain "command not found" outputs, you need to follow the PostgreSQL bonus guide to install it and then come back to continue with the guide
Create PostgreSQL database
With user
admin
, create a new database with thepostgres
user and assign as the owner to theadmin
user
Installation
With user
admin
, go to the temporary folder
Clone the source code directly from the GitHub repository, and then build a release version of the relay and go to the
nostr-rs-relay
folder
Build a release version of the relay
If the prompt shows you this error:
error: rustup could not choose a version of cargo to run, because one wasn't specified explicitly, and no default is configured. help: run 'rustup default stable' to download the latest stable release of Rust and set it as your default toolchain.
You need to type rustup default stable
and wait for the process to finish, then try again the command before
Install it
Check the correct installation
Example of expected output:
If you come to update this is the final step, continue with the indications of the Upgrade section
Create the nostr user
Create the user
nostr
with this command
Expected output:
Change to the home
nostr
user folder
(Optional) If you want to use the MiniBolt
favicon.ico
file, download it by entering this command, if not, download your own or skip this step not to provide any (remember to leave thefavicon.ico
commented on the configuration file)
Create the
rs-relay
folder
Exit to the
admin
user
Configuration
Copy-paste the configuration file template to the before-created folder
Assign the owner of the file to the
nostr
user
(Optional) Delete the
nostr-rs-relay
folder to be ready for the next update
Edit the config file, uncomment, and replace the needed information on the next parameters. Save and exit
Customize this with your own info (*):
(*) Click on parameter to get an example/explanation
If you don't have pubkey generated yet, you can follow the Create your nostr key pair section and then continue with this
You can use this tool to convert your "npub" pubkey to hexadecimal format
If you want to use the default SQLite database backend, pay attention to not including the next lines (not uncomment):
engine = "postgres"
connection = "postgresql://admin:admin@localhost:5432/nostrelay"
Uncomment and replace only the next line:
data_directory = "/data/nostr/rs-relay/db"
-> More details and additional steps on the exclusive extra section
Required same as next (*):
(*) click on the parameter to get action to do (<Edit> or <Uncomment>)
If you want, use the same favicon.ico
file downloaded before (the relay's icon of MiniBolt) and the value relay_icon
parameter (URL -> https://twofaktor.github.io/logo_circle%2BB.png), or replace it with your own info
Create systemd service
The system needs to run the nostr relay daemon automatically in the background, even when nobody is logged in. We use systemd
, a daemon that controls the startup process using configuration files.
As user
admin
, create the service file
Paste the following configuration. Save and exit
Enable autoboot (optional)
Prepare “nostr-relay” monitoring by the systemd journal and check the logging output. You can exit monitoring at any time with Ctrl-C
Run
To keep an eye on the software movements, start your SSH program (eg. PuTTY) a second time, connect to the MiniBolt node, and log in as admin
Start the nostr relay
Ensure the service is working and listening at the default
8880
port
Expected output:
Cloudflare tunnel
Follow the Cloudflare Tunnel bonus guide, when you arrive at the Configuration file section, add the next # Nostr relay
lines to ingress the related ingress rule
Remember to keep - service: http_status:404
line at the end of the file
Restart the Cloudflared service
Check the Cloudflared logs to ensure all is still OK
Check relay connection
-> 3 different methods ⬇️
Go to the nostr.watch website to check and test the relay connection
Access to the URL, replacing
<relay.domain.com>
with your Nostr relay URL:https://nostr.watch/relay/relay.domain.com,
example: https://nostr.watch/relay/relay.damus.io
Expected output:
Extras (optional)
Use the default SQLite database backend
With user
admin
, install the next additional dependencies
Create the
rs-relay
anddb
folder
Assign as the owner to the
nostr
user
Edit the config file
Uncomment, and replace the needed information on the next parameters. Save and exit
Ignore the next lines related to the PostgreSQL (not uncomment or edit):
Delete
postgres.service
of the systemd service lines
Continue with the guide, the rest of the steps are the same as PostgreSQL use
Create your nostr key pair
Download and install the Alby Browser extension:
For Firefox-based browser:
Tor browser <- Follow this guide to enable the Alby extension using the Tor browser
After installation, the browser automatically redirects you to choose the password to unlock Alby. Click on the [Next] button
Select a strong password for the Alby extension (this password is for encrypting your future Nostr private key and possible funds of the integrated LN wallet)
Select [Connect with Alby]
Login with your existing account or create a new one
If you selected to create a new one, you need to provide a valid email
If you selected to log in, you need to provide the email and password or select a one-time login code method that you chose
Click on [Start buzzin' with Alby]. Pin the Alby extension to the browser toolbar, if you want
On the Alby dashboard, select the [Nostr section]
Select to create a new one nostr key pairs or import an existing one if you have
If you selected to create a new one, remember to backup the seed shown on the screen, check the verification box, and click on the [Save Master Key] box
You will see the nostr public & private keys in the property section:
Click on the [Nostr Settings] box to obtain your private key and backup on your password manager app, you will need it for mobile clients (e.g. Amethyst) where you will need to enter manually. Example:
If you selected Import a Nostr account, you can import using the Nostr private key or Recovery phrase
If you selected the Nostr private key, fill in the "Nostr Private key" box with your private key, it will derivate you the "Nostr Public Key", check if correct
If you see this banner when you enter the "Nostr Settings" section, this means that you should backup carefully the private key, because the existing seeds that you have are not compatible with Alby only the private key
If you selected the Recovery phrase, fill in the 12-24 words and click on the [Import Master Key] box
You will see the Nostr Public key in the property section, check if correct:
Click on the [Nostr Settings] box to obtain your private key if you don't have yet:
Now, you can use Alby to log in to compatible web clients using NIP-07 [Login from extension]
If you prefer to generate your key pair, you can mine them using the Rana tool and the Minibolt node.
Be careful when doing this, as it will use all the available resources of the machine and could render other important applications you are running unusable. Gracefully shutdown them before starting this process
Broadcast the past events to your new relay (optional)
If you want all your past events to be accessible through your new relay, you can back them up by following these instructions:
Go to metadata.nostr.com website, log in [Load My Profile], and click on [Relays]
Add your new Nostr relay
[wss://relay.domain.com]
address to the list of preferred relays in your profile (in the empty box below), select the read+write option, and click the [Update] button.You can take the opportunity to add more preferred relays to your profile to also push events to them, selected from this list, or use Nosy to find the top relays of those who follow you or you follow and try to connect to them and don't forget any events of your contact network
Go to nostryfied.amethyst.social webpage and log in [Get from extension] (Alby), or manually enter the [npub...] of your Nostr profile
Click the [Backup & Broadcast] button...
Please wait patiently until all processes are finished. This might take some time, depending on the number of events you've published on Nostr with that pubkey meaning the interactions you've had on Nostr.
Optionally, you can save a copy of all your events locally as you'll have the download option.
Nostr clients
Pleb.to
does NOSTR things... documents, links, graphs, maps, and more... Pleb.to
is a portal to your decentralized data.
A free, open source, and decentralized password manager, powered by NOSTR.
Upgrade
With user
admin
, stopnostr-rs-relay
service
Follow the complete Installation section
Replace the
config.toml
file with the new one of the new version (if needed)
This step is only necessary if you see changes on the config file template from your current version until the current release (not common), you can display this on this history link. If there are no changes, jump directly to the next "Start nostr-rs-relay
service again" >sudo systemctl start nostr-relay
Backup the
config.toml
file to keep a copy of your old configuration
Assign the owner of the backup file to the
nostr
user
Replace the new
config.toml
file of the new release
Edit the config file and replace it with the same old information as the file you had. Save and exit
Start
nostr-rs-relay
service again
Delete the
nostr-rs-relay
folder to be ready for the next update
Uninstall
Uninstall service
With the user
admin
, stop nostr-relay
Disable autoboot (if enabled)
Delete
nostr-relay
service
Delete user & group
Delete the nostr user. Don't worry about
userdel: nostr mail spool (/var/mail/nym) not found
output, the uninstall has been successful
Delete SQLite data directory (if used)
Delete the nostr relay data folder
Delete the PostgreSQL database (if used)
Delete the
nostrelay
database
Uninstall the nostr relay of the Cloudflare tunnel
Staying with user
admin
, editconfig.yml
Comment or delete the nostr relay associated ingress rule. Save and exit
Restart the Cloudflare tunnel to apply the changes
Uninstall binaries
With the user
admin
, delete the nostr-rs-relay binary of the system
Port reference
Last updated