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 comprisDjango-aussi rapidementquepossible.
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 :
Après avoir répondu aux invites, 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 nouveau_projet && 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 # Définir les variables d'environnement de la base de données 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}" # Définir les variables d'environnement du cache export CACHE_HOST="$REDIS_HOST" export CACHE_PORT="$REDIS_PORT" export CACHE_SCHEME="$REDIS_SCHEME" export CACHE_URL="${CACHE_SCHEME} ://${CACHE_HOST}:${CACHE_PORT}" # Définir les variables d'environnement Redis export REDIS_URL="$CACHE_URL "# Celery export CELERY_BROKER_URL="$CACHE_URL "# Général
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 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" montages : "/staticfiles" : "source" : "local" "source_path" : "static_assets" relations : 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
.
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 effectuer des livraisons et des poussées, avec quelques travailleurs Celery définis :
# .upsun/config.yaml applications : new_project : ... workers : celery_worker : commands : start : "celery -A config.celery_app worker" celery_beat : commandes : 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 !