diff --git a/pica-db-backup/README.md b/pica-db-backup/README.md index 86790248b143906fb6270b7a56e063387344128d..4e7006a1f2a77d21472205317b45283286bd5225 100644 --- a/pica-db-backup/README.md +++ b/pica-db-backup/README.md @@ -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", diff --git a/pica-db-backup/backup_env_var.py b/pica-db-backup/backup_env_var.py index e96491cd8a0d90fe305d71d45f4e90f8b14bc2e9..475be9d21e95ddb70e0cccdf070b13b0ae4c3297 100755 --- a/pica-db-backup/backup_env_var.py +++ b/pica-db-backup/backup_env_var.py @@ -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") diff --git a/pica-db-backup/docker-compose.yml b/pica-db-backup/docker-compose.yml index c64e4214bcc9338e5253146900bd9f3bf20f69c4..844269bdff056d236f2aac0b2cd5025cb15a686f 100644 --- a/pica-db-backup/docker-compose.yml +++ b/pica-db-backup/docker-compose.yml @@ -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 diff --git a/pica-db-backup/secrets/db.secrets.example b/pica-db-backup/secrets/db.secrets.example new file mode 100644 index 0000000000000000000000000000000000000000..9863a0b598eb28494e2e8b6e7ef49b8b7c5c1ef8 --- /dev/null +++ b/pica-db-backup/secrets/db.secrets.example @@ -0,0 +1,3 @@ +HOSTNAME=pica02 +ETHERPAD_DB_USER=test +ETHERPAD_DB_PASSWORD=test