From bc5566abcdb89d3c2805fe5f2ff2ef5e037665b6 Mon Sep 17 00:00:00 2001 From: florimondmanca Date: Mon, 7 Oct 2024 11:34:25 +0200 Subject: [PATCH] Configure un export Metabase --- .github/workflows/metabase_export.yml | 39 +++++++++++++++++++++++++++ Makefile | 6 +++++ docs/deployment/README.md | 34 +++++++++++++++-------- docs/tools/litteralis.md | 4 +-- docs/tools/metabase.md | 27 +++++++++++++++++++ tools/metabase-export.sh | 22 +++++++++++++++ 6 files changed, 119 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/metabase_export.yml create mode 100644 docs/tools/metabase.md create mode 100755 tools/metabase-export.sh diff --git a/.github/workflows/metabase_export.yml b/.github/workflows/metabase_export.yml new file mode 100644 index 000000000..9c4638d53 --- /dev/null +++ b/.github/workflows/metabase_export.yml @@ -0,0 +1,39 @@ +name: Metabase Export + +on: + workflow_dispatch: + push: + branches: ## TODO retirer avant de merger + - feat/metabase-user + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + + - name: Install Scalingo CLI + run: curl -O https://cli-dl.scalingo.com/install && bash install + + - name: Install SSH key + # Credit: https://stackoverflow.com/a/69234389 + run: | + mkdir -p ~/.ssh + install -m 600 -D /dev/null ~/.ssh/id_rsa + echo "${{ secrets.GH_SCALINGO_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + + - name: Add Scalingo as a known host + run: | + ssh-keyscan -H ssh.osc-fr1.scalingo.com >> ~/.ssh/known_hosts + + - name: Init environment variables + run: | + echo "SRC_DATABASE_URL=${{ secrets.METABASE_EXPORT_SRC_DATABASE_URL }}" >> .env.metabase + echo "DEST_METABASE_DATABASE_URL=${{ secrets.METABASE_EXPORT_DEST_METABASE_DATABASE_URL }}" >> .env.metabase + + - name: Run export + run: make ci_metabase_export + env: + METABASE_SRC_APP: ${{ vars.METABASE_EXPORT_SRC_APP }} + METABASE_DEST_APP: ${{ vars.METABASE_EXPORT_DEST_APP }} diff --git a/Makefile b/Makefile index 059d2da10..49d2fdbd6 100644 --- a/Makefile +++ b/Makefile @@ -261,6 +261,12 @@ ci_bdtopo_migrate: ## Run CI steps for BD TOPO Migrate workflow make composer CMD="install -n --prefer-dist" make bdtopo_migrate +ci_metabase_export: ## Export data to Metabase + scalingo login --ssh --ssh-identity ~/.ssh/id_rsa + ./tools/scalingodbtunnel ${METABASE_SRC_APP} --host-url --port 10000 & ./tools/wait-for-it.sh 127.0.0.1:10000 + ./tools/scalingodbtunnel ${METABASE_DEST_APP} --host-url --port 10001 & ./tools/wait-for-it.sh 127.0.0.1:10001 + ./tools/metabase-export.sh + ## ## ---------------- ## Prod diff --git a/docs/deployment/README.md b/docs/deployment/README.md index cd3e9e91c..ab3d5f814 100644 --- a/docs/deployment/README.md +++ b/docs/deployment/README.md @@ -53,22 +53,32 @@ L'infrastructure d'un environnement est déployée et gérée par Scalingo et s' * Le serveur PHP communique avec la base de données Redis, notamment pour le stockage des sessions utilisateurs. * Le serveur PHP communique avec des services tiers : * API Adresse : géocodage d'adresses. - * Sentry : collecte et analyse des erreurs applicatives. - * Matomo : collecte et analyse de données de trafic utilisateur. + * [BD TOPO](../tools/bdtopo.md) : données géographiques (hébergées sur l'app `dialog-bdtopo`). + * [Sentry](../tools/monitoring.md) : collecte et analyse des erreurs applicatives. + * [Matomo](../tools/analytics.md) : collecte et analyse de données de trafic utilisateur. + * [Metabase](../tools/metabase.md) : statistiques et suivi d'indicateurs (hébergé sur l'app `dialog-metabase`). Diagramme : ``` - Scalingo - ┌---------------------------------┐ ┌ - - - - - - ┐ -WWW ------ nginx (:443) --- php --------┬---- API Adresse + dialog-bdtopo + ┌ - - - - ┐ + ┌---- BD TOPO + | └ - - - - ┘ + dialog | + ┌-------------------------------|-┐ ┌ - - - - - - ┐ +WWW ------ nginx (:443) --- php --------┼---- API Adresse | | | | └ - - - - - - ┘ | ┌----┴----┐ | | ┌ - - - -┐ | ┌ - ┴ - ┐ ┌ - ┴ - ┐ ├---- Sentry | PgSQL Redis | | └ - - - -┘ - | └ - - - ┘ └ - - - ┘ | | ┌ - - - -┐ - | └---- Matomo - └---------------------------------┘ └ - - - -┘ + | └ - ┬ - ┘ └ - - - ┘ | | ┌ - - - -┐ + | | └---- Matomo + └---------------|-----------------┘ └ - - - -┘ + | dialog-metabase + | ┌ - - - - -┐ + └-- Metabase + └ - - - - -┘ ``` ### Ressources @@ -77,12 +87,14 @@ Voici, à date, une liste des ressources utilisées dans un environnement. | Ressource | Localisation | Contact | |-----------|------|---------| -| Application Scalingo | Scalingo BetaGouv | tristan.robert[ @ ]beta.gouv.fr | -| Base de données PostgreSQL | Scalingo BetaGouv (add-on) | tristan.robert[ @ ]beta.gouv.fr | -| Serveur Redis | Scalingo BetaGouv (add-on) | tristan.robert[ @ ]beta.gouv.fr | +| Application Scalingo | Scalingo BetaGouv (`dialog`) | tristan.robert[ @ ]beta.gouv.fr | +| Base de données PostgreSQL | Scalingo BetaGouv (`dialog`, add-on) | tristan.robert[ @ ]beta.gouv.fr | +| Serveur Redis | Scalingo BetaGouv (`dialog`, add-on) | tristan.robert[ @ ]beta.gouv.fr | | Enregistrement DNS | Zone DNS de BetaGouv | tristan.robert[ @ ]beta.gouv.fr | +| BD TOPO | Scalingo BetaGouv (`dialog-bdtopo`) | tristan.robert[ @ ]beta.gouv.fr | Projet Sentry | [Sentry de BetaGouv](https://sentry.incubateur.net) | tristan.robert[ @ ]beta.gouv.fr | | Site Matomo | [Matomo BetaGouv](https://stats.beta.gouv.fr) | ~incubateur-ops | +| Metabase et son PostgreSQL | Scalingo BetaGouv (`dialog-metabase`) | tristan.robert[ @ ]beta.gouv.fr | ### Configuration diff --git a/docs/tools/litteralis.md b/docs/tools/litteralis.md index 5451d32db..53aeef2ac 100644 --- a/docs/tools/litteralis.md +++ b/docs/tools/litteralis.md @@ -46,7 +46,7 @@ L'intégration peut être exécutée à l'aide de commandes Symfony spécifiques Les données la MEL sont automatiquement intégrées en production tous les lundis à 16h00. -Cette automatisation est réalisée au moyen de [GitHub Actions](./github_actions.md) via le workflow [`litteralis_mel_import.yml`](../../workflows/litteralis_mel_import.yml). +Cette automatisation est réalisée au moyen de [GitHub Actions](./github_actions.md) via le workflow [`litteralis_mel_import.yml`](../../.github/workflows/litteralis_mel_import.yml). La configuration passe par diverses variables d'environnement listées ci-dessous : @@ -54,7 +54,7 @@ La configuration passe par diverses variables d'environnement listées ci-dessou |---|---|---| | `APP_MEL_IMPORT_APP` | [Variable](https://docs.github.com/fr/actions/learn-github-actions/variables) au sens GitHub Actions | L'application Scalingo cible (par exemple `dialog` pour la production) | | `APP_MEL_LITTERALIS_CREDENTIALS` | [Secret](https://docs.github.com/fr/actions/security-guides/using-secrets-in-github-actions) au sens GitHub Actions | Les identifiants d'accès à l'API Litteralis de la MEL | -| `APP_MEL_IMPORT_DATABASE_URL` | Secret | L'URL d'accès à la base de données par la CI (`./tools/scalingodbtunnel APP --host-url`| +| `APP_MEL_IMPORT_DATABASE_URL` | Secret | L'URL d'accès à la base de données par la CI (`./tools/scalingodbtunnel APP --host-url`) | | `APP_MEL_ORG_ID` | Variable | Le UUID de l'organisation "Métropole Européenne de Lille" dans l'environnement défini par `APP_MEL_IMPORT_APP` | | `GH_SCALINGO_SSH_PRIVATE_KEY` | Secret | Clé SSH privée permettant l'accès à Scalingo par la CI | diff --git a/docs/tools/metabase.md b/docs/tools/metabase.md new file mode 100644 index 000000000..e512f9599 --- /dev/null +++ b/docs/tools/metabase.md @@ -0,0 +1,27 @@ +# Metabase + +Conformément aux usages de la communauté beta.gouv.fr, DiaLog utilise Metabase pour la collecte de statistiques relatives à son utilisation. + +L'instance Metabase est accessible ici : https://dialog-metabase.osc-fr1.scalingo.io/ + +Vous devez disposer d'un compte pour y accéder. Demandez pour cela à un membre de l'équipe. + +## Aperçu de l'installation + +Le Metabase de DiaLog est hébergé sur Scalingo sous l'application `dialog-metabase`. (Demandez à un membre de l'équipe de vous ajouter à cette application pour y avoir accès.) + +Conformément aux recommendations Beta, une base de données dédiée aux données Metabase a été créée afin de la séparer des données de production. Elle est hébergée sur l'application `dialog-metabase` via un add-on PostgreSQL, comme indiqué dans [cette doc](https://doc.incubateur.net/communaute/les-outils-de-la-communaute/autres-services/metabase/metabase#connecter-metabase-a-une-base-de-donnees-anonymisee). + +## Lancer l'export + +L'export Metabase peut être déclenché via [GitHub Actions](./github_actions.md) à l'aide du workflow [`metabase_export.yml`](../../.github/workflows/metabase_export.yml). + +La configuration passe par diverses variables d'environnement listées ci-dessous : + +| Variable d'environnement | Configuration | Description | +|---|---|---| +| `METABASE_EXPORT_SRC_APP` | [Variable](https://docs.github.com/fr/actions/learn-github-actions/variables) au sens GitHub Actions | `dialog` (pour la production) | +| `METABASE_EXPORT_DEST_APP` | [Variable](https://docs.github.com/fr/actions/learn-github-actions/variables) au sens GitHub Actions | `dialog-metabase` | +| `METABASE_EXPORT_SRC_DATABASE_URL` | [Secret](https://docs.github.com/fr/actions/security-guides/using-secrets-in-github-actions) au sens GitHub Actions | L'URL d'accès à la base de données applicative par la CI (`./tools/scalingodbtunnel dialog --host-url`) | +| `METABASE_EXPORT_DEST_METABASE_DATABASE_URL` | [Secret](https://docs.github.com/fr/actions/security-guides/using-secrets-in-github-actions) au sens GitHub Actions | L'URL d'accès à la base de données Metabase par la CI (`./tools/scalingodbtunnel dialog-metabase --host-url --port 10001`) | +| `GH_SCALINGO_SSH_PRIVATE_KEY` | Secret | Clé SSH privée permettant l'accès à Scalingo par la CI | diff --git a/tools/metabase-export.sh b/tools/metabase-export.sh new file mode 100755 index 000000000..8f23fe48d --- /dev/null +++ b/tools/metabase-export.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Inspiré de : https://doc.incubateur.net/communaute/les-outils-de-la-communaute/autres-services/metabase/metabase#connecter-metabase-a-une-base-de-donnees-anonymisee +set -euxo pipefail + +source .env.metabase ## Créé dans le workflow GitHub Actions + +# Création des tables (persistera dans la DB source jusqu'à prochaine exécution de ce script) + +psql $SRC_DATABASE_URL -c "DROP TABLE IF EXISTS analytics_user" +psql $SRC_DATABASE_URL -c " +CREATE TABLE analytics_user AS +SELECT + uuid_generate_v4() AS id, + u.registration_date +FROM \"user\" AS u" +psql $SRC_DATABASE_URL -c "ALTER TABLE analytics_user ADD PRIMARY KEY (id)" + +# Création des index + +# Copie vers la DB Metabase + +pg_dump $SRC_DATABASE_URL -O -x -t analytics_user -c | psql "$DEST_METABASE_DATABASE_URL"