Looking to host your own resurviv server to mess around or play against friends? This is the place for you.
Before diving into the setup instructions, make sure you have the correct tools for the job. Hosting a dedicated resurviv server requires two things:
- SSH access to a VPS (or some other form of dedicated hosting)
- The ability to open ports on said machine
You can find cheap VPS hosts at Ionos, A2 Hosting, or Vultr.
NOTE: I am not endorsing or recommending any of the following hosts, they are just a few I have found people to use.
If you accept the risk, you can host a dedicated server on your home network. However, you will need to port forward the necessary ports via your router for others to access your server. Do not do this unless you understand what you are doing. Previous Linux knowledge required.
This tutorial is written assuming you are using Ubuntu 20.04. Follow accordingly based on the distribution you are using.
If you bought a VPS (or other form of hosting) from a hosting company, then these credentials should be accessible via their dashboard. Typically, they will consist of three things:
- IP: The IP of your server.
- Username The username (usually root), to log in with.
- Password: The password to log in with.
Optionally, if your VPS provides SSH access on a different port, that will also be listed.
Open a terminal (Command Prompt for Windows) and write the following command:
ssh username@hostreplacing username and host with your username and host.
If you have a custom SSH port (not 22), then use this instead:
ssh username@host -p portadditionally replacing port with the custom SSH port provided.
After writing this command, hit enter. You will be prompted for a password.
For security reasons, you cannot view your password as you type it. Type in the password, and hit enter.
If you see a notice notifying you of the machine you have just logged into, congratulations! You have succesfully SSH'd into your server.
resurviv requires a few dependencies:
If you are logged in as root, start by making sure sudo is installed:
apt -y install sudoThen install git and nginx with the following command.
sudo apt -y install git nginxTo install Node.js, install the appropriate package from your distro, or for Ubuntu:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - &&\
sudo apt-get install -y nodejsAnd finally, install pnpm:
npm i -g pnpmIF you want to have accounts, leaderboards and IP bans, you will have to install and set-up PostgreSQL database
sudo apt install -y postgresql
sudo systemctl enable --now postgresql
sudo -u postgres createuser survev
sudo -u postgres createdb survev -O survevNext, move into /opt, clone the repository and traverse into it:
cd /opt
git clone https://github.com/NAMERIO/resurviv.git
cd resurvivRun the initial setup script, this will prompt questions and generate a survev-config.hjson file.
If you want to view the config documentation look at configType.ts file
pnpm survev-setupBuild the client & server:
pnpm buildWe will now setup NGINX to serve the client and API server. If you are only hosting a game server you can skip this.
Make sure the build directory has the proper permissions:
sudo chown -R www-data:www-data /opt/resurviv/client/distFirst, remove the default file:
sudo unlink /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/defaultCreate a new file:
nano /etc/nginx/sites-available/resurviv.confAnd populate it with the following content:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# Static files cache
location ~* \.(js|css|jpg|jpeg|png|gif|js|css|ico|svg)$ {
expires 1y;
etag off;
if_modified_since off;
add_header Cache-Control "public, no-transform";
root /opt/survev/client/dist;
}
location ~* \.(html)$ {
etag on;
add_header Cache-Control "no-cache";
root /opt/survev/client/dist;
}
# Client build
location / {
root /opt/resurviv/client/dist;
}
# API server
location /api {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8000";
}
location /private {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8000";
}
# Team WebSocket server
location /team_v2 {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass "http://127.0.0.1:8000";
proxy_redirect off;
}
}Save the file using Ctrl + X, and press Y to confirm the file name.
To enable the configuration:
sudo ln -s /etc/nginx/sites-available/resurviv.conf /etc/nginx/sites-enabled/resurviv.conf
sudo systemctl restart nginxNext, we will create systemd unit files for the Game and API server. which will ensure our application starts at boot and won't terminate if we end our SSH session: If you are only hosting a game server, skip the API server part.
sudo nano /etc/systemd/system/resurviv-game.serviceAnd populate it with the following content:
[Unit]
Description=resurviv dedicated game server.
[Service]
Type=simple
WorkingDirectory=/opt/resurviv/server
ExecStart=/usr/bin/pnpm start:game
Restart=on-failure
[Install]
WantedBy=multi-user.targetSave the file using Ctrl + X, and press Y to confirm the file name.
Enable the unit:
sudo systemctl enable --now resurviv-gameNow do the same for the API server if applicable:
sudo nano /etc/systemd/system/resurviv-api.serviceAnd populate it with the following content:
[Unit]
Description=resurviv dedicated API server.
[Service]
Type=simple
WorkingDirectory=/opt/resurviv/server
ExecStart=/usr/bin/pnpm start:api
Restart=on-failure
[Install]
WantedBy=multi-user.targetSave the file using Ctrl + X, and press Y to confirm the file name.
Enable the unit:
sudo systemctl enable --now resurviv-apiIf you've done everything correctly, you should be able to access the server at http://youriphere (ex: http://1.1.1.1).
Create a systemd unit file for the Bot
sudo nano /etc/systemd/system/survev-bot.servicepopulate it with
[Unit]
Description=survev bot.
[Service]
Type=simple
WorkingDirectory=/opt/survev/bot
ExecStart=/usr/bin/pnpm start
Restart=on-failure
[Install]
WantedBy=multi-user.targetSave and enable the unit:
sudo systemctl enable --now survev-botSet the production website URL in electron/src/main.ts.
Update the version in electron/package.json, then commit and push the changes:
git add electron client .github/workflows/electron-release.yml package.json pnpm-lock.yaml pnpm-workspace.yaml
git commit -m "release: desktop app"
git push origin masterCreate and push a tag matching the Electron version:
git tag desktop-v0.1.0
git push origin desktop-v0.1.0Wait for the Electron Release workflow in GitHub Actions to finish. Then update the production client to show the download buttons:
cd /opt/resurviv
git pull --ff-only
pnpm install --frozen-lockfile
pnpm build
sudo systemctl reload nginx