Créer une CT¶
1. Choisir le numéro et l'IP¶
Le numéro dépend du rôle, et l'IP en découle :
| Plage | Rôle | Exemple |
|---|---|---|
100–109 |
infrastructure (proxy, déploiement, VPN…) | 104 → 10.0.0.4 |
110–119 |
médias | 111 → 10.0.0.11 |
120–139 |
serveurs de jeu | 127 → 10.0.0.27 |
140–199 |
applications et sites | 148 → 10.0.0.48 |
2xx |
machines virtuelles | |
9xx |
tests, ou en attente de suppression |
L'IP est 10.0.0. suivi des deux derniers chiffres du numéro. La plage 10.0.0.100–254 est réservée au DHCP du routeur, il n'y a donc pas de collision.
Vérifier que le numéro est libre :
pct list; qm list
2. Récupérer le modèle Debian 13¶
pveam update
pveam available --section system | grep debian-13
pveam download local debian-13-standard_<version>_amd64.tar.zst
3. Créer la CT¶
pct create <CTID> local:vztmpl/debian-13-standard_<version>_amd64.tar.zst \
--hostname <nom> \
--unprivileged 1 --features nesting=1 \
--cores 1 --memory 1024 --swap 512 \
--rootfs local-lvm:8 \
--net0 name=eth0,bridge=vmbr0,firewall=1,gw=10.0.0.1,ip=10.0.0.<XX>/24,type=veth \
--nameserver 10.0.0.1 \
--onboot 1 \
--tags <role> \
--description "<à quoi elle sert, qui s'en occupe, lien du repo>"
pct start <CTID>
Pourquoi ces options :
--unprivileged 1- Dans une CT privilégiée, root dans la CT est quasiment root sur l'hôte. On ne le fait que s'il n'y a vraiment pas d'autre solution.
--features nesting=1- Nécessaire au systemd de Debian 13 (sinon Proxmox affiche un avertissement et certains services échouent). Aussi requis pour Docker.
--rootfs local-lvm:8- Le stockage des CT est partagé et déjà surréservé : on part petit. Agrandir plus tard est facile (
pct resize <CTID> rootfs +4G), réduire est impossible. --onboot1pour un service qui doit toujours tourner,0pour un serveur de jeu qu'on allume à la demande.--descriptionet--tags- Visibles dans l'interface Proxmox : c'est la première chose que lira la personne qui tombe sur la CT dans six mois.
4. Premiers réglages dans la CT¶
pct enter <CTID>
apt update && apt -y full-upgrade
# eth0 est géré par ifupdown : ce service échoue et retarde le démarrage de 2 minutes
systemctl mask systemd-networkd-wait-online.service
5. Si l'appli a beaucoup de données¶
Ne pas tout mettre dans le disque système de la CT : on crée un dataset ZFS sur un des pools de données et on le monte dans la CT.
zfs create -o compression=zstd -o atime=off <pool>/<projet>
pct set <CTID> -mp0 /<pool>/<projet>,mp=/data,backup=0
backup=0 exclut ces données des sauvegardes de la CT : à réserver aux données qu'on sait reconstruire (téléchargées, générées…).
Droits dans une CT non privilégiée
Les utilisateurs de la CT sont décalés de 100000 sur l'hôte : root dans la CT = uid 100000 sur l'hôte. Pour que la CT puisse écrire dans le dataset : chown -R 100000:100000 /<pool>/<projet> (ou 100000 + l'uid de l'utilisateur de l'appli).
Avant de considérer la CT comme finie¶
- description et tags renseignés
-
onbootréglé selon l'usage - l'appli tourne en service systemd, et redémarre après
pct reboot <CTID> - déploiement branché sur deploy-hub si le code est sur GitHub
- CT ajoutée aux sauvegardes planifiées
- CT documentée dans le repo privé de l'infra