Bon, ceci n'est pas vraiment un tuto pour tout le monde, c'est plus pour les bidouilleurs et bidouilleuses info et ma propre mémoire. Ne faites pas ce que je fais, à moins de bien aimer bricoler les ordinateurs, sinon ça n'a que peu d'utilité, en plus je ne suis pas très pédagogue sur le vocabulaire que j'utilise. Si vous ne voulez pas vous prendre la tête, je vous recommande vous faire héberger par des pros ou de lancer le serveur FoundryVTT sur votre station de travail.

Moi et mon RPI qui propulse mon servreur FoundryVTT.
Si malgré tout, vous vous voulez faire pareil, j'utilise un RPI 4B avec 8 Go de RAM et les dernières versions de Raspian sans interface graphique. Le tuto part du principe que vous êtes à l'aise avec la ligne de commande sous Unix et que vous ayez des bases de DNS, de SSL et que vous sachiez rediriger un port depuis votre routeur vers une machine dans votre réseau. Ha, et il faut que votre ligne ait un bon débit montant. Ce tuto devrait fonctionner avec toutes les variantes de Debian voire de Linux. Il se base sur la doc officielle de FoundryVTT, sous le titre Hosting a Dedicated Server with NodeJS.
Une fois ce tuto terminé, vous aurez un serveur FoundryVTT sur une petite boîte chez vous, dans un conteneur Podman, avec un répertoire de données persistantes sauvegardées, accessible depuis une URL avec un nom de domaine via SSL.
Pour celles et ceux qui se posent la question de pourquoi mettre son serveur FoundryVTT chez soi avec du SSL et un nom de domaine, je dirai que c'est quand on aime bricoler (Raspberry Pi), qu'on veut que ce soit pratique d'accès (DNS) et un peu sécurisé (SSL, Podman, sauvegarde des données). Après, la vraie solution tout confort, c'est de se faire héberger par des pros.
Pourquoi utiliser un conteneur Podman ? Mon idée est de ne pas sagouiner mon raspberry Pi avec tout un tas de logiciels, le conteneur permet de monter et casser un serveur sans altérer l'hôte. Ensuite, si le serveur FoundryVTT est compromis, un conteneur, c'est se donner une chance de ne pas atteindre le serveur hôte tout de suite, le forban devant d'abord sortir du conteneur. Podman est nativement sans root, le flibustier éventuel se retrouvera donc avec des droits utilisateurs normaux s'il sort du conteneur (bon en vrai, s'il a déjà réussi à faire tout ça, j'imagine que le root n'est pas loin de lui !). Je n'ai pas trouvé de doc facile pour Podman, j'ai appris à utiliser la techno avec le livre Podman for Devops.
Fabriquer l'image Podman et lancer un conteneur
Vous pouvez suivre la documentation se trouvant ici : <https://github.com/nlegrand/build_foundry_vtt_image>.
Il existe plein d'autres méthode que vous pourrez trouver ici wiki communautaire de FoundryVTT, dont une image complète directement téléchargeable. En ce qui me concerne, voici le Dockerfile :
# syntax=docker/dockerfile:1
FROM node:16-bullseye
USER node
RUN mkdir -p /home/node/data
RUN mkdir -p /home/node/app
COPY files /home/node/app
WORKDIR /home/node/app
RUN unzip foundryvtt.zip
RUN rm foundryvtt.zip
CMD ["node", "/home/node/app/resources/app/main.js", "--headless", "--dataPath=/home/node/data" ]
EXPOSE 30000
On crée le répertoire de données persistantes et on le rend lisible par l'utilisateur qui lancera l'image podman :
mkdir ~/data
podman unshare chown -R 1000:1000 ~/data/
On peut ensuit cloner le dépôt, télécharger l'application FoundryVTT, construire et lancer l'image :
git clone https://github.com/nlegrand/build_foundry_vtt_image.git
mkdir files && cd files
wget -O foundryvtt.zip YOUR-FOUNDRY-TMP-LINK
cd ..
podman build -t=MY-IMAGE-NAME -f Dockerfile
podman run -v /home/YOUR_ID/YOUR_PERSISTENT_DATA:/home/node/data -p 30000:30000 --name MY-CONTAINER-NAME MY-IMAGE-NAME
Vous pouvez normalement atteindre le conteneur sur le port 30000 de l'hôte. On peut utiliser podman {start,stop,attach} id_conteneur pour charger le conteneur. C^C avec le conteneur attaché arrête le conteneur.
podman ps -a affiche tous les conteneurs en cours. podman exec -u root -ti bash permet d'obtenir un shell root dans le conteneur si vous voulez aller vérifier des trucs.
Activer le SSL avec un bon certificat
La technologie SSL permet de chiffrer la communication entre les machines de vos joueurs et votre serveur. Cela rend plus difficile à des intercepteurs de lire vos communications. Pour éviter les messages d'alerte sur les navigateurs, il est nécessaire d'avoir un certificat délivré par une autorité reconnue. J'utilise ici en certificat Let's Encrypt généré avec Certbot. Pour avoir un certificat, il est nécessaire que son IP soit rattachée à un nom de domaine.
On peut se créer un nom de domaine gratuitement sur https://www.duckdns.org et y mettre l'IP de sa maison (si l'IP change, il faudra retourner sur Duck DNS pour la changer là bas aussi).
Ensuite on lance certbot qui va nous attribuer un certificat valide sur le serveur hôte. Il est nécessaire de rediriger le port 80 depuis son routeur vers le serveur hôte pour que ça marche. Certbot lance un mini serveur HTTP qui est sollicité par les serveurs de l'EFF pour délivrer les certificats.
sudo apt install certbot
sudo certbot certonly --standalone #répondre aux questions
sudo cp /etc/letsencrypt/live/DNS/{cert.pem,privkey.pem} /home/FOUNDRYUSER/data/Config/
podman unshare chown -R 1001:1001 ~/data/Config/{cert.pem,privkey.pem}
Ensuite on édite le fichier options.json dans ~/data/Config :
"sslCert": "cert.pem","sslKey": "privkey.pem",Et là tout est bon normalement
Ha si quand même, il faut rediriger votre port 30000 depuis votre routeur vers votre hôte, et envoyer l'adresse https://MONDNS.POUAITE:30000 à vos potes pour qu'ils ou elles testent la connexion. Bon jeu !

Moi testant depuis deux postes l'interface MJ et PJ d'une partie de Forbidden Lands.
Sauvegarder ses données Foundry
Ça peut être intéressant de sauvegarder les données du répertoire data dans un dépôt versionné sur une autre machine. On se donne ainsi une meilleure chance de ne pas perdre ses données suite à un accident ou une mise à jour de FoundryVTT. Le répertoire pourra être utilisé sur une nouvelle machine pour relancer son serveur tel qu'il était.
Pour commencer, on peut créer le répertoire de sauvegarde et le versionner dans git :
mkdir ~/datafoundryvtt
cd ~/datafoundryvtt
git init
Ça, on ne le fera qu'une fois.
Ensuite s'assurer que le serveur podman est éteint, puis sur la machine distante, à chaque fois que cela sera nécessaire (après une session, avant une mise à jour) :
rsync -av foundryuser@foundryserver:data/ ~/datafoundryvtt/
cd ~/datafoundryvtt/
git add -A
git commit -am "maj du "$(date +%Y-%m-%d)"
Et voilà. Vous pouvez copier le dépôt sur d'autre machine pour rendre plus solide encore votre sauvegarde. Je vous laisse vous référer à la doc de git pour trouver les différents états de votre répertoire de données FoundryVTT.
Conclusion
Voilà en gros. Ça m'a pris un peu de temps pour en arriver là, mais je suis très content ! Maintenant, il faut que je passe pas mal de temps avec FoundryVTT, c'est un logiciel complexe et très gourmand en ressources côté client, mais globalement je ne regrette rien, il fait super bien son boulot.