Comment héberger un site Django sur cPanel ?

Il est possible d'héberger un site Django sur CPanel, mais la procédure se veut relativement complexe. Nous recommandons donc de ne pas se lancer dans une telle entreprise si vous ne possédez pas un haut degré de connaissances techniques.

À noter avant de débuter



Ces instructions supposent plusieurs choses :



Vous avez déjà un serveur utilisant cPanel et Linux (comme ceux offerts par Ex2), peut-être avec un ou plusieurs sites existant en cours d’exécution sur lui.
Vous avez déjà un projet Django en cours d’exécution sur votre propre ordinateur.
Vous utilisez pip pour gérer vos dépendances Python. (Il peut être possible d’installer pipenv, poetry, etc. sur votre serveur cPanel, mais il n’est pas configuré pour cela; évitez si possible.)
Le code est déjà dans un référentiel git. (Que ce soit sur GitHub ou ailleurs, il enverra le code directement de votre ordinateur au serveur.)
Votre domaine est hébergé sur le même hébergement que votre serveur cPanel. Sinon, vous devrez pointer le domaine vers votre hôte cPanel. Cet aspect n'est pas couvert par ce tutoriel.
Votre projet Django utilisera une base de données MySQL. Vous pouvez utiliser PostgreSQL si vous préférez. Dans ce cas, il vous suffira de modifier ces étapes.

Dans les instructions ci-dessous, vous devrez remplacer ces éléments par vos propres valeurs :



exemple.org – le domaine sur lequel votre site Web Django sera disponible.
mondomaineprincipal.org - le « domaine principal » de votre compte cPanel. Si c’est le premier site sur votre compte, il sera le même que le domaine de ce site Django.
monprojet – le nom de votre projet Django. Celui que vous avez utilisé lors de la création du projet pour la première fois.
monréférentiel – le nom de votre dépôt Git. Il peut être le même que le nom de votre projet Django, mais n’a pas à l’être.
monnomdhôte – C’est à vous de décider, et cela pourrait être la même que l’une des valeurs précédentes. C’est ainsi que nous nous référerons au serveur pour ce projet.
utilisateurcpanel – le nom d’utilisateur que vous utilisez pour ouvrir une session dans cPanel.

Les étapes pour héberger un site Django sur cPanel



1. Vérifiez les prérequis de Python



Pour servir des fichiers statiques (CSS, JavaScript, etc.), nous allons utiliser whitenoise. Donc, si vous ne l’utilisez pas déjà, pip install whitenoise et suivez les instructions pour configurer votre projet Django pour l’utiliser.

2. Créez une base de données MySQL



Dans cPanel, créez une nouvelle base de données MySQL. Cette étape très simple est expliquée dans ce tutoriel, si vous n'avez jamais créé de bases de données.

Après cela, vous devriez prendre en note le nom de la base de données, ainsi que le nom d’utilisateur et le mot de passe.

3. Créez un fichier_WSGI.PY



Ajoutez un fichier nommé passenger_wsgi.py à la racine de votre projet Django (probablement à côté de votre fichier requirements.txt). Validez ensuite ce fichier sur git avec la commande suivante:

import os
import sys
from myproject.wsgi import application

sys.path.insert(0, os.path.dirname(__file__))

environ = os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")


Vous devrez modifier :


myproject.wsgi – Il devrait s’agir du chemin d’accès au fichier wsgi.py créé par Django lorsque vous avez démarré votre projet.
myproject.settings – ce doit être le chemin vers le module de paramètres que vous souhaitez que le site utilise sur cPanel. Par exemple, si, au lieu d’un fichier settings.py, vous avez un dossier de paramètres contenant un fichier différent pour chaque environnement, vous pourriez avoir besoin de quelque chose comme myproject.settings.production.

Il est possible d'utiliser des fichiers passenger_wsgi.py plus compliqués, mais celui-ci fonctionne.

4. Configurez l'accès SSH au serveur



Vous aurez besoin d'un accès SSH pour pouvoir envoyer votre code au serveur via Git. Il y a des variations sur la façon de le configurer. L'article disponible ici vous expliquera comment procéder sur un hébergement Ex2.

Dans cPanel, dans « SSH Access », ajoutez une nouvelle clé SSH appelée nom_id_rsa, en remplaçant le nom par votre nom, p. ex., terry_id_rsa (au cas où vous en créeriez d’autres pour d’autres utilisateurs).

Sur votre ordinateur, créez un répertoire . ssh (notez le point de tête) dans votre répertoire personnel de l’utilisateur, s’il n’existe pas déjà. p. ex., /Users/terry/. ssh/

Copiez les clés privées et publiques de cPanel dans des fichiers texte à ces emplacements sur votre ordinateur :

~/. ssh/myhostname_id_rsa - la clé privée
~/. ssh/myhostname_id_rsa.pub - la clé publique

Je pense que j’ai dû changer la permission de la première pour que seule je puisse la lire et l’écrire :

chmod 600 ~/. ssh/myhostname_id_rsa

Créez un fichier texte à ~/. ssh/config s’il n’existe pas déjà, et ajoutez :


