Déployer un site Wagtail sur un serveur Linux

Votre application est développée et testée, il est temps de la mettre en ligne. Ce didacticiel explique comment procéder.

15 Juillet 2020 18:24
Thèmes: Déploiement

Le site qu'on déploiera est ce site lui-même, pythoneatstail.com. On l'a créé et testé dans des tutoriels précédents. Pour le déploiement, il n'est pas important qu'il soit basé sur Wagtail, cependant on utilisera certaines fonctionnalités liées à Django. On va déployer sur DigitalOcean, qui a un tutoriel complet pour cela et fournit un certain nombre d'autres bons tutoriels; on est également redevable au tutoriel de SimpleIsBetterThanComplex. Dans ce tutoriel, on va suivre les étapes suivantes:

  1. configurer le compte DigitalOcean
  2. ajouter votre domaine à votre droplet
  3. créer un utilisateur pour le projet
  4. configurer la base de données PostgreSQL
  5. configurer et installer notre projet

Cela se permettra d'exécuter notre projet localement sur le serveur DigitalOcean. Dans un tutoriel de suivi, on installera Gunicorn et Nginx pour servir notre application sur Internet, ainsi que Supervisor pour gérer les deux processus.

1. Créez un compte DigitalOcean

Je me limiterai à un bref aperçu, car DigitalOcean facilite les choses; en outre, le didacticiel SimpleIsBetterThanComplex l'explique bien. Accédez à digitalocean.com, Products, Droplets, créez un compte. Vous aurez la possibilité de nommer votre projet. Essayez de choisir une façon de nommer les choses qui vous convient. Au début, vous pourriez être confondu avec les noms de:

  • projet
  • droplet
  • répertoire
  • base de données
  • utilisateur

