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
#
POSTGRES_CONTAINER_NAME=postgres
POSTGRES_IMAGE=postgres:latest
POSTGRES_IMAGE=postgres:16.1
POSTGRES_VOLUME_NAME=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
DB_ANON_ROLE=anon
DB_SCHEMA=public
PGADMIN_USER=postgres@postgres.org
PGADMIN_PASSWORD=postgres
#
# PostgREST
#
POSTGREST_URL=https://opendata.example.org/
POSTGREST_DOMAIN=localhost
POSTGREST_CONTAINER_NAME=postgrest
POSTGREST_IMAGE=postgrest/postgrest:v12.0.2
POSTGREST_URL=http://${POSTGREST_DOMAIN}:3000/
PGRST_DB_MAX_ROWS=100
@ -30,6 +39,14 @@ PGRST_DB_MAX_ROWS=100
# Swagger UI
#
SWAGGER_URL=https://ui.opendata.example.org/
SWAGGER_DOMAIN=ui.opendata.example.org
SWAGGER_CONTAINER_NAME=swagger
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.
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
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.
@ -17,7 +23,7 @@ Liens :
- [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/)
### 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.
@ -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/)
## 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.
@ -56,8 +62,8 @@ La configuration se fait à l'aide d'un fichier `.env`, vous devez modifier les
Voici quelques commandes possibles :
```bash
docker compose up -d # Création des conteneurs
docker compose down -v # Suppresion des conteneurs ainsi que des données
docker compose --env-file .env up -d # Création des conteneurs
docker compose --env-file .env down -v # Suppresion des conteneurs ainsi que des données
```
### PostgreSQL
@ -66,5 +72,5 @@ La fonction `COPY` est utilisé dans les fichiers SQL du dossier `./initdb` perm
### PostgREST
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 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)

View File

@ -1,25 +1,25 @@
#!/bin/bash
# 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"
Suppression des fichiers
# Suppression des fichiers
echo $'\n\n#\n# Suppression des fichiers 🧹\n#\n'
eval $npm run clean
eval $npm run clean\'
# Installation des dépendances
echo $'\n\n#\n# Installation des dépendances ⬇️\n#\n'
eval $npm install
eval $npm install\'
# Téléchargement des données
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
# Transformation des données
echo $'\n\n#\n# Transformation des données 🏗️\n#\n'
eval $npm run transform
eval $npm run transform\'
eval $ash ./scripts/transform.sh
echo $'\n\n#\n# Le projet est prêt à être lancé avec Docker 🚀\n#\n'

View File

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

View File

@ -6,14 +6,26 @@ networks:
traefik:
name: ${TRAEFIK_NETWORK_NAME:-traefik}
external: true
opendata:
name: ${OPENDATA_NETWORK_NAME:-opendata}
services:
postgrest:
networks:
- 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:
networks:
- 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"
networks:
opendata:
name: ${OPENDATA_NETWORK_NAME:-opendata}
volumes:
postgres:
name: ${POSTGRES_VOLUME_NAME:-postgres}
@ -23,6 +27,8 @@ services:
- "./initdb:/docker-entrypoint-initdb.d"
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- opendata
postgrest:
container_name: ${POSTGREST_CONTAINER_NAME:-postgrest}
@ -38,6 +44,8 @@ services:
PGRST_DB_MAX_ROWS: ${PGRST_DB_MAX_ROWS:-100}
depends_on:
- postgres
networks:
- opendata
swagger:
container_name: ${SWAGGER_CONTAINER_NAME:-swagger}
@ -45,3 +53,7 @@ services:
restart: always
environment:
API_URL: ${POSTGREST_URL:-http://localhost:3000/}
depends_on:
- postgrest
networks:
- opendata

View File

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