gwift-book/source/deploy/update-app.adoc

3.1 KiB
Executable File
Raw Blame History

Mise à jour de lapplication

Une application sans aucun bug et avec toutes les fonctionnalités présentes du premier coup, on na jamais vu (sauf peut-être Chuck Norris?).

Vous serez amenés (souvent?) à faire des mises à jour de votre application.

Les étapes à ne surtout pas oublier sont :

  1. La récupération des nouvelles sources

  2. La mise à jour du schéma de la base de données

  3. La récupération des (nouveaux) fichiers statiques

  4. Le redémarrage de gunicorn, puisque les processus précédents devraient encore être en train de tourner - si ce nest pas le cas, vous aurez sûrement mis une page derreur avec une licorne en place ;-)

Récupération des sources

Si vous avez suivi ce guide jusquici, vos sources devraient se trouver dans le répertoire /webapps/gwift dun utilisateur. Suivant la sécurité mise en place, vous aurez deux possibilités:

  1. Soit les sources sont toujours liées au dépôt Git/Mercurial/Whatever

  2. Soit, vous devrez télécharger une archive contenant les fichiers.

Dans le premier cas :

cd ~/webapps/gwift
git fetch
git checkout <version_number>

Dans le second cas :

wget -O ...
unzip / tar xvfz / ...
chown gwift:webapps ...

Et dans les deux cas:

source ~/.venvs/gwift/bin/activate
python manage.py migrate
python manage.py collectstatic
supervisorctl reload
Note
javais bidouillé un truc avec la documentation de Fabric, mais je pense que je ne lavais jamais essayé :-)
*****************************
Automatisation du déploiement
*****************************

Pour automatiser le déploiement, il existe `Fabric <http://www.fabfile.org/>`_.

 * **Problème**: cette librairie n'existe que pour Python2.7.
 * **Avantage**: on peut écrire du code semblable à `ceci <https://github.com/UrLab/incubator/blob/master/fabfile.py>`_...

.. code-block:: python

    from fabric.api import run, cd
    from fabric.context_managers import prefix


    def deploy():
        code_dir = '/home/www-data/incubator'
        with cd(code_dir), prefix('source ve/bin/activate'):
            run('sudo supervisorctl stop incubator')
            run("./save_db.sh")
            run("git pull")
            run("pip install -r requirements.txt --upgrade -q")
            run("./manage.py collectstatic --noinput -v 0")
            run("./manage.py makemigrations")
            run("./manage.py migrate")
            run('sudo supervisorctl start incubator')

En gros:

 1. On se place dans le bon répertoire
 2. On arrête le superviseur
 3. On sauve les données de la base de données
 4. On charge la dernière version depuis le dépôt Git
 5. On met les dépendances à jour (en mode silencieux)
 6. On agrège les fichiers statiques
 7. On lance les migrations
 8. Et on relance le superviseur.

Avec un peu de chances, l'instance est à jour.
Important
ya quand même un truc un peu foireux, cest que lutilisateur ci-dessus doit passer par root (ou sudo) pour redémarrer supervisorctl. Cest un peu moyen. Voir sil ny a pas un peu mieux comme méthode.