Watch a demoFree trial
Blog

Django en marche

DjangoCLIconfigurationPython
04 août 2025
Chad Carlson
Chad Carlson
Responsable des relations avec les développeurs
Partager
Cet article est également disponible en Allemande et Anglais.

Vous souhaitez démarrer avec Upsun et Python? Le CLI d'Upsun contient une commande appelée project:init conçue pour vous permettre de démarrer sur Upsun avec un certain nombre de frameworks  y compris Django aussi rapidement que possible.

Mise en place

Commençons par une base de code Django simple, dans ce cas en utilisant le populaire utilitaire de création de templates Python cookiecutter:

cookiecutter https://github.com/cookiecutter/cookiecutter-django

Le CLI de cookiecutter vous demandera de répondre à une série de questions sur le courrier électronique, les outils de CI et l'IDE. Répondez selon vos préférences, mais assurez-vous de :

  • Sélectionner la dernière version de PostgreSQL pour votre base de données
  • Sélectionner "Other SMTP" pour le service de messagerie
  • Inclure le Django Rest Framework ("use drf")
  • Choisir "Webpack" pour votre pipeline frontal
  • Inclure "Whitenoise"
  • Utiliser "Celery"

Après avoir répondu aux questions, vous aurez un nouveau projet squelette dans le répertoire que vous avez choisi comme nom (dans les exemples ci-dessous, new_project) :

├── README.md
├── bin
├── compose
├── config
|   ├── __init__.py
|   ├── api_router.py
|   ├── celery_app.py
|   ├── settings
|   |   ├── __init__.py
|   |   ├── base.py
|   |   ├── local.py
|   |   ├── production.py
|   |   └── test.py
|   ├── urls.py
|   └── wsgi.py
├── docs
├── locale
├── manage.py
├── new_project
|   ├── __init__.py
|   ├── conftest.py
|   ├── contrib
|   ├── static
|   ├── templates
|   ├── users
|   └── utils
├── package.json
├── requirements
├── requirements.txt
├── setup.cfg
├── tests
└── webpack

Avec le projet en place, nous pouvons alors générer une première ébauche de notre configuration Upsun en utilisant le CLI:

cd new_project && upsun project:init

Suivez les instructions pour inclure la configuration pour PostgreSQL et Redis. Cette commande détectera automatiquement le projet Django en se basant sur la présence d'un fichier manage.py, et générera deux éléments de configuration : un fichier d'environnement et un fichier YAML de configuration primaire.

Le fichier .environment, situé à la racine du projet qui sera créé, définit les variables d'environnement dont le projet cookiecutter a besoin. Vous pouvez inspecter ce fichier vous-même, mais quelques éléments importants qui deviennent disponibles incluent les paramètres généraux du projet Django :

# .environment

export DJANGO_SETTINGS_MODULE=config.settings.production
export DJANGO_SECRET_KEY="$PLATFORM_PROJECT_ENTROPY"
export DJANGO_ALLOWED_HOSTS=".platformsh.site"

Cette section ajoute les hôtes autorisés de Django pour inclure toutes les URL générées pour les environnements de prévisualisation Upsun, pour mettre à jour la clé secrète de Django afin qu'elle corresponde au hachage unique du projet, et pour tirer parti des paramètres de production (dans ce cas) dans tous les environnements Upsun.

Des informations d'identification supplémentaires sont développées à partir des variables d'environnement intégrées pour établir des connexions avec les services gérés fournis par Upsun :

# .environment

# Set database environment variables
export DB_HOST="$POSTGRESQL_HOST"
export DB_PORT="$POSTGRESQL_PORT"
export DB_PATH="$POSTGRESQL_PATH"
export DB_USERNAME="$POSTGRESQL_USERNAME"
export DB_PASSWORD="$POSTGRESQL_PASSWORD"
export DB_SCHEME="$POSTGRESQL_SCHEME"
export DATABASE_URL="${DB_SCHEME}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_PATH}"

# Set Cache environment variables
export CACHE_HOST="$REDIS_HOST"
export CACHE_PORT="$REDIS_PORT"
export CACHE_SCHEME="$REDIS_SCHEME"
export CACHE_URL="${CACHE_SCHEME}://${CACHE_HOST}:${CACHE_PORT}"

# Set Redis environment variables
export REDIS_URL="$CACHE_URL"# Celery
export CELERY_BROKER_URL="$CACHE_URL"# General

Un fichier .upsun/config.yaml est également ajouté pour configurer la construction, le déploiement et les services disponibles pour le projet. Il inclut la configuration des services que vous avez sélectionnés via les invites :

# .upsun/config.yaml

services:
    postgresql:
        type: postgresql:15
    redis:
        type: redis:7.0

La configuration de l'application est également ajoutée. Elle définit comment Django est construit et déployé via pip, comment l'accès est accordé aux services ci-dessus via des relations, et comment faire tourner le serveur avec Gunicorn : 

# .upsun/config.yaml

applications:
    new_project:
        type: "python:3.11"
        hooks:
            build: |   
                set -eux
                pip install --upgrade pip
                pip install -r requirements.txt
                npm install
                npm run build
            deploy: |   
                set -eux
                python manage.py collectstatic --noinput
                python manage.py migrate
        web:
            commands:
                start: "gunicorn -b unix:$SOCKET config.wsgi"
            upstream:
                socket_family: unix
            locations:
                    "/":
                        "passthru": true
                    "/static":
                        "allow": true
                        "expires": "1h"
                        "root": "static"
        mounts:
            "/staticfiles":
                "source": "local"
                "source_path": "static_assets"
        relationships:
            postgresql: "postgresql:postgresql"
            redis: "redis:redis"

Avec ces deux éléments de configuration, nous pouvons créer un nouveau projet et déployer Django sur Upsun :

$ git add . && git commit -m  “Prepare for Upsun!”
$ upsun project:create 
$ upsun push

Avec cet environnement de production déployé, nous pouvons maintenant ajuster les ressources fournies à cet environnement avec la commande CLI upsun resources:set.

Prochaines étapes

Vous avez peut-être remarqué que le projet cookiecutter attendait des informations d'identification pour configurer la connexion à Redis afin d'exécuter Celery pour gérer les tâches de l'application. Nous avons inclus une variable d'environnement pour la connexion, mais nous n'avons pas spécifié comment exécuter ce service.

Nous pouvons maintenant créer un nouvel environnement de prévisualisation qui peut correspondre à la production en ce qui concerne ses images de construction, ses conteneurs, ses données et ses ressources autant que nous le souhaitons.

$ upsun branch try-celery --type staging

À partir de cet environnement, nous pouvons à nouveau valider et pousser, avec quelques workers Celery définis :

# .upsun/config.yaml
applications:
    new_project:

        ...

        workers:
           celery_worker:
               commands:
                   start: "celery -A config.celery_app worker"
           celery_beat:
               commands:
                   start: "celery -A config.celery_app beat"

Testez la connexion et les performances des workers dans l'environnement isolé, puis, lorsque vous êtes satisfait, passez les nouveaux workers en production : 

$ upsun merge try-celery

Et juste comme ça, votre prochain projet Django est opérationnel et prêt à fonctionner avec le PaaS Django d'Upsun !

Liens utiles

Regarder cette vidéo

Votre meilleur travail
est à l'horizon

Essai gratuit
Discord
© 2025 Platform.sh. All rights reserved.