Déployer une application Django sur Heroku

Déployer une application Django sur Heroku

Le déploiement d’une application Django sur Heroku offre une solution efficace et évolutive pour les développeurs. Ce guide complet vous accompagne tout au long du processus, de la configuration de votre environnement local à la mise en production de votre projet et sa gestion en production. En suivant ces étapes, vous assurerez un déploiement fluide, respecterez les meilleures pratiques et serez équipé des outils nécessaires pour résoudre les problèmes éventuels.

1. Introduction

Heroku est une plateforme privilégiée par de nombreux développeurs en raison de sa simplicité d’utilisation et de ses fonctionnalités puissantes. Le déploiement d’applications Django sur Heroku permet de tirer parti d’un environnement cloud sans avoir à se soucier de la gestion de l’infrastructure. La plateforme offre une mise à l’échelle automatique, une variété de modules complémentaires et un contrôle de version intégré, ce qui en fait un excellent choix pour l’hébergement d’applications web.

Ce guide vous fournira des instructions détaillées pour déployer une application Django sur Heroku, en couvrant la configuration initiale, les paramètres d’environnement, la gestion des fichiers statiques et multimédias, la résolution des problèmes et la mise à l’échelle de votre application.

2. Prérequis

Avant de plonger dans le déploiement, vous devez vous assurer que votre environnement de développement est prêt :

  • Python 3.x : Assurez-vous que Python est installé sur votre machine locale.
  • Django 3.x ou plus récent : Le framework Django doit être installé.
  • Git : Heroku utilise Git pour le contrôle de version et les déploiements, donc Git doit être installé et initialisé dans votre projet.
  • Compte Heroku : Inscrivez-vous gratuitement sur Heroku.
  • Heroku CLI : L’interface en ligne de commande d’Heroku doit être installée. Vous pouvez trouver les instructions d’installation ici.
  • Projet Django : Un projet Django prêt à être déployé est nécessaire. Si vous n’en avez pas, nous allons vous guider à travers les étapes pour en créer un simple.

Avec ces éléments en place, vous simplifierez le processus de déploiement.

3. Configuration de votre projet Django

Si vous commencez de zéro, créons un projet Django basique avec une application. Si vous avez déjà un projet, passez à la section suivante.

Pour créer un projet Django, suivez ces commandes :

$ django-admin startproject monprojet
$ cd monprojet
$ python manage.py startapp monapp

Dans le fichier monprojet/settings.py, ajoutez votre nouvelle application à la section INSTALLED_APPS :

INSTALLED_APPS = [
    # autres applications,
    'monapp',
]

Ensuite, créez une vue simple dans monapp/views.py :

from django.http import HttpResponse
def bonjour(request):
    return HttpResponse("Bonjour, Heroku !")

Associez cette vue à une URL en mettant à jour votre fichier monprojet/urls.py :

from django.urls import path
from monapp import views
urlpatterns = [
    path('', views.bonjour, name='bonjour'),
]

Maintenant, exécutez le serveur de développement pour tester l’application localement :

$ python manage.py runserver

Visitez http://localhost:8000 dans votre navigateur. Si tout est configuré correctement, vous devriez voir “Bonjour, Heroku !”.

4. Contrôle de version avec Git

Puisque Heroku utilise Git pour les déploiements, vous devez initialiser un dépôt Git si ce n’est pas déjà fait :

$ git init

Pour éviter de commettre des fichiers inutiles, créez un fichier .gitignore à la racine de votre projet avec le contenu suivant :

*.pyc
db.sqlite3
__pycache__
env
staticfiles
*.log

Une fois cela fait, ajoutez vos fichiers au dépôt Git :

$ git add .
$ git commit -m "Initial commit"

5. Création de votre application Heroku

Ensuite, connectez-vous à votre compte Heroku en utilisant le CLI Heroku :

$ heroku login

Après vous être connecté, créez une nouvelle application Heroku :

$ heroku create nomunique-monprojet

Cette commande crée une nouvelle application Heroku et ajoute une télécommande nommée heroku à votre dépôt Git local. Assurez-vous d’utiliser un nom d’application unique.

6. Configuration de Django pour Heroku

Pour préparer votre application Django au déploiement sur Heroku, il est nécessaire de configurer certains éléments. Commencez par installer les packages essentiels pour la production :

