DevOps, déploiement, opérations¶

Continuous Integration / Continuous Delivery¶

La documentation du process de CI/CD est disponible dans la section Référence/Infrastructure/CI-CD

Accéder à un shell en production¶

Pour executer une commande en production, il faut au préalable se connection au shell via le CLI Scalingo.

Ensuite il est possible d’ouvrir un shell (ici bash) dans le worker Scalingo.

scalingo run --app quefairedemesobjets bash

L’intĂ©gralitĂ© des commandes possibles n’est pas documentĂ©e ici, elle l’est dans la documentation officielle de Django

L’ensemble des commandes documentĂ©es ci-aprĂšs peut ĂȘtre lancĂ©e soit depuis un environnement local, soit depuis un shell en production ou prĂ©-production.

Rollback: Revenir Ă  une version prĂ©cĂ©dente de l’application dĂ©ployĂ©e¶

Dans le cas d’une catastrophe en production, il est parfois nĂ©cessaire de revenir Ă  la version prĂ©cĂ©dente. Suivez les Ă©tapes ci-dessous pour revenir Ă  la version prĂ©cĂ©dente

Rollback des interfaces¶

Prérequis¶

  • PrĂ©venir l’équipe du problĂšme de prod et du rollback Ă  venir sur Mattermost

  • Voir avec l’administrateur des donnĂ©es (Christian) si des modifications rĂ©centes sont Ă  sauvegarder avant la restauration de la base de donnĂ©es

  • Tester la procĂ©dure de rollback ci-dessous en preprod avant de l’appliquer en production

Rollback du code¶

  • VĂ©rifier le tag de version prĂ©cĂ©dente sur la page des releases github

  • Pousser le tag de la version prĂ©cĂ©dente en production

git remote add prod-interface git@ssh.osc-fr1.scalingo.com:quefairedemesobjets.git
git push -f prod-interface <TAG>:master

Base de données¶

Restaurer la base de donnĂ©es avec la sauvegarde souhaitĂ©e (gĂ©rĂ©ralement, la sauvegarde juste avant l’incident)

  • Copier de la sauvegarde de la base de donnĂ©es localement Ă  partir de l”interface Scalingo

  • DĂ©clarer les variables d’environnements ci-dessous et Ă©xĂ©cuter la commande de restauration

DUMP_FILE=20241216001128_quefairedem_5084.tar.gz
DATABASE_URL=<Copie from scalingo env variable SCALINGO_POSTGRESQL_URL>
for table in $(psql "${DATABASE_URL}" -t -c "SELECT \"tablename\" FROM pg_tables WHERE schemaname='public'"); do
     psql "${DATABASE_URL}" -c "DROP TABLE IF EXISTS \"${table}\" CASCADE;"
done
pg_restore -d "${DATABASE_URL}" --clean --no-acl --no-owner --no-privileges "${DUMP_FILE}"

TODO: refaire un script de restauration de la base de données plus simple à utiliser avec des input et tout et tout

Vérifier que la restauration est effective¶

AccĂ©der Ă  la carte et jouer avec : La carte AccĂ©der au formulaire et joue avec : Le formulaire AccĂ©der Ă  l’administration Django et vĂ©rifier les donnĂ©es qui ont Ă©tĂ© restaurĂ©e : Admin