Installer un serveur web pour les applications Python

by Maxime Decooman
Note : Cette installation est faite sur un tout nouveau serveur instancié chez Digitalocean(DO). Une fois que vous avez ajouté votre clé ssh dans le panneau Droplet DO lors de la création, vous vous connecterez en tant que root. Si vous n'êtes pas root, vous devez être dans le groupe sudoer et utiliser la commande sudo. Je l'ai écrit pour des raisons de commodité.
Installer Python 3.13 sur Ubuntu 22.04
Mettez d'abord à jour votre gestionnaire de paquets et vos listes de paquets :
sudo apt update && sudo apt upgrade
- Redémarrez
- Assurez-vous que vous avez toutes ces bibliothèques pour avoir une installation réussie :
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev \
libncursesw5-dev tk-dev curl xz-utils wget
Téléchargez la dernière version de python (3.13.1 au moment de la rédaction) :
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz
Extraire l'archive:Une fois le téléchargement terminé, extrayez le contenu du fichier d'archive.
sudo tar -xzf Python-3.13.1.tgz
Préparez le code source et utilisez l'option '--enable-optimizations' pour activer des supports supplémentaires comme SSL et bz2.
cd Python-3.13.1
sudo ./configure --enable-optimizations
Compilez et installez. Utilisez 'altinstall', pour l'installer comme un Python séparé en évitant d'écraser l'installation Python par défaut.
sudo make -j4 && sudo make altinstall
ou
sudo make && sudo make altinstall
Note: make -j4, l'option -j suivie d'un nombre (dans ce cas, 4) indique à make d'exécuter plusieurs tâches simultanément. Cela signifie que make exécutera jusqu'à quatre tâches en parallèle. Si vous disposez d'un processeur multicœur, l'utilisation de l'option -j avec un nombre égal ou légèrement supérieur au nombre de cœurs du CPU peut accélérer de manière significative le processus de compilation.
Prenez une tasse de café, ou deux...
Vérifiez que python est bien installé
python3.13 --version
# > python3.13.1
la version installée sur Ubuntu 24.04
python --version
# > ptyhon 3.13.1
update-alternatives --install (optionnel)
Vous pouvez gérer la version de Python qui est invoquée lorsque vous utilisez la commande python3. Personnellement, je ne modifie pas la commande python3 sur les serveurs de production et je la laisse à la version par défaut du système. Cependant, sur d'autres systèmes, je peux l'utiliser temporairement à des fins différentes :
Ajouter les liens symboliques:
# update-alternatives --install <link> <nom> <chemin> <priorité>
# Ajouter les liens symboliques
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 110
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.13 100
Check all went smoothly
sudo update-alternatives --display python3
# > python3 - auto mode
# > link best version is /usr/bin/python3.12
# > link currently points to /usr/bin/python3.12
# > link python3 is /usr/bin/python3
# >/usr/bin/python3.12 - priority 110
# >/usr/local/bin/python3.13 - priorité 100
Changez le lien symbolique qui répondra à la commande python3 :
sudo update-alternatives --config python3
Note: pour annuler
sudo update-alternatives --remove python /usr/local/bin/python3.13
Allez faire un tour...
Créer un projet django
Ajouter un utilisateur
Pour les besoins de cet article, notre utilisateur s'appelle Julius.
adduser julius
# On vous demandera d'entrer et de confirmer un mot de passe pour le nouvel utilisateur, ainsi que de remplir quelques informations optionnelles supplémentaires.
- Accordez les privilèges sudo pour permettre au nouvel utilisateur d'effectuer des tâches administratives, ajoutez-le au groupe sudo.
usermod -aG sudo julius
Basculer vers le nouveau compte
Basculer vers le compte utilisateur nouvellement créé avec la commande suivante :
su - julius
# vérifiez que vous êtes dans le bon répertoire qui devrait être /home/julius
pwd
Installez un environnement virtuel Python et créez un nouveau projet Django
# créez un répertoire de projet
mkdir mysite
# allez dans le répertoire
cd mysite
# installez l'environnement virtuel dans un dossier caché .venv
python3.12 -m venv .venv
Activez l'environnement virtuel :
source .venv/bin/activate
Installer Django
Avec l'environnement virtuel activé, vous pouvez maintenant installer Django.
pip install django
Démarrez un nouveau projet Django en exécutant :
# Remplacez mysite par le nom de votre projet.
django-admin startproject mysite .
# Le point à la fin permet de créer le projet dans le même répertoire sans en créer un nouveau avec le nom du projet.
Éditez les paramètres (j'utilise vi ou vim, utilisez nano ou l'éditeur que vous préférez) :
vi mysite/settings.py
Changez la ligne ALLOWED_HOSTS = [] avec :
# ALLOWED_HOSTS = []
ALLOWED_HOSTS = [localhost, server_ip_address, mysite.com]
# server_ip_address : l'adresse IP de votre serveur (déconseillé en production).
# mysite.com : le nom de l'url de votre serveur dans le serveur DNS de votre domaine
Ou, si vous êtes paresseux, vous pouvez aussi mettre * mais ne le faites pas en production :
ALLOWED_HOSTS = ['*']
Exécutez le serveur de développement
A ce stade, vous devriez avoir un (.venv) comme préfixe de l'invite de votre terminal :
- Allez dans votre répertoire de projet et exécutez le serveur de développement de Django.
cd mysite
python manage.py runserver 0.0.0.0:8000
Votre projet Django devrait maintenant être accessible via http://your_server_ip:8000 dans un navigateur web, Si vous ne pouvez pas accéder, vérifiez que vous n'avez pas de pare-feu installé et ouvrez le port TCP 8000 (pour le temps du test)
Lorsque vous avez fini d'explorer, appuyez sur CTRL-C dans la fenêtre du terminal pour arrêter le serveur de développement.
Installer et tester gunicorn
Installer gunicorn
pip install gunicorn
# in /home/julius/mysite
cd ~/mysite # si vous êtes parti
gunicorn --bind 0.0.0.0:8000 mysite.wsgi
Comme vous l'avez fait précédemment, vous devriez être en mesure d'accéder à votre site à http://your_server_ip:8000 mais sous gunicorn cette fois.
Note: Désactivez votre environnement virtuel Python lorsque vous avez terminé en exécutant :
deactivate
Les étapes suivantes vont couvrir la configuration d'un serveur web (Nginx) qui servira de proxy au serveur d'application WSGI (Gunicorn).
Installer et configurer Nginx
Installer Nginx
sudo apt install nginx
faire démarrer nginx automatiquement
sudo systemctl enable nginx
Créer le fichier de configuration pour votre site
sudo vi /etc/nginx/sites-available/mysite
Voici un fichier de configuration minimaliste qui devrait suffire pour ce tutoriel :
# /etc/nginx/sites-available/mysite
server {
listen 80 ;
server_name server_domain_ou_IP ;
location = /favicon.ico { access_log off ; log_not_found off ; }
location /static/ {
root /home/julius/mysite ;
}
location / {
include proxy_params ;
proxy_pass http://unix:/run/gunicorn-mysite.sock ;
}
}
Sauvegardez et fermez le fichier une fois terminé. Vous devez activer le site pour que nginx commence à écouter les requêtes. Vous activez le fichier en le liant au répertoire sites-enabled :
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled
Testez votre configuration pour des erreurs de syntaxe :
sudo nginx -t
S'il n'y a pas d'erreurs, vous pouvez redémarrer Nginx :
sudo systemctl restart nginx
Configurer le superviseur
Installer le superviseur
sudo apt install supervisor
Faire en sorte que le superviseur démarre automatiquement avec le système
sudo systemctl enable supervisor
Créer un fichier de configuration du superviseur à l'aide de l'éditeur vi (ou de celui que vous préférez).
sudo vi /etc/supervisor/conf.d/mysite.conf
Ajoutez la configuration suivante au fichier. Les détails correspondent à l'exemple utilisé pour mysite, le chemin de la configuration et l'utilisateur. En utilisant cette configuration, vous ferez tourner votre projet Python avec Gunicorn, et au lieu d'utiliser l'adresse IP pour votre application, vous ferez tourner le projet avec un fichier sock.
[program:mysite]
command=/home/julius/mysite/.venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn-mysite.sock mysite.wsgi:application
directory=/home/julius/mysite
user=root
group=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/superviseur/mysite.log
stderr_logfile=/var/log/superviseur/mysite-error.log
Sauvegardez et fermez le fichier lorsque vous aurez terminé.
Redémarrez maintenant les services supervisor et nginx en utilisant les commandes ci-dessous pour appliquer les nouveaux changements.
sudo systemctl restart supervisor
sudo systemctl restart nginx
# vérifiez que le superviseur fonctionne correctement
systemctl status supervisor
Une autre commande utile pour vérifier la liste des processus sous le superviseur. Vous devriez voir le processus "mysite" en cours d'exécution.
sudo supervisorctl status
#> mysite RUNNING pid 79290, uptime 0:01:09
Enfin, vous pouvez maintenant visiter votre site à http://your_server_ip_or_domain_name, qui est actuellement servi par Gunicorn et relayé par Nginx.
Il reste encore "quelques" choses à faire, en particulier pour sécuriser l'installation et activer https, mais c'est suffisant pour vous permettre de démarrer.