Multiplayer-Linux
Linux Dedicated Server Setup Instructions[edit]
Instructions for setting up a dedicated Multiplayer server on a Debian based distribution.
We will be using SteamCMD to install and update the server.
Install steamCMD dependencies using the commands below, either as root or a user with sudo privileges.
sudo dpkg --add-architecture i386 \ sudo apt update \ sudo apt install -y lib32gcc1 \ sudo apt install -y lib32gcc-s1
Create the user who will run the server.
sudo useradd --create-home necesse
Change to the necesse user and go to it's home directory, where we will be installing steam and the server files.
su - necesse ; cd /home/necesse
Then download and unzip SteamCMD
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
Create the configuration file that will manage steamCMD
cat >$HOME/update_necesse.txt <<'EOL' @ShutdownOnFailedCommand 1 //Set to 0 if updating more than one server. @NoPromptForPassword 1 force_install_dir /home/necesse/ login anonymous // Necesse dedicated server is available as anonymous. Thank you Fair! app_update 1169370 validate quit EOL
Run steamCMD and point it at the config file to install and update the server.
./home/necesse/steamcmd.sh +runscript $HOME/update_necesse.txt
This will take a few minutes. SteamCMD will first update itself, then download the server files.
This command will also update the server files. Either run it as a cron job or manually as needed.
You can now start the Necesse server with
./StartServer-nogui.sh
You will have to answer a few questions each time the server launches.
To start the server with no interaction, use the -world [Save name] Argument.
Example:
./StartServer-nogui.sh -world SaveGame1
Ports[edit]
Default port is, 14159
You will need to do port forwarding and find your IP address to give to friends. There is already a write-up about this on the wiki.
File Locations[edit]
By default
The server configuration file is named "server.cfg" and is located at ~/.config/Necesse/cfg
The world configuration file is named "worldSettings.cfg" and is located at ~/.config/Necesse/saves/YourWorldNamehere.zip
The save data is the .zip named according to the world name, and is located at ~/.config/Necesse/saves
The server logs are found at ~/.config/Necesse/logs
You can also force configs to the game directory with the -localdir parameter in the shell script file.
Example:
./StartServer-nogui.sh -localdir
Docker Instructions[edit]
Running Necesse using Docker is also possible.
Create a Dockerfile in an empty directory:
# Use a base image FROM debian:bullseye-slim # Add user 'necesse', don't run stuff as root!! ARG user=necesse ARG group=necesse ARG uid=1000 ARG gid=1000 RUN groupadd -g ${gid} ${group} RUN useradd -u ${uid} -g ${group} -s /bin/bash -m ${user} RUN dpkg --add-architecture i386 RUN apt update; apt install -y ca-certificates-java RUN apt update; apt install -y lib32gcc-s1 curl openjdk-17-jre-headless # Download and extract SteamCMD RUN mkdir -p /steamapps RUN curl -sqL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxvf - -C /steamapps WORKDIR /steamapps # Create the update_necesse.txt file RUN echo '@ShutdownOnFailedCommand 1' >> update_necesse.txt \ && echo '@NoPromptForPassword 1' >> update_necesse.txt \ && echo 'force_install_dir /app/' >> update_necesse.txt \ && echo 'login anonymous' >> update_necesse.txt \ && echo 'app_update 1169370 validate' >> update_necesse.txt \ && echo 'quit' >> update_necesse.txt RUN echo $(date) && ./steamcmd.sh +runscript update_necesse.txt # Saves will be available under /root/.config/Necesse/saves RUN chown -R 1000:1000 /app RUN mkdir -p /home/necesse/.config/Necesse RUN chown -R 1000:1000 /home/necesse USER ${uid}:${gid} # Set the working directory and create entrypoint.sh WORKDIR /app RUN echo '#!/bin/sh' > entrypoint.sh && \ echo 'java -jar Server.jar -nogui -world "$WORLD_NAME"' >> entrypoint.sh && \ chmod +x entrypoint.sh # Set the entry point for the container CMD ["./entrypoint.sh"]
Build the image:
docker build -t necesse .
Now run the container interactively once to create a world:
docker run --rm -it -v necesse_data:/home/necesse.config/Necesse necesse java -jar Server.jar -nogui
Please remember the world name!
Now you can run the docker forever, create a file called start_necesse.sh and make it executable by running chmod +x start_necesse.sh:
docker stop necesse docker rm necesse docker build -t necesse . docker run -d --name necesse \ -e WORLD_NAME=my_world\ -p 14159:14159/udp \ -v ./data:/home/necesse/.config/Necesse \ --restart always \ necesse
If there is an update you can run start_necesse.sh again and it will update to the latest version available on Steam and automatically start.