Compare commits

...

7 Commits

7 changed files with 74 additions and 38 deletions

View File

@ -1,28 +1,37 @@
#
# Docker
#
#COMPOSE_FILE=docker-compose.yml:docker-compose.traefik.yml
COMPOSE_FILE=docker-compose.yml:docker-compose.local.yml
OPENDATA_NETWORK_NAME=opendata
# #
# PostgreSQL # PostgreSQL
# #
POSTGRES_CONTAINER_NAME=postgres POSTGRES_CONTAINER_NAME=postgres
POSTGRES_IMAGE=postgres:latest POSTGRES_IMAGE=postgres:16.1
POSTGRES_VOLUME_NAME=postgres POSTGRES_VOLUME_NAME=postgres
POSTGRES_USER=postgres POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres POSTGRES_PASSWORD=utiliser-la-commande-pour-generer-un-mot-de-passe # tr -cd '[:alnum:]' < /dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' ; echo
POSTGRES_DB=postgres POSTGRES_DB=postgres
DB_ANON_ROLE=anon DB_ANON_ROLE=anon
DB_SCHEMA=public DB_SCHEMA=public
PGADMIN_USER=postgres@postgres.org
PGADMIN_PASSWORD=postgres
# #
# PostgREST # PostgREST
# #
POSTGREST_URL=https://opendata.example.org/ POSTGREST_DOMAIN=localhost
POSTGREST_CONTAINER_NAME=postgrest POSTGREST_CONTAINER_NAME=postgrest
POSTGREST_IMAGE=postgrest/postgrest:v12.0.2 POSTGREST_IMAGE=postgrest/postgrest:v12.0.2
POSTGREST_URL=http://${POSTGREST_DOMAIN}:3000/
PGRST_DB_MAX_ROWS=100 PGRST_DB_MAX_ROWS=100
@ -30,6 +39,14 @@ PGRST_DB_MAX_ROWS=100
# Swagger UI # Swagger UI
# #
SWAGGER_URL=https://ui.opendata.example.org/ SWAGGER_DOMAIN=ui.opendata.example.org
SWAGGER_CONTAINER_NAME=swagger SWAGGER_CONTAINER_NAME=swagger
SWAGGER_IMAGE=swaggerapi/swagger-ui:v5.11.0 SWAGGER_IMAGE=swaggerapi/swagger-ui:v5.11.0
#
# Traefik
#
TRAEFIK_NETWORK_NAME=traefik
TRAEFIK_ROUTER_NAME=opendata
TRAEFIK_ENTRYPOINTS=websecure

View File