$ pip install gunicorn dj-database-url psycopg2-binary whitenoise

Ces packages incluent :

  • Gunicorn : Un serveur HTTP WSGI Python pour exécuter votre application Django.
  • dj-database-url : Simplifie la configuration de la base de données à l’aide de variables d’environnement.
  • psycopg2-binary : Un adaptateur PostgreSQL pour Python.
  • Whitenoise : Simplifie la gestion des fichiers statiques en production.

Générez un fichier requirements.txt pour suivre vos dépendances :

$ pip freeze > requirements.txt

7. Paramètres de production

Pour intégrer votre projet Django à l’environnement Heroku, mettez à jour le fichier settings.py.

Mise à jour de ALLOWED_HOSTS

Heroku assigne une URL dynamique à votre application. Mettez à jour la configuration ALLOWED_HOSTS pour prendre en compte le domaine Heroku :

ALLOWED_HOSTS = ['localhost', '127.0.0.1', '.herokuapp.com']

Ajouter Whitenoise pour les fichiers statiques

Whitenoise permet à votre application de servir directement des fichiers statiques. Ajoutez-le dans les paramètres MIDDLEWARE :

MIDDLEWARE = [
    # autres middleware,
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

8. Configuration de la base de données

Heroku utilise PostgreSQL comme base de données par défaut, vous devez donc configurer votre application Django en conséquence. Dans settings.py, remplacez la configuration SQLite par défaut par celle-ci :

import dj_database_url
DATABASES = {
    'default': dj_database_url.config(conn_max_age=600, ssl_require=True)
}

Ce paramètre configure automatiquement la connexion à la base de données à l’aide de la variable d’environnement DATABASE_URL fournie par Heroku.

9. Gestion des fichiers statiques et multimédias

Le système de fichiers d’Heroku est éphémère, ce qui signifie qu’il ne persiste pas d’un déploiement à l’autre. Cela rend la gestion des fichiers statiques et multimédias légèrement différente du développement local.

Fichiers statiques

Dans settings.py, configurez la gestion des fichiers statiques :

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Fichiers multimédias

Pour les fichiers multimédias, utilisez un service tiers comme Amazon S3 ou Cloudinary. Si vous choisissez Cloudinary, installez le package nécessaire :

$ pip install django-cloudinary-storage

Ensuite, configurez Cloudinary dans votre fichier settings.py :

CLOUDINARY_STORAGE = {
    'CLOUD_NAME': 'votre_nom_cloud',
    'API_KEY': 'votre_clé_api',
    'API_SECRET': 'votre_secret_api'
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'

N’oubliez pas de définir ces identifiants Cloudinary dans les variables d’environnement d’Heroku (nous en discuterons dans la section suivante).

10. Gestion des variables d’environnement

Pour éviter de stocker des informations sensibles dans votre code source, il est essentiel d’utiliser des variables d’environnement.

Dans settings.py, remplacez votre SECRET_KEY et vos paramètres DEBUG par des variables d’environnement :

SECRET_KEY = os.environ.get('SECRET_KEY', 'votre_cle_secrete_par_defaut')
DEBUG = os.environ.get('DEBUG', 'False') == 'True'

Définissez ces variables d’environnement dans Heroku :

$ heroku config:set SECRET_KEY=votre_cle_secrete
$ heroku config:set DEBUG=False

11. Création d’un Procfile et spécification de la version de Python

Un fichier Procfile indique à Heroku comment exécuter votre application. Créez-en un à la racine de votre projet avec le contenu suivant :

web: gunicorn monprojet.wsgi

Pour spécifier la version de Python, créez un fichier runtime.txt avec la version souhaitée :

python-3.9.7

12. Déploiement sur Heroku

Tout est maintenant configuré, et vous êtes prêt à déployer votre application. Commencez par valider vos modifications :

$ git add .
$ git commit -m "Configurations de déploiement Heroku"

Déployez sur Heroku en poussant vers la télécommande heroku :

$ git push heroku main

Après le déploiement, vous devrez exécuter les migrations de la base de données :

$ heroku run python manage.py migrate

Si vous avez besoin de créer un super-utilisateur pour l’interface d’administration :

$ heroku run python manage.py createsuperuser

13. Tâches post-déploiement

Après le déploiement, vous pouvez vouloir surveiller votre application ou résoudre des problèmes. Voici quelques commandes utiles :

  • Vérifier les journaux :
$ heroku logs --tail
  • Ouvrir votre application dans un navigateur :
$ heroku open
  • Exécuter des commandes de gestion :
$ heroku run python manage.py <commande>

14. Déploiement continu

Vous pouvez automatiser les déploiements en liant votre application Heroku à un dépôt GitHub. Pour configurer cela :

  1. Allez sur votre tableau de bord Heroku, trouvez votre application et sélectionnez Deploy.
  2. Connectez votre dépôt GitHub.
  3. Activez les déploiements automatiques à partir d’une branche spécifique.
  4. Optionnellement, configurez des tests d’intégration continue (CI) pour vérifier la qualité du code avant chaque déploiement.

15. Surveillance et mise à l’échelle de votre application

Heroku fournit des outils puissants pour surveiller et mettre à l’échelle votre application.

Surveillance

Vous pouvez consulter des métriques comme les temps de réponse, la charge des requêtes et l’utilisation de la mémoire à partir de l’onglet Metrics de votre tableau de bord Heroku.

Pour surveiller les journaux :

$ heroku logs --tail

Mise à l’échelle

Pour mettre à l’échelle votre application, augmentez le nombre de dynos (les conteneurs Heroku pour exécuter des applications) :

$ heroku ps:scale web=2

Vous pouvez également réduire la mise à l’échelle en diminuant le nombre de dynos lorsque le trafic est faible.

16. Résolution des problèmes courants de déploiement

Malgré vos efforts, vous pouvez rencontrer des problèmes lors du déploiement ou après. Voici quelques problèmes courants et leurs solutions :

  • Erreur d’application (H10) :
    • Consultez vos journaux pour diagnostiquer le problème.
    • Assurez-vous que votre Procfile est correct.
    • Vérifiez que tous les packages requis sont répertoriés dans requirements.txt.
  • Problèmes de connexion à la base de données :
    • Vérifiez vos paramètres de base de données.
    • Assurez-vous que vous avez appliqué les migrations sur Heroku.
  • Les fichiers statiques ne s’affichent pas :
    • Assurez-vous d’avoir correctement configuré STATIC_ROOT.
    • Exécutez python manage.py collectstatic et validez les fichiers générés.
  • Timeout ou erreur serveur (H13) :
    • Cela peut être causé par des requêtes de longue durée. Envisagez d’utiliser des tâches en arrière-plan pour les opérations intensives.
  • Surcharge mémoire (R14) :
    • Optimisez l’utilisation de la mémoire dans votre application, et envisagez de passer à un dyno plus grand si nécessaire.

17. Meilleures pratiques pour déployer des applications Django sur Heroku

Lorsque vous déployez sur Heroku, suivez ces meilleures pratiques pour assurer la sécurité, les performances et la maintenabilité de votre application :

  1. Variables d’environnement : Utilisez toujours des variables d’environnement pour les données sensibles.
  2. Paramètres de production : Assurez-vous que DEBUG est défini sur False en production.
  3. HTTPS : Heroku gère automatiquement SSL, utilisez toujours HTTPS en production.
  4. Sauvegarde des bases de données : Utilisez heroku pg:backups:capture pour sauvegarder régulièrement votre base de données PostgreSQL.
  5. Mises à jour régulières : Mettez à jour régulièrement vos dépendances avec pip install --upgrade -r requirements.txt.
  6. Authentification et autorisation : Implémentez des mécanismes d’authentification et d’autorisation robustes pour sécuriser votre application.
  7. Surveillance des performances : Utilisez les outils intégrés d’Heroku pour surveiller régulièrement les performances de votre application et ses journaux.

18. Conclusion

Déployer une application Django sur Heroku fournit un environnement évolutif et convivial pour les développeurs. Avec ce guide, vous avez appris à configurer votre application, gérer les variables d’environnement, traiter les fichiers statiques et multimédias, résoudre les problèmes courants et suivre les meilleures pratiques pour un déploiement sécurisé et efficace.

La simplicité d’utilisation d’Heroku, combinée à son ensemble de fonctionnalités puissantes, en fait un excellent choix pour les développeurs Django. Continuez à explorer ses fonctionnalités avancées, ses modules complémentaires et ses outils de surveillance pour optimiser les performances de votre application.

Laisser un commentaire