96 lines
3.1 KiB
Plaintext
96 lines
3.1 KiB
Plaintext
|
== Mise à jour de l'application
|
||
|
|
||
|
Une application sans aucun bug et avec toutes les fonctionnalités présentes du premier coup, on n'a 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 :
|
||
|
|
||
|
. La récupération des nouvelles sources
|
||
|
. La mise à jour du schéma de la base de données
|
||
|
. La récupération des (nouveaux) fichiers statiques
|
||
|
. Le redémarrage de gunicorn, puisque les processus précédents devraient encore être en train de tourner - si ce n'est pas le cas, vous aurez sûrement mis une page d'erreur avec une licorne en place ;-)
|
||
|
|
||
|
=== Récupération des sources
|
||
|
|
||
|
Si vous avez suivi ce guide jusqu'ici, vos sources devraient se trouver dans le répertoire `/webapps/gwift` d'un utilisateur. Suivant la sécurité mise en place, vous aurez deux possibilités:
|
||
|
|
||
|
. Soit les sources sont toujours liées au dépôt Git/Mercurial/Whatever
|
||
|
. Soit, vous devrez télécharger une archive contenant les fichiers.
|
||
|
|
||
|
Dans le premier cas :
|
||
|
|
||
|
[source,bash]
|
||
|
----
|
||
|
cd ~/webapps/gwift
|
||
|
git fetch
|
||
|
git checkout <version_number>
|
||
|
----
|
||
|
|
||
|
Dans le second cas :
|
||
|
|
||
|
[source,bash]
|
||
|
----
|
||
|
wget -O ...
|
||
|
unzip / tar xvfz / ...
|
||
|
chown gwift:webapps ...
|
||
|
----
|
||
|
|
||
|
Et dans les deux cas:
|
||
|
|
||
|
[source,bash]
|
||
|
----
|
||
|
source ~/.venvs/gwift/bin/activate
|
||
|
python manage.py migrate
|
||
|
python manage.py collectstatic
|
||
|
supervisorctl reload
|
||
|
----
|
||
|
|
||
|
|
||
|
NOTE: j'avais bidouillé un truc avec la documentation de Fabric, mais je pense que je ne l'avais jamais essayé :-)
|
||
|
|
||
|
[source]
|
||
|
----
|
||
|
*****************************
|
||
|
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: y'a quand même un truc un peu foireux, c'est que l'utilisateur ci-dessus doit passer par root (ou sudo) pour redémarrer supervisorctl. C'est un peu moyen. Voir s'il n'y a pas un peu mieux comme méthode.
|