Host myhostname
HostName myprimarydomain.org
User cpanelusername
IdentityFile ~/. ssh/myhostname_id_rsa

Ajoutez-les si vous souhaitez stocker la phrase de passe dans votre trousseau Apple :

UseKeychain yes
AddKeysToAgent yes

Vous devrez probablement ouvrir un nouvel onglet ou une nouvelle fenêtre dans Terminal, mais vous devriez maintenant être en mesure de faire ssh myhostname pour vous connecter à votre serveur.

5. Créez un référentiel GIT SUR LE SERVEUR



Dans cPanel, dans « Git Version Control », créez un nouveau dépôt Git vide.

Définissez le chemin du référentiel sur git_repositories/myrepo. Cela créera les dossiers dans votre répertoire cPanel, et c’est là que les fichiers de votre projet vivront une fois que nous les aurons envoyés au serveur.

Vous pouvez mettre ce dossier n’importe où, mais j’aime l’avoir dans un dossier qui parle évidemment de Git. Il est plus clair que rien d’autre ne devrait entrer ici, et vous pouvez, si nécessaire, supprimer tous les fichiers et pousser une nouvelle copie avec git.

Si vous configurez d’autres projets sur votre serveur cPanel à l’avenir (pour lesquels vous avez ma sympathie), vous pouvez les mettre dans de nouveaux dossiers dans ~/git_repositories/

6. Envoyez votre code au serveur



Dans cPanel, lorsque vous regardez l’écran « Gérer » de votre nouveau dépôt Git, copiez l’URL de clone et utilisez-la dans cette commande sur votre ordinateur pour ajouter une nouvelle télécommande Git appelée production, ou toute autre option que vous préférez :

git remote add production <clone URL>
e.g. (all one line):

git remote add production ssh://cpanelusername@myprimarydomain.org/home/cpanelusername/git_repositories/myrepo

Si vous tapez git remote, vous verrez cette liste à côté de toutes les télécommandes Git existantes (comme origin) auxquelles vous pouvez envoyer du code.

Alors maintenant, poussez la branche principale de votre code (ou une branche différente si vous préférez) :

git push production main

7. S’ASSURER QUE LES DOSSIERS APPARAISSENT



Il est possible que dans le dossier ~/git_repositories/myrepo/ sur le serveur, aucun fichier ne soit visible par défaut.

Il faut alors vous rendre dans cPanel, dans l’écran « Gérer » du référentiel Git. Sélectionnez la branche principale dans le menu déroulant « Branche extraite », puis cliquer sur « Mettre à jour ». Les fichiers de votre branche principale devraient maintenant apparaître dans ~/git_repositories/myrepo/

8. CRÉER LE DOMAINE



Dans cPanel, dans « Domains », créez un nouveau domaine (example.org) et décochez la case « Share document root ». Vous pouvez ensuite « Spécifier le répertoire où vous voulez que les fichiers de ce domaine existent », qui doit être ~/git_repositories/myrepo

De retour à l’écran « List Domains », vous pouvez maintenant définir « Force HTTPS Redirect » sur « On ».

9. CRÉER L’APPLICATION PYTHON



Dans cPanel, dans « Setup Python App », créez une nouvelle application avec les paramètres suivants :

Name Value
Python version 3.8.6
Application Root git_repositories/myrepo
Application URL example.org
Application Startup file passenger_wsgi.py
Application Entry Point application
Passenger Log File logs/myrepo.log
You can choose a different Python version; 3.8.6 was the most recent available to me.

Cliquez sur « CREATE ».

10. AJOUTER DES VARIABLES D’ENVIRONNEMENT



Sur la même page pour votre application Python, allez en bas et créez ces variables d’environnement :

Name Value
ALLOWED_HOSTS	example.org,www.example.org
DJANGO_SECRET_KEY	[your secret key]
DJANGO_SETTINGS_MODULE	myproject.settings
DATABASE_URL	mysql://databaseuser:databasepassword@localhost:3306/databasename
Cliquez ensuite sur « SAUVEGARDER », dans le coin supérieur droit de la page, sinon tout sera perdu (demandez-moi comment je sais).


Notes :

Vous pouvez créer une nouvelle clé secrète Django pour ce site en utilisant n’importe quel générateur de clé secrète.
Le module de paramètres devrait être le même que celui mentionné dans votre fichier passenger_wsgi.py. (Peut-être que nous n’avons pas besoin des deux?)
Pour l’URL de la base de données, remplacez databaseuser, databasepassword et databasename par ceux que vous avez notés à l’étape 2.

11. INSTALLATION DES EXIGENCES PYTHON



Cliquez sur le bouton « Run Pip Install » et sélectionnez requirements.txt. Tout étant bien, il installera avec succès vos modules Python requis dans un nouvel environnement virtuel.

12. RECUEILLIR LES FICHIERS STATIQUES ET MIGRER LA BASE DE DONNÉES



Sur la même page pour votre application Python, dans le champ « Execute Python Script », entrez chacun de ces éléments, en cliquant sur le bouton « Run Script » après chacun :

manage.py collectstatic --no-input
manage.py migrer


