Déployer une application Python avec l'outil Setup Python App

L'outil Setup Python App permet de créer un environnement Python sur votre hébergement afin de déployer et installer une application web conçu en Python. L'outil vous permet de :

  • Choisir la version de Python qui sera utilisée dans le projet. A cet instant, les versions 2.7, 3.3, 3.4, 3.5, 3.6, 3.7 de Python sont proposées.
  • Cela va également faire le lien entre votre nom de domaine et votre application Python. En arrière plan, cela utilise Phusion Passenger et la wsgi
  • Vous pouvez également installer les dépendances avec pip
  • Un environnement virtuel Python est créé, avec la version de votre choix et une commande spéciale sera fournie pour entrer dans cet environnement virtuel lorsque vous travaillez en SSH

En résumé, c'est l'outil à utiliser si vous souhaitez installer une application web conçu avec Python sur un hébergement web o2switch.

Icône Nom Catégorie Description
Setup Python App Logiciel Permet de créer un environnement python pour installer une application web conçu avec Python

L'outil Setup Python App contient trois grandes parties/pages :

  • La page d’accueil qui liste les applications Python déployées
  • La page de création d'une nouvelle application, qui permet de créer un environnement virtuel Python
  • La page d'édition et de gestion d'une application qui est déjà déployée

Sur la page d’accueil de l'outil, vous retrouverez l'ensemble des applications Python déployées sur votre hébergement, ainsi que différents bouton permettant d'éditer/démarrer/stopper/relancer l'application. Il y a également le bouton permettant de créer un nouveau projet Python.

Liste des projets Python déployés sur l'hébergement o2switch

Page d'accueil de l'outil Setup Python app qui liste les projets web Python déployés

Voici le détail de chaque partie intéressante de cette page d’accueil :

  1. Create Application vous permet d'accéder au formulaire de création d'un nouveau projet web Python. Ce formulaire sera détaillé un peu plus tard.
  2. App URI vous indique sur quelle domaine et URL est installé l'application Python
  3. App Root Directory vous indique dans quel dossier de votre hébergement se trouve les fichiers sources de votre projet web
  4. Status indique si l'application est lancée ou stoppée. Contrairement à une application PHP par exemple, une application Python peut être lancée, stoppée, relancée.
  5. permet de stopper l'application
  6. permet de relancer l'application
  7. permet d'ouvrir la page de gestion de l'application
  8. permet de supprimer l'application

La page suivante est la page de création d'une application web Python qui est accessible après avoir cliqué sur le bouton Create Application.

Installer une application Python sur un hébergement o2switch

Formulaire permettant de déployer une application Python sur un hébergement o2switch

Voici le détails de ce formulaire de création d'un environnement virtuel Python :

  1. Create permet de valider le formulaire et créer l'application
  2. Python Version permet de choisir la version de Python qui sera utilisée dans le projet. A la date de la création de cette page, vous avez le choix entre les versions suivantes de Python : 2.7, 3.3, 3.4, 3.5, 3.6, 3.7
  3. Application Root correspond au dossier dans lequel seront stockés les fichiers sources de votre application Python. Généralement il s'agit d'un dossier qui se trouve à la racine de votre hébergement : c'est la configuration recommandée. A ne pas confondre avec la racine du document qui est liée au nom de domaine, qui est généralement différente. Voir la note ci-dessous pour plus d'informations à ce sujet.
  4. Application URL permet de définir sur quel domaine/URL sera déployé l'application
  5. Application Startup File est le fichier, se trouvant à l'intérieur du Application Root, qui sert à lancer l'application. Cela fichier doit suivre la spécification WSGI. En résumé, le WSGI est ce qui permet de faire le lien entre l'application Python et le serveur web.
  6. Application Entry Point est le nom de la fonction, contenue dans le fichier WSGI du Aplication startup file, qui doit être appelée pour exécuter l'application. Généralement, c'est souvent application.
  7. Passenger log file correspond au chemin du fichier de log qui va être créé par Phusion Passenger qui est la technologie utilisée, côté serveur, pour faire fonctionner une application Python. Utile pour faire du débug ou lorsqu'une application ne se lance pas correctement.
  8. Add Variable permet de créer des variables d'environnement qui seront passées à l'application. C'est généralement utiliser pour passer la configuration à l'application, afin d'éviter d'avoir cela dans un fichier de configuration.

