Aller au contenu principal

Déployer une stack Django (Django + PostgreSQL)

Le tutoriel Flask portait sur une application tenant dans un seul fichier. Celui-ci déploie un vrai projet Django avec PostgreSQL, sous forme de Stack : la plateforme injecte DATABASE_URL, que Django lit au moyen de dj-database-url.

Résultat attendu : en visitant /, vous lisez Hello from Kuploy Stacks! Visits: N, le compteur augmentant à chaque rafraîchissement.

1. Récupérer le code​

Prenez le projet tout prêt dans kuploy/examples (sous-répertoire django-postgres) :

git clone https://github.com/kuploy/examples
# le projet se trouve dans examples/django-postgres

Traitez d'abord les prérequis des tutoriels — un fournisseur Git connecté et un registre de build — puis connectez le dépôt et renseignez le chemin de build comme dans Déployer votre première application.

Les parties qui concernent la plateforme figurent ci-dessous ; le reste est un django-admin startproject standard, assorti d'une application.

requirements.txt
requirements.txt
Django
psycopg[binary]
dj-database-url
gunicorn
mysite/settings.py (base de données)
mysite/settings.py (base de données)
import os
import dj_database_url

# DATABASE_URL est injectée par la connexion de la stack.
DATABASES = {
"default": dj_database_url.parse(os.environ["DATABASE_URL"]),
}
counter/views.py
counter/views.py
from django.db import connection
from django.http import HttpResponse

def home(request):
with connection.cursor() as cur:
cur.execute("CREATE TABLE IF NOT EXISTS visits (count int)")
cur.execute("INSERT INTO visits (count) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM visits)")
cur.execute("UPDATE visits SET count = count + 1")
cur.execute("SELECT count FROM visits")
n = cur.fetchone()[0]
return HttpResponse(f"Hello from Kuploy Stacks! Visits: {n}")
ALLOWED_HOSTS

Mettez ALLOWED_HOSTS = ["*"] — ou votre domaine — dans settings.py, pour que Django réponde derrière l'ingress de Kuploy.

2. Choisir une méthode de build​

Les deux appliquent les migrations au démarrage, après que la stack a déployé la base. Voir Méthodes de build.

Le dépôt contient un Dockerfile :

Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
# Appliquer les migrations, puis servir. La stack déploie d'abord le composant base de données.
CMD ["sh", "-c", "python manage.py migrate && gunicorn -b 0.0.0.0:8000 mysite.wsgi"]

À la création de l'application, choisissez Build Type → Dockerfile et saisissez Dockerfile dans le champ Docker File (obligatoire, relatif au chemin de build).

3. Créer les services​

Dans l'environnement de votre projet :

  1. Create Service → Application, nommée web. L'assistant Set up your application s'ouvre : suivez les étapes dans l'ordre, ou fermez-le pour passer par les onglets du service.
    • Source — pointez vers le dépôt d'exemples et renseignez Build Path à django-postgres.
    • Build — choisissez le Build Type retenu ci-dessus.
    • Network — mettez le port à 8000 ; ajoutez un domaine si vous voulez la rendre publique.
    • Registry — sélectionnez le registre des prérequis ; sans lui, le build n'a nulle part où pousser et le déploiement échoue sur Registry required. (Étape automatiquement sautée pour une source de type image Docker ou un déploiement sur serveur unique.)
    • Deploy — reste désactivé tant que la source et le registre ne sont pas définis. Ne déployez pas encore.
  2. Create Service → Database → PostgreSQL, nommée db (les valeurs par défaut conviennent). Sa chaîne de connexion interne — affichée dans l'onglet General de la base — est postgresql://<utilisateur>:<motdepasse>@<nom-applicatif-de-la-base>:5432/<base>, l'hôte étant le nom applicatif du service (voir Bases de données). C'est exactement cette chaîne que la stack injectera sous le nom DATABASE_URL.

4. Les regrouper dans une stack​

  1. Barre d'outils de l'environnement → Stacks → Create stack, nommez-la visits, puis ouvrez-la.
  2. Add component → ajoutez web, puis db.

5. Les relier​

Tirez un fil de db vers web (ou cliquez sur Connect) :

  • Provider : db
  • Source field : connectionString
  • Consumer : web
  • Env var name : DATABASE_URL

dj-database-url l'analyse et en déduit le réglage DATABASES de Django.

6. Déployer​

Cliquez sur Deploy stack : db se déploie d'abord, puis web, qui lance migrate au démarrage contre la base désormais prête. Ouvrez le domaine de l'application ; rafraîchissez, et le compteur grimpe.

Vérifier l'injection

L'onglet Environment du service web affiche un bloc géré contenant la valeur résolue de DATABASE_URL.

Ce que vous avez appris​

  • La connexion de stack qui suffisait à une application Flask d'un seul fichier pilote tout aussi bien un projet Django complet : Django se contente de consommer DATABASE_URL via dj-database-url.
  • Les migrations s'exécutent sur le composant web au démarrage, après que la stack a déployé la base.

La suite : Node.js ou PHP.