@ -2,14 +2,20 @@
Création d'une API unifié pour accéder à l'ensemble des données dont P4Pillon a besoin. Création d'une API unifié pour accéder à l'ensemble des données dont P4Pillon a besoin.
Le principe du projet est de pouvoir intérroger les données de l'open data depuis un réseau local et ainsi s'affranchir des pannes d'internet. Les données pourront être mise à jour régulièrement pour permettre d'avoir les dernières mise à jour. Le principe du projet est de pouvoir intérroger les données de l'open data depuis un réseau local et ainsi s'affranchir des pannes d'internet ou des APIs. Les données pourront être mise à jour régulièrement pour permettre d'avoir les dernières mise à jour.
## Liens
- [Source du projet](https://forge.p4pillon.org/P4Pillon/data)
- [Gestion des tâches](https://forge.p4pillon.org/P4Pillon/OpenDataAPI/projects/3)
- [API de P4Pillon](https://data.p4pillon.org)
- [Interface Swagger pour l'API](https://ui.data.p4pillon.org)
- [Support et questionnement](https://matrix.to/#/!UXjiUOiWQMEsMgMNMN:converser.eu)
## Données ## Données
Voici les données dont nous rappatrirons. ### ✅ FINESS
### FINESS
Informations sur les établissements sanitaires, sociaux, médico-sociaux, et de formation aux professions de ces secteurs. Informations sur les établissements sanitaires, sociaux, médico-sociaux, et de formation aux professions de ces secteurs.
@ -17,7 +23,7 @@ Liens :
- [Site web](https://finess.esante.gouv.fr/) - [Site web](https://finess.esante.gouv.fr/)
- [Page web sur l'Open Data du gouvernement](https://www.data.gouv.fr/fr/datasets/finess-extraction-du-fichier-des-etablissements/) - [Page web sur l'Open Data du gouvernement](https://www.data.gouv.fr/fr/datasets/finess-extraction-du-fichier-des-etablissements/)
### INPI ### INPI
L'Institut national de la propriété industrielle, abrégé par le sigle INPI, est un établissement public à caractère administratif, placé sous la tutelle du ministère français de l'Économie, de l'Industrie et du Numérique. L'Institut national de la propriété industrielle, abrégé par le sigle INPI, est un établissement public à caractère administratif, placé sous la tutelle du ministère français de l'Économie, de l'Industrie et du Numérique.
@ -35,7 +41,7 @@ Il y a 2 posibilités pour récupérer les données de l'ensemble des entreprise
- Orchestrateur : [Docker Compose](https://docs.docker.com/compose/) - Orchestrateur : [Docker Compose](https://docs.docker.com/compose/)
## Script ## Script
Un script permet d'initialiser le projet en téléchargeant les dépendences, les données de l'Open Data ainsi que de transformer ses données en fichiers CSV. Un script permet d'initialiser le projet en téléchargeant les dépendences, les données de l'Open Data ainsi que de transformer ses données en fichiers CSV.
@ -56,8 +62,8 @@ La configuration se fait à l'aide d'un fichier `.env`, vous devez modifier les
Voici quelques commandes possibles : Voici quelques commandes possibles :
```bash ```bash
docker compose up -d # Création des conteneurs docker compose --env-file .env up -d # Création des conteneurs
docker compose down -v # Suppresion des conteneurs ainsi que des données docker compose --env-file .env down -v # Suppresion des conteneurs ainsi que des données
``` ```
### PostgreSQL ### PostgreSQL
@ -66,5 +72,5 @@ La fonction `COPY` est utilisé dans les fichiers SQL du dossier `./initdb` perm
### PostgREST ### PostgREST
Pour la configuration : https://postgrest.org/en/latest/configuration.html#environment-variables - [Pour la configuration](https://postgrest.org/en/latest/configuration.html#environment-variables)
Pour requêter des données : https://postgrest.org/en/stable/references/api/tables_views.html#horizontal-filtering-rows - [Pour requêter des données](https://postgrest.org/en/stable/references/api/tables_views.html#horizontal-filtering-rows)

View File

@ -1,25 +1,25 @@
#!/bin/bash #!/bin/bash
# Commande de base avec Docker # Commande de base avec Docker
npm="docker run -it --rm --user $(id -u):$(id -g) -v $PWD:/home/node/app -w /home/node/app node:lts-alpine npm config set update-notifier false && npm" npm="docker run -it --rm --user $(id -u):$(id -g) -v $PWD:/home/node/app -w /home/node/app node:lts-alpine ash -c 'npm config set update-notifier false && npm"
ash="docker run -it --rm --user $(id -u):$(id -g) -v $PWD:/home/node/app -w /home/node/app apteno/alpine-jq ash" ash="docker run -it --rm --user $(id -u):$(id -g) -v $PWD:/home/node/app -w /home/node/app apteno/alpine-jq ash"
Suppression des fichiers # Suppression des fichiers
echo $'\n\n#\n# Suppression des fichiers 🧹\n#\n' echo $'\n\n#\n# Suppression des fichiers 🧹\n#\n'
eval $npm run clean eval $npm run clean\'
# Installation des dépendances # Installation des dépendances
echo $'\n\n#\n# Installation des dépendances ⬇️\n#\n' echo $'\n\n#\n# Installation des dépendances ⬇️\n#\n'
eval $npm install eval $npm install\'
# Téléchargement des données # Téléchargement des données
echo $'\n\n#\n# Téléchargement des données 💡\n#\n' echo $'\n\n#\n# Téléchargement des données 💡\n#\n'
eval $npm run download eval $npm run download\'
eval $ash ./scripts/download.sh eval $ash ./scripts/download.sh
# Transformation des données # Transformation des données
echo $'\n\n#\n# Transformation des données 🏗️\n#\n' echo $'\n\n#\n# Transformation des données 🏗️\n#\n'
eval $npm run transform eval $npm run transform\'
eval $ash ./scripts/transform.sh eval $ash ./scripts/transform.sh
echo $'\n\n#\n# Le projet est prêt à être lancé avec Docker 🚀\n#\n' echo $'\n\n#\n# Le projet est prêt à être lancé avec Docker 🚀\n#\n'

View File

@ -2,28 +2,16 @@
version: "3.8" version: "3.8"
networks:
front-end:
back-end:
driver: bridge
services: services:
postgres: postgres:
ports: ports:
- "5432:5432" - "5432:5432"
networks:
- back-end
postgrest: postgrest:
ports: ports:
- "3000:3000" - "3000:3000"
networks:
- back-end
swagger: swagger:
ports: ports:
- "8080:8080" - "8080:8080"
networks:
- front-end
- back-end

View File

@ -6,14 +6,26 @@ networks:
traefik: traefik:
name: ${TRAEFIK_NETWORK_NAME:-traefik} name: ${TRAEFIK_NETWORK_NAME:-traefik}
external: true external: true
opendata:
name: ${OPENDATA_NETWORK_NAME:-opendata}
services: services:
postgrest: postgrest:
networks: networks:
- traefik - traefik
labels:
- traefik.enable=true
- traefik.docker.network=${TRAEFIK_NETWORK_NAME:-traefik}
- traefik.http.routers.${TRAEFIK_ROUTER_NAME:-opendata}_postgrest.rule=Host(`${POSTGREST_DOMAIN:?err}`)
- traefik.http.routers.${TRAEFIK_ROUTER_NAME:-opendata}_postgrest.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.${TRAEFIK_ROUTER_NAME:-opendata}_postgrest.tls.certResolver=letsencrypt
swagger: swagger:
networks: networks:
- traefik - traefik
labels:
- traefik.enable=true
- traefik.docker.network=${TRAEFIK_NETWORK_NAME:-traefik}
- traefik.http.routers.${TRAEFIK_ROUTER_NAME:-opendata}_swagger.rule=Host(`${SWAGGER_DOMAIN:?err}`)
- traefik.http.routers.${TRAEFIK_ROUTER_NAME:-opendata}_swagger.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}
- traefik.http.routers.${TRAEFIK_ROUTER_NAME:-opendata}_swagger.tls.certResolver=letsencrypt
- traefik.http.services.${TRAEFIK_ROUTER_NAME:-opendata}_swagger.loadbalancer.server.port=8080

View File

@ -2,6 +2,10 @@
version: "3.8" version: "3.8"
networks:
opendata:
name: ${OPENDATA_NETWORK_NAME:-opendata}
volumes: volumes:
postgres: postgres:
name: ${POSTGRES_VOLUME_NAME:-postgres} name: ${POSTGRES_VOLUME_NAME:-postgres}
@ -23,6 +27,8 @@ services:
- "./initdb:/docker-entrypoint-initdb.d" - "./initdb:/docker-entrypoint-initdb.d"
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
networks:
- opendata
postgrest: postgrest:
container_name: ${POSTGREST_CONTAINER_NAME:-postgrest} container_name: ${POSTGREST_CONTAINER_NAME:-postgrest}
@ -38,6 +44,8 @@ services:
PGRST_DB_MAX_ROWS: ${PGRST_DB_MAX_ROWS:-100} PGRST_DB_MAX_ROWS: ${PGRST_DB_MAX_ROWS:-100}
depends_on: depends_on:
- postgres - postgres
networks:
- opendata
swagger: swagger:
container_name: ${SWAGGER_CONTAINER_NAME:-swagger} container_name: ${SWAGGER_CONTAINER_NAME:-swagger}
@ -45,3 +53,7 @@ services:
restart: always restart: always
environment: environment:
API_URL: ${POSTGREST_URL:-http://localhost:3000/} API_URL: ${POSTGREST_URL:-http://localhost:3000/}
depends_on:
- postgrest
networks:
- opendata

View File

@ -1,4 +1,5 @@
{ {
"name": "opendata",
"type": "module", "type": "module",
"scripts": { "scripts": {
"clean": "rm ./node_modules -rf && rm ./tmp -rf && rm ./initdb/*.csv -rf", "clean": "rm ./node_modules -rf && rm ./tmp -rf && rm ./initdb/*.csv -rf",