|
| 1 | +# DevOps, déploiement, opérations |
| 2 | + |
| 3 | +## Déploiement de la plateforme Airflow hors CD |
| 4 | + |
| 5 | +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. |
| 6 | + |
| 7 | +### Procédure de déploiement |
| 8 | + |
| 9 | +#### Prérequis |
| 10 | + |
| 11 | +- configururer sa clé ssh dans l'interface de clevercloud (cf. doc clevercloud) |
| 12 | +- configurer un "remote repository" pour `airflow-webserver` pour ce repository et pour chaque environnemnt |
| 13 | +- configurer un "remote repository" pour `airflow-scheduler` pour ce repository et pour chaque environnemnt |
| 14 | +- pousser le code souhaité sur la branch master des 2 repository |
| 15 | + |
| 16 | +#### en PREPROD |
| 17 | + |
| 18 | +```sh |
| 19 | +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 |
| 20 | +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 |
| 21 | +git push preprod-airflow-scheduler mabranch:master |
| 22 | +git push preprod-airflow-webserver mabranch:master |
| 23 | +``` |
| 24 | + |
| 25 | +#### en PROD |
| 26 | + |
| 27 | +```sh |
| 28 | +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 |
| 29 | +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 |
| 30 | +git push prod-airflow-scheduler mabranch:master |
| 31 | +git push prod-airflow-webserver mabranch:master |
| 32 | +``` |
| 33 | + |
| 34 | +## Déploiement sur Scalingo |
| 35 | + |
| 36 | +Nous avons besoin d'installer GDAL comme c'est expliqué dans la doc suivante : [https://techilearned.com/configure-geodjango-in-scalingo/](https://techilearned.com/configure-geodjango-in-scalingo/) cf. [https://doc.scalingo.com/platform/app/app-with-gdal](https://doc.scalingo.com/platform/app/app-with-gdal) |
| 37 | + |
| 38 | +le code est déployé en preprod lors de la mise à jour de la branche main |
| 39 | + |
| 40 | +et en production quand il est tagué avec en respectant le format de version semantique vX.Y.Z |
| 41 | + |
| 42 | +### Déploiement du code de l'interface |
| 43 | + |
| 44 | +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 |
| 45 | + |
| 46 | +## Déploiement sur CleverCloud |
| 47 | + |
| 48 | +<!-- TODO data plateforme --> |
| 49 | + |
| 50 | +## Deploiment sur Scaleway |
| 51 | + |
| 52 | +<!-- TODO s3 et bientĂ´t plus ? --> |
| 53 | + |
| 54 | +## Accéder à un shell en production |
| 55 | + |
| 56 | +Pour executer une commande en production, il faut au préalable se connection au shell via le CLI Scalingo. |
| 57 | + |
| 58 | +- [Installer le CLI](https://doc.scalingo.com/platform/cli/start) |
| 59 | + |
| 60 | +Ensuite il est possible d'ouvrir un shell (ici bash) dans le worker Scalingo. |
| 61 | + |
| 62 | +```sh |
| 63 | +scalingo run --app quefairedemesobjets bash |
| 64 | +``` |
| 65 | + |
| 66 | +L'intégralité des commandes possibles n'est pas documentée ici, elle l'est dans la [documentation officielle de Django](https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-and-manage-py) |
| 67 | + |
| 68 | +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. |
| 69 | + |
| 70 | +## Rollback: Revenir à une version précédente de l'application déployée |
| 71 | + |
| 72 | +Dans le cas d'une catastrophe en production, il est parfois nécessaire de revenir à la version précédente. |
| 73 | +Suivez les étapes ci-dessous pour revenir à la version précédente |
| 74 | + |
| 75 | +### Rollback des interfaces |
| 76 | + |
| 77 | +#### Prérequis |
| 78 | + |
| 79 | +- Prévenir l'équipe du problème de prod et du rollback à venir sur Mattermost |
| 80 | +- Voir avec l'administrateur des données (Christian) si des modifications récentes sont à sauvegarder avant la restauration de la base de données |
| 81 | +- Tester la procédure de rollback ci-dessous en preprod avant de l'appliquer en production |
| 82 | + |
| 83 | +#### Rollback du code |
| 84 | + |
| 85 | +- Vérifier le tag de version précédente sur la [page des releases github](https://github.com/incubateur-ademe/quefairedemesobjets/releases) |
| 86 | +- Pousser le tag de la version précédente en production |
| 87 | + |
| 88 | +```sh |
| 89 | +git remote add prod-interface git@ssh.osc-fr1.scalingo.com:quefairedemesobjets.git |
| 90 | +git push -f prod-interface <TAG>:master |
| 91 | +``` |
| 92 | + |
| 93 | +#### Base de données |
| 94 | + |
| 95 | +Restaurer la base de données avec la sauvegarde souhaitée (géréralement, la sauvegarde juste avant l'incident) |
| 96 | + |
| 97 | +- Copier de la sauvegarde de la base de données localement à partir de l'[interface Scalingo](https://dashboard.scalingo.com/apps/osc-fr1/quefairedemesobjets/db/postgresql/backups/list) |
| 98 | +- Déclarer les variables d'environnements ci-dessous et éxécuter la commande de restauration |
| 99 | + |
| 100 | +```sh |
| 101 | +DUMP_FILE=20241216001128_quefairedem_5084.tar.gz |
| 102 | +DATABASE_URL=<Copie from scalingo env variable SCALINGO_POSTGRESQL_URL> |
| 103 | +for table in $(psql "${DATABASE_URL}" -t -c "SELECT \"tablename\" FROM pg_tables WHERE schemaname='public'"); do |
| 104 | + psql "${DATABASE_URL}" -c "DROP TABLE IF EXISTS \"${table}\" CASCADE;" |
| 105 | +done |
| 106 | +pg_restore -d "${DATABASE_URL}" --clean --no-acl --no-owner --no-privileges "${DUMP_FILE}" |
| 107 | +``` |
| 108 | + |
| 109 | +_TODO: refaire un script de restauration de la base de données plus simple à utiliser avec des input et tout et tout_ |
| 110 | + |
| 111 | +#### Vérifier que la restauration est effective |
| 112 | + |
| 113 | +Accéder à la carte et jouer avec : [La carte](https://lvao.ademe.fr/carte) |
| 114 | +Accéder au formulaire et joue avec : [Le formulaire](https://lvao.ademe.fr/formulaire) |
| 115 | +Accéder à l'administration Django et vérifier les données qui ont été restaurée : [Admin](https://lvao.ademe.fr/admin) |
0 commit comments