Skip to content

Commit

Permalink
Configure un export Metabase
Browse files Browse the repository at this point in the history
  • Loading branch information
florimondmanca committed Oct 14, 2024
1 parent b0a9185 commit bc5566a
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 13 deletions.
39 changes: 39 additions & 0 deletions .github/workflows/metabase_export.yml
Original file line number Diff line number Diff line change
@@ -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 }}
6 changes: 6 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
34 changes: 23 additions & 11 deletions docs/deployment/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down
4 changes: 2 additions & 2 deletions docs/tools/litteralis.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ 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 :
| Variable d'environnement | Configuration | Description |
|---|---|---|
| `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 |

Expand Down
27 changes: 27 additions & 0 deletions docs/tools/metabase.md
Original file line number Diff line number Diff line change
@@ -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 |
22 changes: 22 additions & 0 deletions tools/metabase-export.sh
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit bc5566a

Please sign in to comment.