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 environnemntconfigurer un « remote repository » pour
airflow-scheduler
pour ce repository et pour chaque environnemntpousser 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