Contenu

Créer et automatiser un serveur Valheim via SteamCMD 🎮

Introduction

Vous êtes chez vous et vous vous ennuyez ? Vous payez tous les mois un VPS et vous ne savez pas quoi en faire ? Vos amis et vous avez l’envie soudaine de ramasser des champignons 🍄 et de vous faire rouler dessus pas des monstres dans un monde impitoyable aux graphismes de PS2 et aux effets de lumière saisissants ?
Ne cherchez plus, le temps est venu pour vous d’installer votre propre serveur dédié de VALHEIM !

1. Installation des packages

Steam propose une CLI baptisée SteamCMD qui permet d’installer tout ce qui est trouvable sur Steam via la ligne de commande.

1
sudo apt install steamcmd

Architecture 32 bits

Si vous avez une machine en architecture 32 bits, vous aurez besoin d’ajouter le repo multiverse :

1
2
3
4
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32gcc1 steamcmd
Attention

Si ça vous dit sudo: add-apt-repository: command not found
il faut installer software-properties-common et mettre à jour apt-get

1
2
sudo apt-get install software-properties-common
sudo apt-get update

L’installer de SteamCMD va vous présenter le contrat de license (faites TAB pour vous déplacer sur OK puis faites ENTREE). Déplacez vous ensuite sur I ACCEPT avec ⬇️ et faites ENTREE.

/creer-et-automatiser-un-serveur-steam-cmd/steamcmd-installer.png
Retour en 98

Tab pour se déplacer sur OK, les flèches pour choisir I ACCEPT

2. Création d’un utilisateur dédié “steam”

On va créer un utilisateur steam qui servira à faire les opérations d’installation et de lancement du serveur et des tâches annexes liées à celui-ci.

1
2
3
4
5
6
7
8
# Créer l'utilisateur avec son /home et set son shell par défaut
sudo useradd -m steam -s /bin/bash

# Créer le mot de passe de l'utilisateur
sudo passwd steam

# Changer d'utilisateur pour "steam"
su - steam

3. Création d’un lien symbolique et lancement de SteamCMD

1
2
ln -s /usr/games/steamcmd steamcmd
steamcmd

4- Sur le shell SteamCMD

1
2
3
4
login anonymous
force_install_dir ./valheim_server/
app_update 896660 validate
quit

ou en une seule ligne :

1
steamcmd +login anonymous +force_install_dir ~/valheim_server/ +app_update 896660 validate +exit

5- Customiser le serveur

1
2
3
4
5
6
7
# partir d'un fichier vierge :
vim start_server_custom.sh

# ou pour partir d'une base :
cp start_server.sh start_server_custom.sh
vim start_server_custom.sh
chmod +x start_server_custom.sh

coller ce script :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

export templdpath=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
export SteamAppId=892970

# Update server before start-up
/home/steam/steamcmd +login anonymous +force_install_dir /home/steam/valheim_server +app_update 896660 +quit

# Start server
./valheim_server.x86_64 -name "Croclardon Gaming" -port 2456 -nographics -batchmode -world "Croc World" -password "sucerlabite" -public 1

export LD_LIBRARY_PATH=$templdpath

6- Créer un service pour gérer le serveur

Gérer l’état du serveur à la main peut s’avèrer éreintant.
Pour s’astreindre d’une telle tâche, on va passer par la création d’un service qui sera piloté via systemctl.

1
vim /etc/systemd/system/valheimserver.service

et y ajouter ce contenu :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Unit]
Description=Valheim Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5
StartLimitInterval=180s
StartLimitBurst=3
User=steam
Group=steam
ExecStartPre=/home/steam/steamcmd +login anonymous +force_install_dir /home/steam/valheim_server +app_update 896660 validate +exit
ExecStart=/home/steam/valheim_server/start_server_custom.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
WorkingDirectory=/home/steam/valheim_server
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

Penser à recharger le daemon systemd :

1
2
3
4
systemctl daemon-reload

# Vérifier que la unit est bien dans la liste :
systemctl list-units | grep valheim

7- Gérer le service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Démarrer le service
systemctl start valheimserver.service

# Voir le status du service (up, down)
systemctl status valheimserver.service

# Démarrer le service au démarrage du serveur
systemctl enable valheimserver.service

# Checker les logs du service
journalctl --unit=valheimserver.service --reverse -f

8- Automatiser les redémarrage & les backups

On va créer un petit script qui servira à faire une sauvegarde du world et à redémarrer le serveur (pour vider la mémoire et éviter que le serveur rame)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# On se place dans le dossier contenant les worlds
cd /home/steam/.config/unity3d/IronGate/Valheim/worlds

# On créer le dossier "backup" s'il n'existe pas déjà un cran en dessous et on copie les fichier .db et .fwl dedans
mkdir ./backup/ && cp Valdaland.db Valdaland.fwl ./backup/

# Dans ce dossier on renomme les fichiers avec le timestamp
cd ./backup
mv Valdaland.db Valdaland_$(date +%F-%H-%M).db
mv Valdaland.fwl Valdaland_$(date +%F-%H-%M).fwl

# On redémarre le service
systemctl restart valheimserver.service

Ce script devra être lancé chaque jour à 4h du matin pour s’assurer de ne perturber personne.

1
2
3
4
5
# Pour cela on va créer un cron job
crontab -e

# et on va simplement ajouter cette ligne
0 4 * * * /home/steam/valheim_server/backup-and-restart.sh

Bonus #1 - Importer une sauvegarde de monde existant

Si vous aviez un serveur hébergé sur votre machine perso est que vous ne voulez pas recommencer un nouveau monde, les sauvegardes se trouvent ici :

1
2
3
4
5
# Windows local game save location
C:\Users\{username}\AppData\LocalLow\IronGate\Valheim\worlds

# Linux server game save location
/home/steam/.config/unity3d/IronGate/Valheim/worlds

Bonus #2 - Ne pas s’ennuyer avec tout ça et utiliser AMP

AMP (pour Application Manager Protocol) et un outils développé par Cubecoders.
Son but est de rendre extrèmement simple la gestion de serveurs de jeux Steam en offrant la possibilité, via une interface graphique, de créer, lancer et monitorer des serveurs.

/creer-et-automatiser-un-serveur-steam-cmd/amp.png
L’interface est clean

Les développeurs sont très actifs et répondent rapidement en cas de soucis via leur Discord. La license ‘perso’ coûte un peu moins de 10e et est valide à vie, pour 5 instances d’AMP en simultané.

L’avantage d’une telle solution est qu’elle permet de déployer facilement des serveurs de jeux qui ne tournent pas encore sous Linux (comme VRising lors de sa sortie par exemple) via un habile enrobage de WINE dans un conteneur Docker.
Rien d’insurmontable si on décide de le faire soit-même, mais ça reste un confort certain.

Outro

Amusez-vous bien !

Références