Aller au contenu principal

Déployer une stack Python (Flask + PostgreSQL)

Une application Flask minimale qui compte les visites d'une page dans PostgreSQL, déployée comme une Stack : la plateforme injecte la chaîne de connexion à la base dans l'application web et déploie les deux dans l'ordre — sans recopier le moindre identifiant.

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

1. L'application​

Le code est le même quelle que soit la méthode de build retenue :

app.py
app.py
import os
import psycopg
from flask import Flask

app = Flask(__name__)
DATABASE_URL = os.environ["DATABASE_URL"] # injectée par la connexion de la stack

def init_db():
with psycopg.connect(DATABASE_URL) as conn:
conn.execute("CREATE TABLE IF NOT EXISTS visits (count int)")
if conn.execute("SELECT count(*) FROM visits").fetchone()[0] == 0:
conn.execute("INSERT INTO visits VALUES (0)")

@app.route("/")
def home():
with psycopg.connect(DATABASE_URL) as conn:
conn.execute("UPDATE visits SET count = count + 1")
n = conn.execute("SELECT count FROM visits").fetchone()[0]
return f"Hello from Kuploy Stacks! Visits: {n}"

init_db()
requirements.txt
requirements.txt
flask
psycopg[binary]
gunicorn

Récupérez le tout depuis kuploy/examples (sous-répertoire flask-postgres), ou créez les fichiers vous-même et poussez-les dans un dépôt Git. 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.

2. Choisir une méthode de build​

Kuploy sait construire ce même code de plusieurs façons. Choisissez-en une — votre choix est repris d'un tutoriel à l'autre. Voir Méthodes de build pour la liste complète.

La maîtrise complète. 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
CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"]

À la création de l'application, choisissez Build Type → Dockerfile et saisissez Dockerfile dans le champ Docker File : il est obligatoire, et s'entend relativement au chemin de build. Vous pouvez laisser Docker Context Path vide.

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 votre dépôt Git (renseignez Build Path à flask-postgres si vous partez de kuploy/examples).
    • 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 : il faut d'abord la base de données.
  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 du nœud db vers le nœud web (ou cliquez sur Connect) :

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

Cela injecte postgresql://utilisateur:motdepasse@db-nomapp:5432/nombase dans web au moment du déploiement. psycopg la lit directement.

6. Déployer​

Cliquez sur Deploy stack. La plateforme déploie db en premier, puis web, puisque web dépend de db. Ouvrez le domaine de l'application : rafraîchissez, et le compteur grimpe.

Vérifier l'injection

Dans l'onglet Environment du service web, vous verrez un bloc géré contenant la valeur résolue de DATABASE_URL. C'est la connexion de la stack à l'œuvre.

Ce que vous avez appris​

  • Un composant de stack reste un service ordinaire : web et db conservent tous leurs réglages.
  • Une seule connexion remplace tout le câblage manuel des identifiants.
  • L'ordre des dépendances découle automatiquement de la connexion.
  • La même application se déploie via Dockerfile ou Nixpacks — seule la configuration de build change.

La suite : la même application en Node.js ou en PHP.