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
Django
psycopg[binary]
dj-database-url
gunicorn
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
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}")
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.
- Dockerfile
- Nixpacks
Le dépôt contient un 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).
Sans configuration : Nixpacks reconnaît Django tout seul et installe requirements.txt. Aucun Dockerfile n'est nécessaire. Ajoutez un nixpacks.toml pour qu'il migre puis serve sous gunicorn :
[start]
cmd = "python manage.py migrate && gunicorn mysite.wsgi --bind 0.0.0.0:8000"
À la création de l'application, choisissez Build Type → Nixpacks.
3. Créer les services
Dans l'environnement de votre projet :
- 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.
- Source — pointez vers le dépôt d'exemples et renseignez Build Path à
- 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 — estpostgresql://<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 nomDATABASE_URL.
4. Les regrouper dans une stack
- Barre d'outils de l'environnement → Stacks → Create stack, nommez-la
visits, puis ouvrez-la. - Add component → ajoutez
web, puisdb.
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.
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_URLviadj-database-url. - Les migrations s'exécutent sur le composant web au démarrage, après que la stack a déployé la base.