This guide walks you through deploying an Oasis PUB on a VPS using the Oasis launcher (sh oasis.sh server). A PUB needs a static, publicly-reachable IP address and an open TCP port (default 8008).
Install the basics:
sudo apt-get update
sudo apt-get install -y git curl build-essential
Install Node.js (Oasis is tested on Node 22; older LTS versions also work for server-only mode):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
nvm alias default 22
cd ~
git clone https://code.03c8.net/krakenslab/oasis oasis
cd oasis
The install.sh script installs Node deps and applies the bundled patches. You can skip the AI model download — a PUB does not need it.
bash install.sh
If the AI model download fails or you skipped it, that's fine. The PUB will run without it.
Edit src/configs/server-config.json:
{
"logging": { "level": "info" },
"caps": { "shs": "zTmidAb7t+tKi7W93FIHbOvlbd936x6G/vm8e8Td//A=" },
"pub": true,
"local": false,
"friends": { "dunbar": 150, "hops": 3 },
"gossip": {
"connections": 50,
"friends": true,
"seed": true,
"global": true
},
"connections": {
"incoming": {
"net": [
{ "port": 8008, "scope": "public", "transform": "shs", "external": "{your-hostname}" },
{ "port": 8008, "host": "localhost", "scope": "device", "transform": "shs" }
],
"unix": [
{ "scope": ["device", "local", "private"], "transform": "noauth" }
]
},
"outgoing": {
"net": [{ "transform": "shs" }]
}
},
"replicationScheduler": {
"autostart": true,
"partialReplication": null
},
"autofollow": {
"enabled": true,
"suggestions": [
"@mGrevRCSX4E5dLgmflWBc50Qkn/1RXUAtDaGHOJ8xB4=.ed25519"
]
}
}
Replace {your-hostname} with your VPS public hostname or IP.
In server-only mode Oasis runs only the SSB sbot, not the web GUI or AI service.
Using tmux (simple):
tmux new -s oasis-pub
cd ~/oasis
sh oasis.sh server
# detach: Ctrl-b, then d
Using systemd (recommended for production). The repo ships a ready-to-use unit file at docs/PUB/oasis-pub.service. Copy it, edit the YOUR_USER placeholders (and the node path if you installed Node via nvm), then enable it:
sudo cp ~/oasis/docs/PUB/oasis-pub.service /etc/systemd/system/oasis-pub.service
sudo nano /etc/systemd/system/oasis-pub.service # replace YOUR_USER, adjust PATH/ExecStart for nvm if needed
sudo systemctl daemon-reload
sudo systemctl enable --now oasis-pub
sudo journalctl -u oasis-pub -f
Tip — if you used nvm to install Node:
which node # e.g. /home/YOUR_USER/.nvm/versions/node/v22.0.0/bin/node
Then in the unit file uncomment the Environment=PATH=... line that points at that nvm bin dir, or replace ExecStart with the absolute node path on src/server/SSB_server.js start.
Data is written to ~/.ssb/.
For administrative actions (creating invites, publishing the PUB profile, announcing) you need the SSB CLI. Install ssb-server globally on the same machine:
npm install -g ssb-server
Then, from the PUB user's shell:
ssb-server whoami
Example response:
{ "id": "@mGrevRCSX4E5dLgmflWBc50Qkn/1RXUAtDaGHOJ8xB4=.ed25519" }
The CLI talks to the running sbot via the unix socket at
~/.ssb/socket, so this works as long asoasis.sh serveris running.
Give your PUB a human-readable name:
ssb-server publish --type about --about {pub-id} --name "{pub-name}"
ssb-server invite.create 1
The number is how many times the code can be redeemed. For an open PUB you might use a large number:
ssb-server invite.create 500
Distribute these codes to people who should join the PUB.
So clients can discover the PUB by its hostname, publish a pub message:
ssb-server publish --type pub --address.key {pub-id} --address.host {your-hostname} --address.port 8008
Example for solarnethub.com:
ssb-server publish --type pub \
--address.key @mGrevRCSX4E5dLgmflWBc50Qkn/1RXUAtDaGHOJ8xB4=.ed25519 \
--address.host solarnethub.com \
--address.port 8008
Federate with other PUBs in the same Oasis network so they replicate each other:
ssb-server publish --type contact --contact {other-pub-id} --following
Example, federating with solarnethub.com:
ssb-server publish --type contact \
--contact "@mGrevRCSX4E5dLgmflWBc50Qkn/1RXUAtDaGHOJ8xB4=.ed25519" \
--following
While the PUB is running, useful inspection commands:
ssb-server status # peer / replication overview
ssb-server gossip.peers # cold-storage peer list with state
ls -la ~/.ssb/ # confirm flume/, blobs/, gossip.json, conn.json exist
sudo journalctl -u oasis-pub -f # tail service logs
sh oasis.sh server does not load the GUI or AI service, so oasis-config.json is ignored in server-only mode. Only server-config.json matters.
If you also run the GUI on the same VPS (sh oasis.sh without server), set aiMod to off in src/configs/oasis-config.json to skip the AI model:
sed -i 's/"aiMod": *"on"/"aiMod": "off"/' src/configs/oasis-config.json
The default seed PUB at solarnethub.com is included in autofollow.suggestions above. As soon as your PUB connects to it (or to any peer that knows about it), gossip propagates the rest of the network's pub list.