Service systemd utilisateur¶
Créer un service systemd pour que vos conteneurs démarrent automatiquement au boot — sans intervention et sans session ouverte.
Pourquoi systemd ?¶
podman-compose up -d lance vos conteneurs, mais ils disparaissent au reboot. Un service systemd utilisateur résout ce problème : il démarré vos conteneurs au boot, les redémarré en cas de crash, et géré proprement l'arrêt.
Créer le fichier unit¶
Créez le répertoire des services utilisateur si nécessaire :
Créez le fichier unit pour votre application :
cat > ~/.config/systemd/user/podman-compose-monapp.service << 'EOF'
[Unit]
Description=Podman Compose - Mon App
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/compose/monapp
ExecStartPre=/usr/bin/podman-compose pull
ExecStart=/usr/bin/podman-compose up
ExecStop=/usr/bin/podman-compose down
Restart=on-failure
RestartSec=10
TimeoutStartSec=300
TimeoutStopSec=120
Environment=PODMAN_SYSTEMD_UNIT=%n
[Install]
WantedBy=default.target
EOF
Explication directive par directive¶
Section [Unit] :
| Directive | Rôle |
|---|---|
Description | Nom lisible dans les logs et systemctl status |
After=network-online.target | Attend que le réseau soit disponible avant de démarrer |
Wants=network-online.target | Demande le réseau, mais ne bloque pas s'il échoué |
Section [Service] :
| Directive | Rôle |
|---|---|
Type=simple | Le processus principal est podman-compose up (foreground) |
WorkingDirectory=%h/compose/monapp | %h = répertoire home de l'utilisateur |
ExecStartPre | Pull les images avant de démarrer — garantit les dernières versions |
ExecStart | Lance les conteneurs en foreground (pas de -d) |
ExecStop | Arrêté proprement les conteneurs |
Restart=on-failure | Redémarré automatiquement en cas de crash |
RestartSec=10 | Attend 10 secondes avant de redémarrer |
TimeoutStartSec=300 | 5 minutes max pour le pull + démarrage |
TimeoutStopSec=120 | 2 minutes max pour l'arrêt propre |
Environment=PODMAN_SYSTEMD_UNIT=%n | Informe Podman qu'il tourne dans un contexte systemd |
Section [Install] :
| Directive | Rôle |
|---|---|
WantedBy=default.target | Équivalent de multi-user.target pour les services utilisateur |
Activer et démarrer le service¶
systemctl --user daemon-reload
systemctl --user enable podman-compose-monapp.service
systemctl --user start podman-compose-monapp.service
daemon-reload: recharge les fichiers unit après création ou modificationenable: active le démarrage automatique au bootstart: démarré le service immédiatement
Verifiez le statut :
Commandes de gestion courantes¶
| Action | Commande |
|---|---|
| Démarrer | systemctl --user start podman-compose-monapp |
| Arrêter | systemctl --user stop podman-compose-monapp |
| Redémarrer | systemctl --user restart podman-compose-monapp |
| Statut | systemctl --user status podman-compose-monapp |
| Logs temps réel | journalctl --user -u podman-compose-monapp -f |
| Logs depuis le dernier boot | journalctl --user -u podman-compose-monapp -b |
Dupliquer pour un second projet
Pour ajouter une autre application Compose :
- Créez le projet dans
~/compose/mon-autre-app/ - Copiez le fichier unit :
cp ~/.config/systemd/user/podman-compose-monapp.service \
~/.config/systemd/user/podman-compose-mon-autre-app.service
- Modifiez la copie : changez
DescriptionetWorkingDirectory - Rechargez et activez :
Chaque projet a son propre service, indépendant des autres.
Il reste a vérifier que tout fonctionne, y compris après un reboot.