Application root et racine du document de domaine

Le dossier Application root est le dossier qui contient les fichiers de l'application Python. La plupart du temps, c'est un dossier à la racine de l'hébergement et nous recommandons à ce que cela reste ainsi.

Ce dossier là ne doit pas être confondu avec la racine du document du nom de domaine, qui correspond au dossier dans lequel pointe le nom de domaine. Généralement le nom de domaine est associé avec un dossier nom-de-domaine.tld à la racine de l'hébergement ou dans le dossier public_html de l'hébergement.

Cela signifie que l'application Python se trouve dans un dossier différents du dossier associé au domaine. C'est normal.

Un exemple concret : les fichiers sources de l'application Python vont se trouver dans le dossier monApplicationPython à la racine de l'hébergement. Le nom de domaine pointe dans le dossier mon-domaine.tld à la racine de l'hébergement. Dans le dossier du nom de domaine, l'outil Setup Python App va créer un fichier .htaccess permettant de faire le lien avec l'application Python.

La page suivante est la page d'édition et de gestion d'une application existante, accessible en cliquant sur l'icône de crayon sur la page d’accueil de l'outil.

Gestion d'une application web Python sur un hébergement o2switch

Page de gestion et d'édition d'un application Python déjà déployée

La page de gestion d'une application python contient de nombreuses fonctionnalités :

  1. Destroy permet de supprimer une application qui est déjà déployée. Supprime simplement l'environnement Python créé par l'outil mais pas vos fichiers sources.
  2. Save permet d'enregistrer les changements que vous avez pu faire sur le formulaire d'édition
  3. Source la commande source est très importante. C'est la commande à lancer pour entrer dans votre environnement Python lorsque vous travaillez en SSH ou avec l'outil Terminal.
  4. Stop App permet de stopper l'application Python. En stoppant l'application, cette dernière ne répond plus et le contenu liée au nom de domaine sera directement accessible, donc prenez garde à ne rien mettre de confidentiel dans le dossier lié au domaine !
  5. Restart permet de relancer l'application, à utiliser lorsque les fichiers sources de votre application changent
  6. Python Version permet de changer la version de Python qui est actuellement en place sur votre projet. Les versions actuellement proposées sont : 2.7, 3.3, 3.4, 3.5, 3.6, 3.7
  7. Application Root permet de changer le dossier dans lequel se trouve les sources de votre application. Ne déplace rien, change juste la configuration du projet. Il est recommandé de ne pas modifier le application root d'une application déployée, cela cause des problèmes. Dans le pire des cas, c'est mieux de supprimer/recréer l'application.
  8. Application URL indique sur quel nom de domaine/URL est installée l'application
  9. Application startup file est le chemin vers le fichier wsgi de l'application qui doit se trouver dans le dossier application root
  10. Application entry point est le nom de la fonction (ou callable), contenu dans le wsgi, qui doit être appelée pour exécuter l'application. Dans 90% des cas, c'est application.
  11. Passenger log file est le chemin vers le fichier de log créé par Phusion Passenger qui est la technologie utilisée pour faire fonctionner Python dans un contexte web sur l'hébergement. A utiliser si vous avez des erreurs avec l'application.
  12. Run pip install permet d'installer les dépendances avec pip. Ce bouton là devient activable après avoir fourni au moins un fichier de dépendances (généralement requirements.txt) dans le champs qui se trouve juste en dessous et en validant avec Add.
  13. Execute Python script permet de lancer un script Python, comme le manage.py dans le cas de Django par exemple. Peut vous permettre d'éviter de devoir utiliser SSH ou l'outil Terminal. Cependant, nous recommandons quand même de lancer vos commandes en SSH ou avec le terminal, l'affichage/gestion sera meilleurs que celui fourni par le Execute Python script
  14. Add Variable permet de créer/modifier les variables d'environnements qui sont passées à votre application

Pour prendre un exemple concret, nous allons déployer l'application Wagtail qui est un CMS conçu en Python et qui se base Django. Il s'agit donc d'une application complète et un bon cas d'étude.

Pour lancer cette installation, nous allons suivre la procédure d'installation qui est indiquée sur le site de Wagtail. L'application s'installe avec un utilitaire proposé par Wagtail.

