How to Install a Factorio Server on Debian 11
Factorio is a simulation game developed by Wube Software that lets you build and maintain factories. This guide shows you how to download, install, and configure a Factorio server on a Debian 11 cloud server, using the official Linux server package provided by Wube Software.
Prerequisites
- Deploy a Debian 11 cloud server at Vultr.
- Update the server.
- Create a non-root user with sudo privileges.
To use the Factorio server, you also need your own copy of the game.
1. Download the Factorio Server
Log in as the non-root user.
Make sure you are in your user's home directory.
$ cd
Download the latest version of the Factorio server package.
$ wget -O factorio.tar.xz https://www.factorio.com/get-download/latest/headless/linux64
The file downloaded is in a compressed format. Decompress it using
tar
.$ tar xJvf factorio.tar.xz
Change to the newly extracted folder.
$ cd factorio
2. Create a Save File
The Factorio server requires a save file. You can upload your own save file to the server if you already have one. Or, uses these steps to generate a new save file on the server.
Create a new directory to store the save files.
$ mkdir savegames
Run the factorio binary using the --create flag to generate a new save file. If you have already uploaded your own save file, you can skip this step.
$ bin/x64/factorio --create ./savegames/world.zip
This generates a new save file called world.zip
in the savegames
folder.
3. Create a Configuration File
Factorio includes a default server configuration file, which you can use as a template.
Make a copy of the default file.
$ cp data/server-settings.example.json server-settings.json
Edit the new configuration file.
$ nano server-settings.json
You should read the comments in the configuration file and make any changes you need for your server.
4. Firewall Configuration
Debian 11 has the ufw
firewall enabled by default, which blocks connections from the internet. You need to create a new firewall rule to allow connections on the Factorio server's default port. If you changed the default port in the server-settings.json
file, you need to change it in the ufw allow
command too.
$ sudo ufw allow 34197/udp
Reload ufw
to apply the new rule.
$ sudo ufw reload
Check the status of ufw
. It should list your newly created firewall rule.
$ sudo ufw status
If you are using a Vultr Firewall on your VPS, you need to create a similar rule in the Vultr Firewall control panel.
5. Test the Server
You're now ready to start the server for the first time. After the server has started, you can test it by connecting to your VPS's IP address in the Factorio multiplayer menu. You can find the IP address on the Instances tab in the Vultr control panel.
$ bin/x64/factorio --start-server ./savegames/world.zip --server-settings ./server-settings.json
After you've finished testing the server, stop it using Ctrl+C.
6. Create a System Service for the Server
Creating a system service allows you to start and stop the Factorio server using systemctl
commands. It also starts the server automatically when your VPS boots.
Make sure you are in your user account's home directory.
$ cd
Move the Factorio server files to /opt
.
$ sudo mv factorio /opt/
Create a new user called factorio
. You will use this account to run the Factorio server, instead of running it as the root user.
$ sudo useradd factorio
Set the new factorio
user as the owner of all files in the /opt/factorio
directory.
$ sudo chown -R factorio:factorio /opt/factorio
Switch to the factorio
user.
$ sudo su factorio
Test the new user account by starting the Factorio server. Check the output and look for any errors.
$ /opt/factorio/bin/x64/factorio --start-server /opt/factorio/savegames/world.zip --server-settings /opt/factorio/server-settings.json
If there are no errors, your new user account is working. Stop the server using Ctrl+C. You can now switch back to your own user account.
$ exit
Create a new service file. This tells systemd
how to execute the new service.
$ sudo nano /etc/systemd/system/factorio.service
Paste in the following configuration:
[Unit]
Description=Factorio Server
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=3
User=factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server /opt/factorio/savegames/world.zip --server-settings /opt/factorio/server-settings.json
[Install]
WantedBy=multi-user.target
After saving the file, reload the systemd daemon to make sure that it detects the new service.
$ sudo systemctl daemon-reload
Enable the service, so that it starts at boot.
$ sudo systemctl enable factorio.service
Start the service.
$ sudo systemctl start factorio.service
Check the status of the service to ensure that the Factorio server started correctly.
$ sudo systemctl status factorio.service
You can now connect your Factorio client to the VPS's IP address to test the server again. The server will start automatically when your VPS boots. If you need to stop the server, you can use the systemctl stop
command.
$ sudo systemctl stop factorio.service
Conclusion
In this article, you installed a Factorio server and set it up to run as a system service. You can learn more about how to run a Factorio multiplayer server on the Factorio website.