Remarque : Si vous préférez, vous pouvez les exécuter à partir de la ligne de commande une fois que vous êtes SSH’d dans le serveur. En haut de la page de l’application Python dans cPanel se trouve une longue commande que vous pouvez utiliser pour entrer dans l’environnement virtuel. Copiez-le et collez-le dans votre terminal. Ensuite, vous pouvez exécuter les commandes manage.py ... à partir de là, maintenant ou à l’avenir.

13. DÉMARRER L’APPLI



Sur la même page pour votre application Python, cliquez sur le bouton « START APP » en haut de la page. Visitez votre site Web (www.example.org) dans le navigateur.

Il est possible qu'une erreur « Permission Denied » apparaisse au moment d'essayer d’accéder à Passenger.json. Celle-ci peut être corrigé en changeant les autorisations pendant que SSH est sur le serveur :

chmod ug+rx ~/git_repositories
chmod ug+rx ~/git_repositories/myrepo


14. AJOUTER LA JOURNALISATION DES ERREURS



Il est possible de voir des erreurs Django par défaut en utilisant la journalisation de cPanel. Toutefois, si vous l’ajoutez à vos paramètres Django, il enregistrera les traces d’erreurs dans le fichier spécifié :

LOG_FILE = "/home/cpanelusername/logs/myproject-django-errors.log"

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "verbose": {
            "format": "{levelname} {asctime} {module} {process:d} {thread:d} {message}",
            "style": "{",
        },
    },
    "handlers": {
        "file": {
            "level": "ERROR",
            "class": "logging.FileHandler",
            "filename": LOG_FILE,
        },
    },
    "loggers": {
        "django": {
            "handlers": ["file"],
            "level": "ERROR",
            "propagate": True,
        },
    },
}


15. CONFIGURER L’HÉBERGEMENT DES FICHIERS MULTIMÉDIAS



Si votre site Web Django a besoin d’héberger des fichiers « médias » – des fichiers et des images téléchargés via l’administrateur Django, ou via d’autres formulaires sur votre site Web – le moyen le plus simple que j’ai pu trouver était de configurer un sous-domaine distinct à partir duquel les servir. Au moins cPanel est bon pour héberger des fichiers statiques.

Dans cPanel, dans « Subdomains », créez un nouveau sous-domaine media.example.org avec une racine de document de ~/media.example.org

Cela aurait dû créer un répertoire à cet emplacement. À l’intérieur, créez un fichier texte appelé . htaccess (notez le point de tête) contenant ceci (avec votre nom de domaine à la place) :

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "https://www.example.org"
    Header set Access-Control-Allow-Headers "X-Requested-With"
</IfModule>


Cela permet à votre site web Django d’accéder aux fichiers hébergés sur votre nouveau sous-domaine. Vous trouverez peut-être que vous devez définir d’autres en-têtes ou des en-têtes différents, mais cela a fonctionné pour moi jusqu’à présent.

Dans cPanel, dans « Domaines », définissez « Forcer la redirection HTTPS » sur « Activé » pour media.example.org.

Dans le fichier de paramètres Django utilisé sur le serveur, définissez les paramètres suivants :

MEDIA_ROOT = "/home/cpanelusername/media.example.org/"
MEDIA_URL = "https://media.example.org/"

(N’oubliez pas de valider les modifications et de pousser les fichiers.)

Vous devriez maintenant constater que de nouveaux fichiers multimédias seront téléchargés dans ~/media.example.org/ et seront servis à partir de https://media.example.org.

Vous devrez peut-être créer des répertoires supplémentaires dans ~/media.example.org/ si vous avez défini les champs de modèle pour upload_to sous-répertoires. Je ne me souviens pas si Django les créera automatiquement s’ils sont manquants.

TRAVAIL EN COURS



Vous devriez maintenant avoir un site web.

Lorsque vous modifiez votre code, vous devez suivre cette procédure pour mettre à jour le site :

Validez vos modifications sur Git, puis sur git push production main (ou quel que soit le nom distant et le nom de branche que vous utilisez).

Si vous n’avez pas modifié le fichier requirements.txt, ajouté des migrations ou modifié des fichiers statiques que vous pouvez, dans cPanel, dans « Setup Python App », cliquez sur l’icône de flèche circulaire pour redémarrer votre application.

Ou, si vous avez fait l’une de ces choses :

Dans cPanel, dans « Setup Python App », cliquez sur l’icône de crayon à côté de votre application.
Si vous avez modifié le fichier requirements.txt, cliquez sur le bouton « Run Pip Install ».
Si vous avez ajouté des migrations, allez dans le champ « Execute python script », entrez manage.py migrate et cliquez sur le bouton « Run Script ».
Si des fichiers statiques ont été ajoutés ou modifiés, allez dans le champ « Execute python script », entrez manage.py collectstatic -- no-input, et cliquez sur le bouton « Run Script ».
Cliquez sur le bouton « RESTART » en haut de la page.

Mis à jour le : 30/01/2024

Cet article a-t-il répondu à vos questions ?

Partagez vos commentaires

Annuler

Merci !