open1024.fr

Libérez vos octets !

Outils pour utilisateurs

Outils du site


Panneau latéral

developpement:django:django_deploiement

2020-11-08: Création

Comment déployer Django ?

Contexte

L'objectif est de déployé Django sur la plateforme suivante:

  • Système d'exploitation GNU Linux Debian 10.6.
  • Diffusion des statiques (image etc) via Nginx.
  • Propulsion de Django via Crossbar pour bénéficier des Websockets. Voir https://crossbar.io/ pour plus d'info sur le Framework.
  • La base de données reste sqlite3 pour simplifier dans un 1er temps. Elle sera migrée ensuite vers PostgreSQL.

Coté machine de développement :

Installation de l’environnement virtuel Python

Pour la réalisation du projet, cest Pipenv qui a étét utilisé. Je préfère maintenant utiliser cet outil qui permet de linker facilement l'environnement virtuel grace au fichierPipfile.
Ce guide explique les subtilité de Pipenv et les dépendance des les projets : https://www.codeflow.site/fr/article/pipenv-guide

La précaution à prendre est de bien utiliser Pipenv pour avoir la nomenclature des versions de librairies de l'environnement virtuel. Si l'on utilise le fichier (historique) requirements.txt il est possible de l'utiliser et de profiter des avantages de Pipenv:

Exemple: Mise à jour de requirements.txt pour un projet éxistant:

$ pip freeze > requirements.txt

Enrichissement de Pipenv avec requirements.txt

$ pipenv install -r requirements.txt                                              
Requirements file provided! Importing into Pipfile…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Updated Pipfile.lock (71fee3)!
Installing dependencies from Pipfile.lock (71fee3)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 75/75 — 00:02:44
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

Extrait de Pipfile:

$ cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
 
[dev-packages]
 
[packages]
aioredis = "==1.3.1"
argon2-cffi = "==20.1.0"
asgiref = "==3.2.10"
async-timeout = "==3.0.1"
attrs = "==20.2.0"
autobahn = "==20.7.1"
bcrypt = "==3.2.0"
begins = "==0.9"
[...]
Django = "==3.1.2"
Jinja2 = "==2.11.2"
[...]
Twisted = "==20.3.0"
Werkzeug = "==1.0.1"
"zope.interface" = "==5.1.2"
 
[requires]
python_version = "3.8"

Extrait de Pipfile.lock qui fait office de référence de build pour la production :

{
    "_meta": {
        "hash": {
            "sha256": "360ee962e7ecdb9ce3967cb5a08616d51347e3b35ae2f2c5fef4a1138c6ce7b7"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.8"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
[...]
       "django": {
            "hashes": [
                "sha256:a2127ad0150ec6966655bedf15dbbff9697cc86d61653db2da1afa506c0b04cc",
                "sha256:c93c28ccf1d094cbd00d860e83128a39e45d2c571d3b54361713aaaf9a94cac4"
            ],
            "index": "pypi",
            "version": "==3.1.2"
        },
[...]
Si l'on a pas définit Pipfile et Pifile.lock il est nécéssaire de suivre la procédure ci-dessus et de commiter ces 2fichiers suivi d'un push pour les envoyer sur ve serveur d'hébergement. Ils seront utilisés pour le déploiement de production.

Coté serveur :

$ mkdir ~/django.git
$ cd ~/django.git
$ git --bare init
Dépôt Git vide initialisé dans /home/open1024django/django.git/
fatal: this operation must be run in a work tree
  • Créer un dossier d'exploitation du projet et un dossier pour les scripts de config:
$ mkdir ~/django_www
$ mkdir ~/scripts

Organisation générale:

tree -L 2
.
├── django.git
│   ├── branches
│   ├── config
│   ├── description
│   ├── HEAD
│   ├── hooks
│   ├── info
│   ├── objects
│   └── refs
├── django_www
└── scripts

Déploiement du projet

Coté machine de développement

  • Commiter les dernières modifications pour avoir une copie de travail propre.
  • Ajouter le nouveau dépôt puis y envoyer le projet:
$ remote add open1024 ssh://user@open1024.fr:xxx/home/user/django.git
$ git push open1024 master

Coté serveur

Ceci est une méthode basique de clonage du projet. Dans un 2ème temps nous utiliseront les hooks de git pour déployer après le push depuis le machine de développement.

$ cd ~/django_www
$ git clone ../django.git
Clonage dans 'django'...
fait.

Visu du clonage du projet:

 $ ls django
argonautes  docs  manage.py  Pipfile  project_cfg  README.md  README.MD  web

Installation de l'environnement virtuel

Aller dans le dossier de clonage et lancer l'installation avec pipenv install :

$ cd ~/django_www/django
$ pipenv install                                                                                                                            15319:43:11  
Creating a virtualenv for this project…
Using /usr/bin/python3 (3.8.6) to create virtualenv…
created virtual environment CPython3.8.6.final.0-64 in 273ms
  creator CPython3Posix(dest=/home/open1024django/.local/share/virtualenvs/django_www-9HFou1gn, clear=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/open1024django/.local/share/virtualenv)
    added seed packages: pip==20.1.1, pkg_resources==0.0.0, setuptools==44.0.0, wheel==0.34.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
 
Virtualenv location: /home/open1024django/.local/share/virtualenvs/django_www-9HFou1gn
Creating a Pipfile for this project…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (9e16cc)!
Installing dependencies from Pipfile.lock (9e16cc)
developpement/django/django_deploiement.txt · Dernière modification: 2021/07/02 10:39 de jc_online