Skip to content
Snippets Groups Projects
Verified Commit 21ceddeb authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

Add secrets management

parent 61a1d980
No related branches found
No related tags found
1 merge request!46Improve db-backup image
Pipeline #52622 canceled
......@@ -6,10 +6,29 @@ Il est capable de gérer les bases de données `postgres`, `mysql` ou `mongo` po
Il est flexible et se configure via des fichiers JSON.
<!-- TOC depthFrom:2 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 -->
- [Lancement](#lancement)
- [Configuration](#configuration)
- [Structure](#structure)
- [Gestion des secrets](#gestion-des-secrets)
- [Exemple](#exemple)
<!-- /TOC -->
## Lancement
On se synchronise simplement avec le dépôt et on lance le Docker Compose.
Docker Compose sélectionne automatiquement le bon fichier de configuration en fonction du nom d'hôte de la machine virtuelle, il n'y a donc rien à modifier.
On copie `secrets/db.secrets.example` dans `secrets/db.secrets` :
* On assigne le nom de la VM à `HOSTNAME` (*e.g.* `pica02`),
* On renseigne les secrets (voir [plus bas]((#gestion-des-secrets)))
Docker Compose sélectionne automatiquement le bon fichier de configuration en fonction du nom d'hôte de la machine virtuelle, il n'y a donc rien à modifier :
```
$ docker-compose up -d
```
## Configuration
......@@ -26,6 +45,8 @@ On veillera à ce que les noms d'hôte correspondent bien aux noms des conteneur
- "Host" : Indique l'hôte de la base de données
- "Port" : Indique le port pour se connecter au service
- "Database" : Indique le nom de la base de données
- "User" : Nom d'utilisateur ou nom d'une variable d'environnement (optionnel)
- "Password" : Mot de passe ou nom d'une variable d'environnement (optionnel)
- "Folder" : Indique le nom du dossier de backup utilisé par le script de backup et de rotation
- "Cron" : Indique la fréquence de temps à laquelle les backups sont effectués par le script de rotation au format cron
- "Init-Backup" : Indique si un backup doit être effectué au démarrage du service, en plus de la programmation du cron
......@@ -35,6 +56,15 @@ On veillera à ce que les noms d'hôte correspondent bien aux noms des conteneur
- "Week" : nombre de backups hebdomadaires à conserver
- "Month": nombre de backups mensuels à conserver
### Gestion des secrets
Afin de pouvoir versionner les fichiers de configuration sans exposer les identifiants aux bases de données, on utilise le système suivant :
* Dans le JSON, on utilise un nom de variable d'environnement à la place de l'identifant, **sans le $**, *e.g.* `ETHERPAD_DB_USER`.
* Dans le fichier `db.secrets`, on renseigne la valeur de cette variable d'environnement.
La substitution est effectué automatiquement par l'outil.
### Exemple
```json
......@@ -60,8 +90,8 @@ On veillera à ce que les noms d'hôte correspondent bien aux noms des conteneur
{
"Host": "etherpad-db",
"Port": "3306",
"User": "root",
"Password": "lolilolilol",
"User": "ETHERPAD_DB_USER",
"Password": "ETHERPAD_DB_PASSWORD",
"Database": "--all-databases",
"Type": "mysql",
"Folder": "etherpad",
......
......@@ -37,6 +37,7 @@ if not(os.path.isfile(PATH_TO_CONFIG)):
# Variables initialization
open_config_file = open(PATH_TO_CONFIG)
services_list = json.load(open_config_file)
services_list = {k: os.environ.get(k, v) for k, v in olddata.items()}
flag_mongo = False
flag_mysql = False
flag_postgres = False
......@@ -44,7 +45,7 @@ flag_postgres = False
for service in services_list:
if services_list[service]["Type"] == "mongo":
# Mongo DB handling
# Mongo DB handling
add_value_to_key(service,"MONGO_SERVICE_NAME_LIST")
add_value_to_key(services_list[service]["Host"],"MONGO_HOST_LIST")
add_value_to_key(services_list[service]["Port"],"MONGO_PORT_LIST")
......@@ -62,8 +63,12 @@ for service in services_list:
add_value_to_key(service,"MYSQL_SERVICE_NAME_LIST")
add_value_to_key(services_list[service]["Host"],"MYSQL_HOST_LIST")
add_value_to_key(services_list[service]["Port"],"MYSQL_PORT_LIST")
add_value_to_key(services_list[service]["User"],"MYSQL_USER_LIST")
add_value_to_key(services_list[service]["Password"],"MYSQL_PASS_LIST")
user = services_list[service]["User"]
user = os.environ[user] if user in os.environ
add_value_to_key(user,"MYSQL_USER_LIST")
password = services_list[service]["Password"]
password = os.environ[password] if password in os.environ
add_value_to_key(password,"MYSQL_PASS_LIST")
add_value_to_key(services_list[service]["Database"],"MYSQL_DB_LIST")
add_value_to_key(services_list[service]["Init-Backup"],"MYSQL_INIT_BACKUP_LIST")
add_value_to_key(services_list[service]["Cron"],"MYSQL_CRON_TIME_LIST")
......@@ -79,8 +84,12 @@ for service in services_list:
add_value_to_key(service,"POSTGRES_SERVICE_NAME_LIST")
add_value_to_key(services_list[service]["Host"],"POSTGRES_HOST_LIST")
add_value_to_key(services_list[service]["Port"],"POSTGRES_PORT_LIST")
add_value_to_key(services_list[service]["User"],"POSTGRES_USER_LIST")
add_value_to_key(services_list[service]["Password"],"POSTGRES_PASS_LIST")
user = services_list[service]["User"]
user = os.environ[user] if user in os.environ
add_value_to_key(user,"POSTGRES_USER_LIST")
password = services_list[service]["Password"]
password = os.environ[password] if password in os.environ
add_value_to_key(password,"POSTGRES_PASS_LIST")
add_value_to_key(services_list[service]["Database"],"POSTGRES_DB_LIST")
add_value_to_key(services_list[service]["Init-Backup"],"POSTGRES_INIT_BACKUP_LIST")
add_value_to_key(services_list[service]["Cron"],"POSTGRES_CRON_TIME_LIST")
......
......@@ -13,6 +13,8 @@ services:
- /DATA/BACKUP/:/backup/
- ./config/${HOSTNAME}.json:/config/backup_data.json
- /etc/localtime:/etc/localtime:ro
env_file:
- ./secrets/db.secrets
networks:
- docker_default
restart: always
HOSTNAME=pica02
ETHERPAD_DB_USER=test
ETHERPAD_DB_PASSWORD=test
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment