Simple With Whitelisting (sw2) is a nostr relay that displays and accepts notes only from whitelisted pubkeys.
It's built on the Khatru framework.
- Go: Ensure you have Go installed on your system. You can download it from here.
- Build Essentials: If you're using Linux, you may need to install build essentials. You can do this by running
sudo apt install build-essential
.
This relay can suit a variety of uses:
- Running a small community: Community members are whitelisted to read and post notes.
- Running a knowledge base: Users are whitelisted to read notes, but only administrators can post notes.
- Running a blind dropbox: Users are whitelisted to post notes, but only the administrator can read notes.
- Combinations of the above: A Community where members can read and post, and guests can read only.
Follow these steps to get the sw2 Relay running on your local machine:
git clone https://github.com/bitvora/sw2.git
cd sw2
You'll need to create an .env
file based on the example provided in the repository.
cp .env.example .env
Open the .env
file and set the necessary environment variables. Example variables include:
RELAY_NAME="utxo's bot relay"
RELAY_PUBKEY="e2ccf7cf20403f3f2a4a55b328f0de3be38558a7d5f33632fdaaefc726c1c8eb"
RELAY_DESCRIPTION="all my bots will use this relay"
RELAY_URL="wss://bots.utxo.one"
RELAY_ICON="https://pfp.nostr.build/d8fb3b6100a0eb9e652bbc34a0c043b7f225dc74e4ed6d733d0e059f9bd444d4.jpg"
RELAY_CONTACT="https://utxo.one"
Open the read_whitelist.json
file and add pubkeys to the array
{
"pubkeys": [
"1c6cb22996baabe921bcd45c8b6213b2dab096f88e4ba5678d43d195a1868551",
"9c5d0b120f01b75292d2a2bc32972bf918c8dd8927eaa633d3f62e181a292b27",
"1bda7e1f7396bda2d1ef99033da8fd2dc362810790df9be62f591038bb97c4d9"
]
}
If the read_whitelist.json
contains no pubkeys {"pubkeys": []}
, then all users are authorised to read.
Open the write_whitelist.json
file and add pubkeys to the array
{
"pubkeys": [
"1c6cb22996baabe921bcd45c8b6213b2dab096f88e4ba5678d43d195a1868551",
"9c5d0b120f01b75292d2a2bc32972bf918c8dd8927eaa633d3f62e181a292b27",
"ede41352397758154514148b24112308ced96d121229b0e6a66bc5a2b40c03ec"
]
}
If the write_whitelist.json
contains no pubkeys {"pubkeys": []}
, then all users are authorised to write.
To maintain compatibliity with previous versions of SW2, a file whitelist.json
can be used instead of write_whitelist.json
if you prefer.
Run the following command to build the relay:
go build
To have the relay run as a service, create a systemd unit file.
- Create the file:
sudo nano /etc/systemd/system/sw2.service
- Add the following contents:
[Unit]
Description=sw2 Relay Service
After=network.target
[Service]
ExecStart=/home/ubuntu/sw2/sw2
WorkingDirectory=/home/ubuntu/sw2
Restart=always
[Install]
WantedBy=multi-user.target
- Reload systemd to recognize the new service:
sudo systemctl daemon-reload
- Start the service:
sudo systemctl start sw2
- (Optional) Enable the service to start on boot:
sudo systemctl enable sw2
the relay may not have permissions to read and write to the database. To fix this, you can change the permissions of the database folder:
sudo chmod -R 777 /path/to/db
You can serve the relay over nginx by adding the following configuration to your nginx configuration file:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3334;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Replace yourdomain.com
with your actual domain name.
After adding the configuration, restart nginx:
sudo systemctl restart nginx
If you want to serve the relay over HTTPS, you can use Certbot to generate an SSL certificate.
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
After installing Certbot, run the following command to generate an SSL certificate:
sudo certbot --nginx
Follow the instructions to generate the certificate.
Once everything is set up, the relay will be running on localhost:3334
or your domain name if you set up nginx.