Installer un serveur web pour les applications Python

#Python#Nginx#Django#Ubuntu#Debian#Supervisor#Gunicorn

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 : Image

  • 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)

Image

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

Image

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. Image

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

Image 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.