En résumé, on va donc :
  1. Créer un projet Python vide afin de créer un environnement Python
  2. Installer l'utilitaire Wagtail
  3. Avec l'utilitaire Wagtail, on va créer un nouveau projet de site Wagtail
  4. On va configurer Wagtail et notamment sa base de données mysql et lancer l'assistant de création/remplissage de la base de données avec les données nécessaires au fonctionnement de wagtail
  5. Enfin, il ne restera plus qu'à ajuster le projet, jusqu'à maintenant vide, pour le faire pointer vers le bon wsgi et plus le “Hello World” par défaut
# La procédure d'installation de Wagtail en 7 lignes
pip install wagtail
wagtail start mysite
cd mysite
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
# Cette ligne ne sera pas nécessaire, l'application sera lancé par Phusion Passenger
python manage.py runserver

La première étape consiste à créer un projet Python vide. L'outil va ainsi créer un environnement Python que l'on pourra utiliser pour installer l'utilitaire d'installation de Wagtail.

On se rend donc sur l'outil Setup python app puis on clique sur le bouton Create Application. Sur l'écran suivant, on créé un projet vide, comme ci-dessous.

Création d'un environnement virtuel Python

Création d'une application vide pour générerl'environnement virtuel Python

Pour détailler chaque étape :

  1. Python Version : on choisie la dernière version de Python actuellement proposée, wagtail aura besoin de cela
  2. Application Root : on respecte les bonnes pratiques donc on choisi un dossier à la racine de l'hébergement dans lequel iront les fichiers sources de l'application wagtail
  3. Application URL : on sélectionne sur quel domaine va être installer l'application
  4. Application startup file : on laisse vide pour créer un projet vide. L'outil va automatiquement créé une application “Hello World” d'exemple
  5. Application entry point : on laisse vide également, l'outil va pré-remplir cela avec le “Hello World” d'exemple
  6. Enfin on valide en cliquant sur create

Une fois le projet créé, on arrive sur la page de gestion du projet. La prochaine étape est d'installer l'utilitaire wagtail qui permettra d'installer en quelques clics le CMS wagtail.

On va faire cela avec l'outil Terminal dans cPanel (ou en SSH si vous préférez, ça revient au même).

Première étape, il faut copier la commande source qui est donné dans la page de gestion du projet. C'est la commande qui permet d'entrer dans l'environnement Python.

Commande source permettant d'entrer dans l'environnement Python

La commande source permet d'entrer dans l'environnement Python créé par l'outil

Dans la capture d'écran, on remarque également que Application startup file et Application entry point ont été remplis avec les valeurs par défaut du “Hello World”.

Ensuite, on se rend dans l'outil terminal, on lance la commande source, puis la première commande donné par le guide d'installation de wagtail, permettant d'installer l'utilitaire d'installation.

# On entre dans l'environnement Python
source /home/o2dev/virtualenv/monProjetWagtail/3.7/bin/activate && cd /home/o2dev/monProjetWagtail
# On installe l'utilitaire wagtail avec pip
pip install wagtail

Installation de l'utilitaire wagtail en SSH

Installation de wagtail avec pip sur un hébergement o2switch

Dans la capture d'écran de l'outil Terminal de cPanel, on constate que suite à l'activation de la commande source, le prompt du shell change (cf. en bleu) et c'est à cela que l'on reconnait que l'on travaille dans l'environnement Python.

Maintenant que nous avons accès à l'utilitaire wagtail, nous pouvons créer un projet de site.

# On va installer le projet wagtail dans un dossier temporaire pour commencer donc on s'enlève du répertoire courant
cd ..
# On démarre un nouveau projet wagtail dans 'monsite' 
wagtail start monsite 
# On se place dans le dossier du projet de site wagtail
cd monsite
# On installe les dépendances 
pip install -r requirements.txt

Création du projet de site Wagtail et installation des dépendances

Création d'un nouveau site Wagtail et installation des dépendances

A présent, il faut faire quelques ajustements et configurations

  • le site est dans le dossier monsite, il faut déplacer le contenu de ce dossier dans le dossier définie dans application root. Ce dossier temporaire monsite a été créé car ce n'est pas possible de créer un projet de site wagtail dans un dossier non vide (ce qui est le cas du dossier définie dans le application root)
  • ensuite il faut configurer wagtail pour lui dire d'utiliser une base de données mysql. Sinon il utilise sqlite et la version proposée sur l'hébergement ne conviendra pas. Evidemment, il faudra créer la base de données/utilisateur/mot de passe depuis l'outil bases de données mysql de cPanel.
  • comme on utilise mysql, il faudra également installer la dépendance mysqlclient
  • ensuite, il faudra lancer les commandes wagtail permettant de remplir la base de données (autrement dit, faire la migration)
  • enfin, il faudra créer un compte administrateur
