Initial commit: Complete workspace configuration

- MOper/ configurations
- home-assistant/ configurations
- scripts/ automation scripts
- unix/ system configurations
- docker/ Docker services (app, devtools, database, infra, maintenance, portainer, supervision, test)

Excludes: databases, logs, large files, Git submodules, secrets (via .gitignore)
This commit is contained in:
2026-01-02 16:09:32 +00:00
commit 07377e5237
6048 changed files with 1248288 additions and 0 deletions

0
scripts/.gitkeep Normal file
View File

View File

@@ -0,0 +1,87 @@
{
"CreatedByVersion": "2.1.0.5",
"Schedule": {
"ID": 2,
"Tags": [
"ID=2"
],
"Time": "2025-09-04T02:00:00Z",
"Repeat": "1D",
"LastRun": "0001-01-01T00:00:00Z",
"Rule": "AllowedWeekDays=Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday",
"AllowedDays": [
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
"Monday"
]
},
"Backup": {
"ID": "2",
"Name": "Dockers",
"Description": "",
"Tags": [],
"TargetURL": "file:///backups/docker/",
"DBPath": "/config/SLHCLSSLIX.sqlite",
"Sources": [
"/source/docker/"
],
"Settings": [
{
"Filter": "",
"Name": "encryption-module",
"Value": "aes",
"Argument": null
},
{
"Filter": "",
"Name": "compression-module",
"Value": "zip",
"Argument": null
},
{
"Filter": "",
"Name": "dblock-size",
"Value": "50mb",
"Argument": null
},
{
"Filter": "",
"Name": "passphrase",
"Value": "qTDKdabUESnxAg4XfU",
"Argument": null
},
{
"Filter": "",
"Name": "retention-policy",
"Value": "1W:1D,4W:1W,12M:1M",
"Argument": null
}
],
"Filters": [
{
"Order": 0,
"Include": false,
"Expression": "*logs*/"
},
{
"Order": 1,
"Include": false,
"Expression": "*.sqlite"
},
{
"Order": 1,
"Include": false,
"Expression": "*.sql"
}
],
"Metadata": {},
"IsTemporary": false
},
"DisplayNames": {
"/source/docker/": "docker"
}
}

View File

@@ -0,0 +1,94 @@
{
"CreatedByVersion": "2.1.0.5",
"Schedule": {
"ID": 1,
"Tags": [
"ID=1"
],
"Time": "2025-09-04T02:00:00Z",
"Repeat": "1D",
"LastRun": "0001-01-01T00:00:00Z",
"Rule": "AllowedWeekDays=Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday",
"AllowedDays": [
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
"Monday"
]
},
"Backup": {
"ID": "1",
"Name": "Scripts",
"Description": "",
"Tags": [],
"TargetURL": "file:///backups/scripts/",
"DBPath": "/config/SLHCLSSLIX.sqlite",
"Sources": [
"/source/scripts/"
],
"Settings": [
{
"Filter": "",
"Name": "encryption-module",
"Value": "aes",
"Argument": null
},
{
"Filter": "",
"Name": "compression-module",
"Value": "zip",
"Argument": null
},
{
"Filter": "",
"Name": "dblock-size",
"Value": "50mb",
"Argument": null
},
{
"Filter": "",
"Name": "passphrase",
"Value": "qTDKdabUESnxAg4XfU",
"Argument": null
},
{
"Filter": "",
"Name": "retention-policy",
"Value": "1W:1D,4W:1W,12M:1M",
"Argument": null
}
],
"Filters": [
{
"Order": 0,
"Include": false,
"Expression": "*logs*/"
}
],
"Metadata": {
"LastErrorDate": "20250903T191316Z",
"LastErrorMessage": "Found 3 files that are missing from the remote storage, please run repair",
"LastBackupDate": "20250903T190612Z",
"BackupListCount": "1",
"TotalQuotaSpace": "61075263488",
"FreeQuotaSpace": "34794639360",
"AssignedQuotaSpace": "-1",
"TargetFilesSize": "8039",
"TargetFilesCount": "3",
"TargetSizeString": "7.851 KB",
"SourceFilesSize": "4238",
"SourceFilesCount": "5",
"SourceSizeString": "4.139 KB",
"LastBackupStarted": "20250903T190746Z",
"LastBackupFinished": "20250903T190746Z",
"LastBackupDuration": "00:00:00.1009045"
},
"IsTemporary": false
},
"DisplayNames": {
"/source/scripts/": "scripts"
}
}

