Skip to content

Commit

Permalink
Added db seed service to import data inside db with docker-compose lo…
Browse files Browse the repository at this point in the history
…cal deployment
  • Loading branch information
antoineludeau committed Jul 11, 2023
1 parent 43abf67 commit 632edc2
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 52 deletions.
4 changes: 2 additions & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ reports
.editorconfig

#Docker config
Dockerfile*
docker-compose.yml
.dockerignore

#Other
nodemon.json
*.md
LICENSE
LICENSE
2 changes: 2 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,5 @@ JOB_STATUS_LIMIT_DURATION='90d' # Duration max of job status in database
MAX_CONCURRENT_WORKERS=1
DATAGOUV_API_KEY=
PROXY_URL= # To use only if you are behind a proxy
ACTIVATE_DB_SEED= # To activate the seed of the database (only used with docker deployment)
OVERRIDE_DATA_ON_IMPORT= # To override data on import (only used with docker deployment)
116 changes: 73 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,72 +1,102 @@
# Plateforme Base Adresse Nationale
# Plateforme de la Base Adresse Nationale

Ce dépôt regroupe l'essentiel des briques faisant partie de la plateforme Base Adresse Nationale, à savoir :
## Architecture

- les routines d'import ;
- les routines de consolidation ;
- les routines de production des fichiers ;
- un service "worker" réagissant en temps réel à toute modification.
La BAN Plateforme contient :
- Une API synchrone et asynchrone : serveur Express (point d'entrée : server.js).
L'API asynchrone envoit des tâches dans la queue du redis, pris en charge par le worker.
- Un worker (point d'entrée : worker.js) qui récupère les tâches du redis (qui ont été déposées soit par l'API, soit par les scripts).
- Des scripts (imports, consolidation, exports, ...).

## Installer un environnement de développement
La BAN Plateforme import et export des données d'une base MongoDB.

### Pré-requis

- Node.js 16 ou supérieur
- MongoDB 4 ou supérieur
- Redis
- yarn ou npm
## Installation

### Configuration
Pour mettre en place un environnement fonctionnel, vous pouvez partir du fichier .env.sample et le copier en le renommant .env.

Pour mettre en place un environnement fonctionnel, vous pouvez partir du fichier `.env.sample` et le copier en le renommant `.env`.
### Deploiement local avec Docker

Compte-tenu de la puissance de calcul nécessaire pour effectuer les traitements sur France entière il est conseillé de restreindre à un seul département pour les développements. Par exemple `DEPARTEMENTS=57`.
#### Pré-requis
- Docker
- Docker-compose

### Installation des dépendances
#### Commandes
Pour déployer l'environnement, lancer la commande suivante :

```bash
yarn
```sh
docker-compose up --build -d
```

### Préparation des contours administratifs
--build : permet de builder les images locales.
-d : permet de lancer les conteneurs en arrière plan.

```bash
yarn prepare-contours
```
Prepare les contours France entière sans prendre en compte le .env.
La commande précédente va déployer une architecture locale, interconnectée, avec :
- un conteneur "db" (image mongo:4.2.23)
- un conteneur "redis" (image redis:4.0.9)
- un conteneur "api" (à partir de l'image définie dans le fichier docker-resources/api/Dockerfile.dev) => Au lancement de ce conteneur, un script d'initialisation (défini dans le fichier docker-resources/api/start.sh) va permettre le téléchargement des données requises au démarrage de la plateforme.
- un conteneur "db_seed" (à partir de l'image définie dans le fichier docker-resources/db_seed/Dockerfile.dev) => Ce conteneur éphémère permet d'initialiser (de façon optionnelle) de la donnée dans le conteneur "db".

#### Initialisation de données dans la BDD (optionnel)

Pour initialiser des données dans la base MongoDB:
- remplir le dossier docker-resources/db_seed/data-to-init avec des fichiers .json (le nom des fichiers correspondront au nom des collections qui seront importées. Exemple: si le dossier contient le fichier 'communes.json', la donnée contenue dans ce fichier sera importée dans la collection "communes").
- activer la fonctionnalité d'import en passant la variable d'environnement ACTIVATE_DB_SEED à :

### Téléchargement des données nécessaires
```sh
ACTIVATE_DB_SEED = true
```
- les données seront soit ajoutées soit écrasées selon la valeur de la variable d'environnement

```bash
yarn download-datasets
```sh
OVERRIDE_DATA_ON_IMPORT = true ##true: données écrasées, false: données ajoutées
```
Télécharge fantoir.sqlite, gazetteer.sqlite, communes-locaux-adresses.json.

### Import des différentes sources
### Deploiement local sans Docker

```bash
yarn import:ign-api-gestion
yarn import:cadastre
yarn import:ftth
#### Pré-requis
- Node.js 16 ou supérieur
- MongoDB 4 ou supérieur
- Redis
- yarn ou npm

#### Commandes
Pour installer les dépendances, lancer la commande suivate :

```sh
yarn
```
Prend en compte le .env pour ne télécharger les données que sur le département concerné.

### Consolidation des adresses
Il faut ensuite télécharger les fichiers requis au démarrage de la plateforme avec les commandes suivantes :

```bash
yarn compose
```sh
yarn prepare-contours ## Prepare les contours administratifs de la France entière.
```

### Production des fichiers
```sh
yarn download-datasets ## Télécharge fantoir.sqlite, gazetteer.sqlite, communes-locaux-adresses.json.
```

```bash
yarn dist
Pour déployer l'api et le worker, lancer les deux commandes suivantes en parrallèle :

```sh
yarn dev
```

## Opérations d’exploitation
```sh
yarn worker:dev
```

### Appliquer la mise à jour de la liste des communes certifiées d'office
### Autres commandes

```bash
yarn apply-batch-certification
```sh
yarn compose ## Consolidation des adresses
```

```sh
yarn dist ## Production des fichiers d'export
```

```sh
yarn apply-batch-certification ## Appliquer la mise à jour de la liste des communes certifiées d'office
```
14 changes: 13 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,26 @@ services:
- "${MONGODB_PORT:-27017}:27017"
volumes:
- db:/data/db
db_seed:
# Version of mongoDB currently in production
build:
dockerfile: docker-resources/db_seed/Dockerfile.dev
depends_on:
- db
environment:
- MONGODB_DBNAME=${MONGODB_DBNAME}
- ACTIVATE_DB_SEED=${ACTIVATE_DB_SEED}
- OVERRIDE_DATA_ON_IMPORT=${OVERRIDE_DATA_ON_IMPORT}
ports:
- "27016:27017"
redis:
# Version of Redis currently in production
image: redis:4.0.9
ports:
- "${REDIS_PORT:-6379}:6379"
api:
build:
dockerfile: 'Dockerfile.dev'
dockerfile: docker-resources/api/Dockerfile.dev
depends_on:
- db
- redis
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile.dev → docker-resources/api/Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RUN npm install pm2 -g

# optimzing caching for yarn install
WORKDIR /app
COPY package.json yarn.lock .
COPY package.json yarn.lock ./
RUN yarn install

# creating /data and /dist folder to be able to map volumes
Expand All @@ -14,4 +14,4 @@ RUN mkdir data && mkdir dist
# copying the root folder into the workdir taking into account the .dockerignore file
COPY . .

CMD ["sh", "start.dev.sh"]
CMD ["sh", "docker-resources/api/start.dev.sh"]
File renamed without changes.
8 changes: 4 additions & 4 deletions start.dev.sh → docker-resources/api/start.dev.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ else
npm run download-datasets
fi

npm run import:ign-api-gestion
npm run import:cadastre
npm run import:ftth
# npm run import:ign-api-gestion
# npm run import:cadastre
# npm run import:ftth

# npm run apply-batch-certification
# npm run compose
# npm run dist

pm2-runtime process.dev.yml
pm2-runtime docker-resources/api/process.dev.yml
5 changes: 5 additions & 0 deletions docker-resources/db_seed/Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM mongo:4.2.23

COPY docker-resources/db_seed/data-to-init/ ./data-to-init
COPY docker-resources/db_seed/start.dev.sh ./start.dev.sh
CMD ["bash", "start.dev.sh"]
3 changes: 3 additions & 0 deletions docker-resources/db_seed/data-to-init/communes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[{
"codeCommune":"12345"
}]
19 changes: 19 additions & 0 deletions docker-resources/db_seed/start.dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## This script is used to import data into the database
## It looks into the data-to-init folder and import all the json files
## The name of the collection imported will be the name of the file without the extension

echo "ACTIVATE_DB_SEED : $ACTIVATE_DB_SEED"
echo "OVERRIDE_DATA_ON_IMPORT : $OVERRIDE_DATA_ON_IMPORT"

if [[ "$ACTIVATE_DB_SEED" = "true" ]]; then
for file in `ls data-to-init`; do
filename="${file%.*}"
echo "Importing $file data into $filename collection..."
if [[ "$OVERRIDE_DATA_ON_IMPORT" = "true" ]]; then
mongoimport --host db --db $MONGODB_DBNAME --collection $filename --type json --file /data-to-init/$file --jsonArray --drop
else
mongoimport --host db --db $MONGODB_DBNAME --collection $filename --type json --file /data-to-init/$file --jsonArray
fi

done
fi

0 comments on commit 632edc2

Please sign in to comment.