Création d'une base de données PostgreSQL pour une nouvelle application

Le besoin

On déploie une application sur l'infra Deuxfleurs, et cette application a besoin de stocker des données dans une base PostgreSQL.

On utilise pour cela le service PostgreSQL existant de Deuxfleurs, déployé en cluster avec Stolon.

Pour mettre en place l'accès nécessaire à cette nouvelle application, nous avons besoin de :

Ces trois éléments seront ensuite utilisés dans la configuration de l'application.

Comment ça marche

DATABASE_URL=postgres://monapplication:{{ key "secrets/monapplication/postgres_pwd" | trimSpace }}@{{ env "meta.site" }}.psql-proxy.service.prod.consul:5432/monapplication

Etapes de création de l'utilisateur et base de données

1. Création de l'utilisateur dans LDAP (méthode automatisée à privilégier)

Voir la page de secretmgr

Gros avantage : le script va également copier les secrets dans Consul, ce qui facilitera la configuration de l'application.

1.bis Création de l'utilisateur dans LDAP (méthode manuelle au cas où)

Si la méthode automatique ne convient pas, commencer par générer un mot de passe (sur votre laptop, ou depuis une machine Deuxfleurs, peu importe) :

  1. Générer un mot de passe aléatoire avec la commande openssl rand -base64 32
  2. Hasher ce mot de passe avec la commande slappasswd

Puis aller sur https://guichet.deuxfleurs.fr :

  1. Il est nécessaire d'être admin Guichet
  2. Trouver l'arbre LDAP des utilisateurs de service ou=services,ou=users,dc=deuxfleurs,dc=fr
  3. Créer un nouvel utilisateur dans cet arbre, par exemple monapplication (nom de l'application)
  4. Ajouter un champ userpassword avec le hash du mot de passe obtenu précédemment

2. Se connecter en admin au PostgreSQL de production

Installer le client postgresql (paquet postgresql-client sous Debian).

Se connecter en SSH sur une machine de prod en faisant un tunnel vers psql-proxy.service.prod.consul:5432 (c'est automatique avec [la configuration SSH recommandée] (https://git.deuxfleurs.fr/Deuxfleurs/nixcfg/src/branch/main/doc/onboarding.md))

On peut alors se connecter au serveur PostgreSQL de production :

psql -h localhost -U postgres -W postgres

TODO : demande un mot de passe, où est-il stocké ?

3. Créer l'utilisateur et la base de données dans PostgreSQL

Dans le client psql, lancer les commandes SQL suivantes. Il faut adapter le nom de l'application et le nom de la base de données.

CREATE USER monapplication;
CREATE DATABASE monapplication WITH OWNER monapplication ENCODING 'utf8' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE template0;