DevOps, déploiement, opérations¶

Déploiement de la plateforme Airflow hors CD¶

La plateforme Data est dĂ©ploiĂ© automatiquement par le processus de Continuous Deployment. Cependant, il est possibel d’avoir besoin de « forcer » un dĂ©ploiement.

Procédure de déploiement¶

Prérequis¶

  • configururer sa clĂ© ssh dans l’interface de clevercloud (cf. doc clevercloud)

  • configurer un « remote repository » pour airflow-webserver pour ce repository et pour chaque environnemnt

  • configurer un « remote repository » pour airflow-scheduler pour ce repository et pour chaque environnemnt

  • pousser le code souhaitĂ© sur la branch master des 2 repository

en PREPROD¶

git remote add preprod-airflow-scheduler git+ssh://git@push-n3-par-clevercloud-customers.services.clever-cloud.com/app_3d1f7d89-d7f0-433a-ac01-c663d4729143.git
git remote add preprod-airflow-webserver git+ssh://git@push-n3-par-clevercloud-customers.services.clever-cloud.com/app_d3c229bf-be85-4dbd-aca2-c8df1c6166de.git
git push preprod-airflow-scheduler mabranch:master
git push preprod-airflow-webserver mabranch:master

en PROD¶

git remote add prod-airflow-scheduler git+ssh://git@push-n3-par-clevercloud-customers.services.clever-cloud.com/app_fda5d606-44d9-485f-a1b4-1f7007bc3bec.git
git remote add prod-airflow-webserver git+ssh://git@push-n3-par-clevercloud-customers.services.clever-cloud.com/app_efd2802a-1773-48e0-987e-7a6dffb929d1.git
git push prod-airflow-scheduler mabranch:master
git push prod-airflow-webserver mabranch:master

Déploiement sur Scalingo¶

Nous avons besoin d’installer GDAL comme c’est expliquĂ© dans la doc suivante : https://techilearned.com/configure-geodjango-in-scalingo/ cf. https://doc.scalingo.com/platform/app/app-with-gdal

le code est déployé en preprod lors de la mise à jour de la branche main

et en production quand il est tagué avec en respectant le format de version semantique vX.Y.Z

DĂ©ploiement du code de l’interface¶

le code de l’interface est dĂ©ployĂ© sur le repo git de scalingo Ă  conditions que les tests soit passĂ©s avec succĂšs via Github

Déploiement sur CleverCloud¶

Deploiment sur Scaleway¶

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