Après vous avez vous connecté avec votre nouveau compte, accédez à votre projet et cliquez sur Create pour créer une droplet. Vous devez choisir un plan, la quantité de stockage dont vous avez besoin (et le prix qui l'accompagne) et la région du centre de données. Pour l'authentification, choisissez Mot de passe, sauf si vous avez configuré SSH; on le fera plus tard. Choisissez un nom pour la droplet; on appellera le nôtre drp-pet. Cliquez sur 'Create Droplet' pour terminer le processus. Vous recevrez un e-mail de DigitalOcean avec une adresse IP, le nom d'utilisateur 'root' et un mot de passe root.

2. Ajoutez votre domaine à la droplet

La droplet doit être visible dans l'aperçu de votre projet. sur DigitalOcean. Sur la droite, il y a trois points qui ouvrent un menu; cliquez sur 'Add Domain'. Pour être clair: DigitalOcean n'est pas un registraire de domaine, donc n'enregistre pas votre domaine. Il existe des centaines sinon des milliers de bureaux d'enregistrement de domaine, tels que domain.com, Bluehost, HostGator, GoDaddy, etc. Dans notre cas, le domaine pythoneatstail.com a été enregistré auprès de l'un d'eux. On doit maintenant dire à ce bureau d'enregistrement que DigitalOcean va le gérer. DigitalOcean fournit des instructions à de nombreux bureaux d'enregistrement sur la mise à jour de vos paramètres sur le bureau d'enregistrement. Pour la plupart des bureaux d'enregistrement, cela reviendra à renommer les trois premiers serveurs de noms en ns1.digitalocean.com, ns2.digitalocean.com et ns3.digitalocean.com et à les enregistrer. Comme mentionné par DigitalOcean, cela peut prendre plusieurs heures, voire plus, avant que ces changements ne se propagent.

Maintenant, dans le panneau de configuration de DigitalOcean, cliquez sur les trois points à côté de votre droplet, cliquez sur 'Add Domain', remplissez votre domaine et cliquez sur 'Add Domain'. Cela connectera le domaine à votre droplet. Le domaine doit maintenant être visible dans le panneau de configuration. Si vous cliquez dessus, il devrait y avoir un enregistrement A avec votre adresse IP. Ajoutez également un enregistrement A avec le www. sous-adresse.

3. Créez un utilisateur pour le projet

Accédez à votre terminal et connectez-vous à l'adresse IP que vous avez reçue par mail avec la commande ssh:

ssh root@165.22.199.4

Utilisez le mot de passe que vous avez reçu; il vous sera demandé de le changer la première fois. Vous êtes maintenant dans le répertoire personnel de l'utilisateur root. Familiarisez-vous avec l'organisation des fichiers: /root, /home pour les répertoires personnels des utilisateurs ordinaires, /etc pour les fichiers de configuration, /bin pour les fichiers binaires, etc. On va créer un utilisateur pour notre projet, car on ne veut pas exécuter toutes les commandes en tant qu'utilisateur root. À l'invite, tapez:

adduser usr_pet

et créez un mot de passe pour usr_pet. Étant donné que l'utilisateur devra installer un certain nombre de packages, il a besoin du privilège de superutilisateur. Par conséquent, ajoutez l'utilisateur au groupe sudo avec la commande usermod

usermod -aG sudo usr_pet

Dans le cadre de la configuration initiale, il est également recommandé d'ajouter l'authentification par clé publique et un pare-feu, mais on le fera plus tard. Désormais, on peut se connecter directement en tant que usr_pet. Déconnectez-vous de la connexion au serveur avec déconnexion, puis accédez à nouveau avec

ssh usr_pet@165.22.199.4

et on arrive au répertoire personnel de usr_pet.

4. Configurer la base de données PostgreSQL

L'installation et la gestion des logiciels se font avec la commande Linux apt-get. Connectez-vous au serveur en tant que usr_pet. Pour installer tous les composants logiciels nécessaires pour PostgreSQL tapez:

sudo apt-get update
sudo apt install postgresql postgresql-contrib

Lancez maintenant psql en tant qu'utilisateur par défaut postgres de PostgreSQL:

sudo -u postgres psql

Créez une base de données et un utilisateur de base de données pour le projet, comme on l'a fait localement sur notre ordinateur de développement auparavant:

CREATE USER usr_pet WITH PASSWORD '123';
CREATE DATABASE db_pet OWNER usr_pet;

Vous devez évidemment utiliser un meilleur mot de passe. Notez qu'on a donné à l'utilisateur de la base de données le même nom que l'utilisateur du serveur; ce n'est pas nécessaire mais pratique. Django recommande d'ajouter quelques paramètres:

ALTER ROLE usr_pet SET client_encoding TO 'utf8';
ALTER ROLE usr_pet SET default_transaction_isolation TO 'read committed';
ALTER ROLE usr_pet SET timezone TO 'UTC';

Quittez psql avec \q.

5. Configurer l'environnement et cloner le projet

Installez d'abord les paquets pip, python3-dev (nécessaire pour construire des extensions Python) et python3-venv (nécessaire pour créer un environnement virtuel):

sudo apt install python3-pip python3-dev python3-venv

On va configurer un environnement virtuel dans le répertoire personnel de usr_pet à l'aide de la commande Python par défaut, et l'activer:

python3 -m venv env
source env/bin/activate

Notez qu'on a créé l'environnement dans notre répertoire personnel; si vous avez l'intention d'avoir plus d'environnements pour cet utilisateur, créez-le dans un sous-répertoire. Continuez à cloner votre projet en utilisant le lien 'cloner ou télécharger' de Github:

git clone https://github.com/prijme/pet.git

Entrez dans le répertoire du projet (dans notre cas, pet) et installez toutes les exigences (cela inclut Django, Wagtail et psycopg2):

pip3 install -r requirements.txt

On a mis tous nos paramètres liés au mot de passe et autres paramètres sensibles dans un fichier local.py qui n'est pas sur GitHub, on doit donc le créer dans notre répertoire de paramètres. Allez-y, créez le fichier local.py et copiez le contenu du fichier local.py sur votre ordinateur de développement. Remarque: le nom d'utilisateur et le mot de passe de vos paramètres de base de données doivent évidemment correspondre à ceux que vous avez créés ci-dessus sur votre serveur!

On peut maintenant migrer notre base de données et créer un superutilisateur. Allez dans le répertoire du projet et tapez:

python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsuperuser

Fournissez un nom d'utilisateur et un mot de passe pour le superutilisateur. On peut maintenant vérifier que la base de données fonctionne en exécutant le serveur de développement Django sur 0.0.0.0:

python3 manage.py runserver 0.0.0.0:8000

Maintenant, dans votre navigateur, accédez à l'adresse IP de votre serveur, suivie de :8000, dans notre cas http://165.22.199.4:8000. Vous devriez voir une page d'accueil, qui pourrait ne pas dire plus que 'Home'. En ajoutant /admin à l'adresse et en utilisant les informations d'identification du superutilisateur, vous pouvez vous connecter à admin.

Le projet s'exécute maintenant sur le serveur. Dans notre prochain tutoriel on va servir notre site à Internet en utilisant Gunicorn, Nginx et Supervisor.

Commentez cet article (connectez-vous d'abord ou confirmez par nom et email ci-dessous)