Skip to content

Commit 98ea06a

Browse files
📚 Réorganisation de la doc : réunoin de tutoriels et comment faire (#1785)
1 parent dfb3a1d commit 98ea06a

17 files changed

+266
-172
lines changed

‎docs/comment-faire/README.md‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
# 🤔 COMMENT FAIRE
22

3-
43
```{toctree}
54
:hidden:
65
76
troubleshooting.md
8-
data/deployment.md
7+
deployment.md
98
data/config-dev-env.md
109
django/commandes.md
1110
django/update-ext-id.md
12-
deployment/deployment.md
1311
development/development.md
1412
prod/commandes.md
1513
prod/rollback.md
916 KB
Loading

‎docs/comment-faire/data/config-dev-env.md‎

Lines changed: 0 additions & 22 deletions
This file was deleted.

‎docs/comment-faire/data/deployment.md‎

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
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)

‎docs/comment-faire/deployment/deployment.md‎

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Development
1+
# Développemnt local
22

33
## Environnement de développement
44

@@ -177,3 +177,25 @@ done
177177
pg_restore -d "${DATABASE_URL}" --clean --no-acl --no-owner --no-privileges "${DUMP_FILE}"
178178
```
179179

180+
## Configurer la plateforme DATA en environnement de développement
181+
182+
Copier les variable d'environnement dags/.env.template vers dags/.env
183+
184+
```sh
185+
cp dags/.env.template dags/.env
186+
```
187+
188+
Lancer les containers docker avec docker compose:
189+
190+
```sh
191+
docker compose --profile airflow up
192+
```
193+
194+
docker compose lancera :
195+
196+
- la base de données postgres nécessaire à la webapp de la carte
197+
- la base de données postgres nécessaire à Airflow
198+
- un webserver airflow
199+
- un scheduler airflow en mode LocalExecutor
200+
201+
accéder à l'interface d'Airflow en local [http://localhost:8080](http://localhost:8080) ; identifiant/mot de passe : airflow / airflow

‎docs/tutoriels/generer-des-fixtures.md‎ renamed to ‎docs/comment-faire/generer-des-fixtures.md‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Utiliser les fixtures
22

33
Le projet utilise des fixtures Django[^1] pour les tests.
4-
Celles-ci sont basées sur de la donnée issue de la base de production afin de tester l'application sur des situations _de la vraie vie_.
4+
Celles-ci sont basées sur de la donnée issue de la base de production afin de tester l'application sur des situations _de la vraie vie_.
55

66
## Générer des fixtures, cas général
77

@@ -22,17 +22,20 @@ Le volume de données de la table des Acteurs étant gigantesque, les fixtures d
2222

2323
Pour ce faire, sont listées dans le `Makefile` une liste de `pk` d'acteurs (champ `identifiant_unique`).
2424
Ces identifiants ont été récupérés à la main, depuis le frontend de la carte :
25+
2526
1. Faire une recherche pour la zone souhaitée
2627
2. Récupérer le lien de l'acteur dans la fiche détaillée (en cliquant sur le lien de partage par exemple) --> https://lvao.ademe.fr/adresse_details/3kQK86DEWA3ZrcirdzzBez l'id est 3kQK86DEWA3ZrcirdzzBez
2728
3. Chercher cet id dans l'admin Django : https://lvao.ademe.fr/admin/qfdmo/displayedacteur/?q=eYKxBYDMDoMXTr8iiw69Ek
2829
4. Récupérer le champ `identifiant_unique` : il peut être un uuid ou un assemblage de chaînes de caractères mentionnant la source, par exemple `ocad3e_SGS-02069`
2930
5. Ajouter cet identifiant dans le `Makefile` à la suite des autres, derrière le flag `--pk` dans la commande `generate-fixtures-acteurs`
3031

3132
6. Une fois cela fait, il faut récupérer les _primary key_ des propositions de service associées.
32-
Cela peut-ĂŞtre fait depuis le shell `django` :
33+
Cela peut-ĂŞtre fait depuis le shell `django` :
34+
3335
```sh
3436
make shell
3537
```
38+
3639
```py
3740
# 1. importer le modèle Django
3841
from qfdmo.models import DisplayedActeur
@@ -45,8 +48,10 @@ list(DisplayedActeur.objects.filter(pk__in=pks).values_list("proposition_service
4548

4649
# Sortie attendue: [2163243, 2163244, 2163245, 243160, 435885, 1699381, 738371, 738372, 719100]
4750
```
51+
4852
7. Cette liste de `pk` peut alors être collées dans le `Makefile`
4953
8. Les fixtures peuvent être re-générées
54+
5055
```sh
5156
make generate-fixtures-acteurs
5257

@@ -59,6 +64,7 @@ git commit -m "mise Ă  jour des fixtures"
5964
## Utiliser les fixtures
6065

6166
Les fixtures peuvent être utilisées de plusieurs manières :
67+
6268
- Dans les tests
6369
- En local
6470
- Dans la CI
@@ -72,6 +78,7 @@ make db-restore-for-tests
7278
```
7379

7480
Dans les tests, les fixtures peuvent être importées en utilisant la fonction `callcommand` de Django :
81+
7582
```py
7683
from django.core.management import call_command
7784
call_command('loaddata', 'synonymes', 'produits')
@@ -80,6 +87,4 @@ call_command('loaddata', 'synonymes', 'produits')
8087
Le nom des fixtures Ă  utiliser est celui du nom du fichier `.json` de la fixture.
8188
Django se charge de découvrir automatiquement la fixture correspondante.
8289

83-
84-
8590
[^1]: [https://docs.djangoproject.com/en/5.2/topics/db/fixtures/](https://docs.djangoproject.com/en/5.2/topics/db/fixtures/)
File renamed without changes.

‎docs/tutoriels/infrastructure/scaleway_create_db.md‎ renamed to ‎docs/comment-faire/infrastructure/scaleway_create_db.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ pg_restore -d 'postgres://<user>:<password>@<host>:<port>/<database>?sslmode=req
4949

5050
Pour chacune des instances de l'environnement, aller mettre à jour les variables d'environnement et redémarrer les instances:
5151

52-
* webapp quefairedemesobjets
53-
* airflow-webserver
54-
* airflow-scheduler
55-
* metabase
52+
- webapp quefairedemesobjets
53+
- airflow-webserver
54+
- airflow-scheduler
55+
- metabase
5656

5757
Tester et constater que la nouvelle base de données est utilsée

0 commit comments

Comments
 (0)