# On copie les données du répertoire monsite directement dans le répertoire du projet python
cp -vaR monsite/* monProjetWagtail 
# On se replace dans le bon dossier
cd monProjetWagtail 
# On édite le fichier de configuration. Note : dans le dossier 'monsite' original, il y avait également un sous dossier 'monsite'. C'est ainsi que Wagtail est structuré ...
# Voir ci-dessous la portion de code à ajouter pour configurer la base de données mysql
vi monsite/settings/base.py
# On a besoin d'installer une dépendance supplémentaire : mysqlclient 
pip install mysqlclient
# On créé le schema/table de la base de données
python manage.py migrate
# On créé un administrateur
python manage.py createsuperuser
# Portion de code à ajouter dans le settings/base.py du projet. Remplace la portion de code existante configurant une base sqlite.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'o2dev_bdd',
        'USER': 'o2dev_bdd',
        'PASSWORD': 'mot de passe mysql',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

Configuration et ajustement de wagtail

Configuration de wagtail

Enfin, la dernière étape consiste à configurer correctement l'outil Setup Python App, il faudra mettre à jour le chemin vers le fichier wsgi.

Mise à jour du wsgi du projet python

Mise à jour de la configuration dans l'outil Setup Python App

A présent, Wagtail fonctionne correctement ! Wagtail fonctionne correctement

Wagtail est fonctionnel

Le déploiement de Wagtail est un exemple concret complet, cependant dans la réalité, le déploiement est généralement différents car il n'y a pas d'outil, comme l'utilitaire de Wagtail, pour créer le projet.

Voici la procédure pour un déploiement plus générique, d'une application que vous avez pu concevoir vous même :

  1. En premier, il faut récupérer les sources de l'application et les placer dans un dossier à la racine de l'hébergement. Les sources peuvent être récupérés en FTP ou avec GIT.
  2. Ensuite, via l'outil Setup Python App il faut créer un environnement virtuel python :
    • On choisie la version de Python à utiliser. Dépend de votre projet.
    • Dans application root, on indique le chemin dans lequel se trouve les sources de l'application donc le même dossier que celui créé à l'étape 1
    • Dans application URL, il faut choisir sur quel domaine/url va répondre l'application
    • Dans application startup file il faut mettre le chemin vers le fichier wsgi.py de l'application, qui doit être contenu dans le dossier (ou dans un sous dossier de) application root
    • application entry point est généralement défini sur application
  3. Dés que l'environnement est créé, il faut installer les dépendances de l'application
    • On peut faire cela en renseignant le fichier de dépendances requirements.txt dans la partie configurations files puis faire un Run pip install
    • Ou bien (et c'est recommandé), faire cela depuis en SSH ou avec l'outil Terminal. Il faudra bien lancer la commande donné par l'outil, celle qui commence par source pour entrer dans l'environnement python puis lancer pip install
  4. Si vous avez des configurations à faire dans l'application, il faudra modifier les fichiers adéquats. Même chose s'il faut lancer des commandes pour initier correctement l'application (comme la création des tables d'une base de données avec une migration)
  5. Enfin, il suffit de relancer l'application depuis l'outil Setup Python App

En cas d'erreurs, la page d'erreur qui s'affiche (dans le navigateur web) ne contient pas beaucoup d'information par défaut. Il est possible d'activer le mode de debug avancé de Phusion Passenger, la page d'erreur générée sera beaucoup plus complète.

Pour cela, il suffit d'ajouter les lignes suivantes dans le fichier .htaccess à la racine du site internet :

PassengerAppEnv development
PassengerFriendlyErrorPages on

Les erreurs sont également loguées dans l'outil erreurs de cPanel.

Il est possible de déployer intégralement une application Python en ligne de commande. Cela dépasse le cadre de cette documentation, mais vous pouvez utiliser la commande cloudlinux-selector qui est documenté ici.

Cela peut être utilisé lors d'un déploiement automatique, via GIT par exemple.

  • Dernière modification: il y a 9 mois
  • par o2switch