Aller au contenu

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 :

mkdir -p ~/.config/systemd/user

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 modification
  • enable : active le démarrage automatique au boot
  • start : démarré le service immédiatement

Verifiez le statut :

systemctl --user status podman-compose-monapp.service

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 :

  1. Créez le projet dans ~/compose/mon-autre-app/
  2. Copiez le fichier unit :
cp ~/.config/systemd/user/podman-compose-monapp.service \
   ~/.config/systemd/user/podman-compose-mon-autre-app.service
  1. Modifiez la copie : changez Description et WorkingDirectory
  2. Rechargez et activez :
systemctl --user daemon-reload
systemctl --user enable --now podman-compose-mon-autre-app.service

Chaque projet a son propre service, indépendant des autres.

Il reste a vérifier que tout fonctionne, y compris après un reboot.