38
scripts/backup_mariadb.sh Normal file
View File

@@ -0,0 +1,38 @@
#!/bin/bash
# Répertoire des backups
BACKUP_DIR="/mnt/backup_syno/dumps/mariadb/$(date +%F)"
mkdir -p "$BACKUP_DIR"
# Paramètres de connexion (exposés par Docker)
MARIADB_HOST="127.0.0.1"
MARIADB_PORT="3306"
MARIADB_USER="root"
MARIADB_PASSWORD="&22dt4H4&owV8DPb"
# Vérifie si le client mysql est dispo
if ! command -v mysql &> /dev/null; then
echo "mysql non trouvé. Installation silencieuse du client MariaDB..."
sudo apt-get update -qq
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mariadb-client > /dev/null
fi
# Liste des bases (hors systèmes)
DATABASES=$(mysql -h $MARIADB_HOST -P $MARIADB_PORT -u$MARIADB_USER -p$MARIADB_PASSWORD \
-e "SHOW DATABASES;" 2>/dev/null | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
if [ -z "$DATABASES" ]; then
echo "Aucune base MariaDB trouvée ! Vérifie la connexion au conteneur."
exit 1
fi
echo "Bases MariaDB trouvées :"
echo "$DATABASES"
# Dump de chaque base
for DB in $DATABASES; do
echo "Dump de la base $DB..."
mysqldump -h $MARIADB_HOST -P $MARIADB_PORT -u$MARIADB_USER -p$MARIADB_PASSWORD $DB \
| gzip > "$BACKUP_DIR/${DB}_$(date +%F).sql.gz"
done
echo "Backup MariaDB terminé dans $BACKUP_DIR"

View File

@@ -0,0 +1,24 @@
#!/bin/bash
# Répertoire des backups
BACKUP_DIR="/mnt/backup_syno/dumps/postgres/$(date +%F)"
mkdir -p "$BACKUP_DIR"
# ---- Paramètres PostgreSQL ----
POSTGRES_CONTAINER="postgres"
POSTGRES_USER="postgres_user"
POSTGRES_PASSWORD="3rL2&dyZMd7%BY"
export PGPASSWORD=$POSTGRES_PASSWORD
# Liste les bases (en se connectant à 'postgres')
DATABASES=$(docker exec -e PGPASSWORD=$POSTGRES_PASSWORD $POSTGRES_CONTAINER \
psql -U $POSTGRES_USER -d postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;")
for DB in $DATABASES; do
DB=$(echo $DB | xargs) # supprime espaces éventuels
echo "Dump PostgreSQL: $DB"
docker exec -e PGPASSWORD=$POSTGRES_PASSWORD $POSTGRES_CONTAINER \
pg_dump -U $POSTGRES_USER -d $DB | gzip > "$BACKUP_DIR/${DB}_postgres_$(date +%F).sql.gz"
done
unset PGPASSWORD

15
scripts/cleanup.sh Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
set -e
# Dossier contenant les sauvegardes
BACKUP_DIR="/opt/backup/logs"
# Nombre de jours à conserver
RETENTION_DAYS=7
echo "🔄 Nettoyage des sauvegardes de plus de $RETENTION_DAYS jours dans $BACKUP_DIR"
# Supprime les fichiers plus anciens que RETENTION_DAYS
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -name "*.sql.gz" -exec rm -v {} \;
echo "✅ Rotation terminée"

15
scripts/fix_mariadb.sh Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
set -e
CONTAINER="mariadb" # nom du conteneur
DATA_DIR="/srv/docker/database/data/mariadb" # volume host où tc.log est stocké
if docker logs "$CONTAINER" 2>&1 | grep -q "Bad magic header in tc log"; then
echo "⚠️ Problème détecté → suppression de tc.log"
docker stop "$CONTAINER"
rm -f "$DATA_DIR/tc.log"
docker start "$CONTAINER"
echo "✅ Correction appliquée"
else
echo "✅ Rien à corriger"
fi