Lorsque vous développez un serveur avec Django, il est fréquent de travailler sur un serveur distant via SSH, contrairement à un environnement local. Cependant, en raison de la nature des sessions SSH, celles-ci se déconnectent automatiquement après un certain temps d'inactivité, ce qui entraîne des interruptions du serveur de développement et la nécessité de se reconnecter et de redémarrer le serveur. Ici, je vais partager mon expérience sur la façon de maintenir la session SSH tout en assurant que le serveur de développement Django ne soit pas interrompu.
Problème : Déconnexion automatique de la session SSH
Lorsque vous travaillez sur un serveur distant avec une connexion SSH, la session se termine automatiquement si aucune activité n’est détectée pendant longtemps. Cela peut être utile pour des raisons de sécurité dans la configuration SSH, qui déconnecte la session après une période d'inactivité, mais cela peut être très gênant pour les développeurs.
Solutions : configuration SSH, utilisation de tmux et systemd
Pour résoudre ce problème, j'ai appliqué trois méthodes.
1. Modification de la configuration SSH
J'ai configuré le fichier ~/.ssh/config
du client SSH pour envoyer des paquets keep-alive à intervalles réguliers. Avec cette configuration, la connexion SSH envoie des paquets régulièrement, permettant ainsi de maintenir la session active.
Host *
ServerAliveInterval 60
ServerAliveCountMax 5
Ici, ServerAliveInterval
indique l'intervalle (en secondes) auquel le client envoie des paquets au serveur, et ServerAliveCountMax
est le nombre maximum d'échecs autorisés avant que la connexion ne soit interrompue. Grâce à ce paramétrage, vous pouvez maintenir la connexion de session active.
2. Utilisation de tmux ou screen
Pour éviter que le serveur de développement Django s'arrête même si la session SSH est interrompue, j'ai utilisé des programmes de multiplexage de terminal comme tmux
ou screen
. En exécutant le serveur Django avec tmux
, le serveur continue de fonctionner même si la session SSH se termine. Par exemple, voici comment exécuter le serveur Django via tmux
.
# Créer une session tmux
tmux new -s django_session
# Démarrer le serveur de développement Django
python manage.py runserver
Ainsi, après avoir démarré le serveur Django, même si la session SSH se termine, le serveur reste actif dans la session tmux
, permettant de se reconnecter avec tmux attach -t django_session
.
3. Configuration en tant que service en arrière-plan avec systemd
Parmi ces méthodes, la plus satisfaisante a été de gérer le serveur Django comme un service avec systemd. Utiliser systemd permet d'exécuter l'application en développement en permanence en arrière-plan, indépendamment de la session SSH, garantissant que le serveur reste stable. De plus, cela présente l’avantage de pouvoir développer et tester dans un état presque identique à celui de l'environnement de déploiement. Voici comment configurer une application Django comme service avec systemd.
Tout d'abord, créez un fichier /etc/systemd/system/my_django_app.service
et entrez le contenu suivant.
[Unit]
Description=My Django Application
After=network.target
[Service]
User=myuser
Group=mygroup
WorkingDirectory=/path/to/my/django/project
ExecStart=/path/to/my/venv/bin/python manage.py runserver 0.0.0.0:8000
Restart=always
[Install]
WantedBy=multi-user.target
Après avoir effectué cette configuration, vous pouvez démarrer le service avec la commande systemctl start my_django_app
et le configurer pour qu'il se lance automatiquement au redémarrage du serveur avec systemctl enable my_django_app
. Après une modification du code, utilisez systemctl restart my_django_app
pour redémarrer le service et appliquer les changements. Surtout, une fois que c'est configuré, vous n'avez pas besoin de démarrer manuellement le serveur à moins qu'il y ait un problème, ce qui constitue un avantage majeur.
Vous pourrez ainsi tester comme si vous étiez dans un environnement de déploiement réel, et après la configuration, il n'est plus nécessaire de gérer le serveur de manière continue, ce qui est très efficace. Si vous n'avez jamais essayé cette méthode, je vous encourage vivement à le faire.
Conclusion
En utilisant les méthodes ci-dessus, j'ai pu résoudre le problème de déconnexion de la session SSH tout en maintenant le serveur de développement Django de manière fiable. En particulier, le fait d'exécuter le service en arrière-plan avec systemd a permis de développer et de tester dans un état très similaire à celui d'un environnement de déploiement, améliorant considérablement l'efficacité du travail. Cela sera certainement un conseil utile si vous travaillez dans un environnement de développement à distance.
Aucun commentaire.