diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45ddf0a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +site/ diff --git a/docs/Ansible/2023-10-01-nextcloud-docker-update-from-ansible.md b/docs/Ansible/2023-10-01-nextcloud-docker-update-from-ansible.md new file mode 100644 index 0000000..86d2e92 --- /dev/null +++ b/docs/Ansible/2023-10-01-nextcloud-docker-update-from-ansible.md @@ -0,0 +1,75 @@ +--- +title: "Mise à jour de Nextcloud docker par Ansible" +summary: "brief decription to sum up" +author: + - JF +date: 2023-10-01 +--- +# Mise à jour de Nextcloud docker par Ansible + +## Prérequis +[Se connecter en SSH au Synology à l’aide d’une clef asymétrique.](../Synology/2019-09-01-access-synology-with-ssh-asymetrical-key.md) + +## Le playbook +```yaml +--- +- name: Mise à jour du conteneur Nextcloud + hosts: savaneprod.fr + vars: + nc_version: 27.1.3 + tasks: + - name: Modification de la versions dans le docker-compose + ansible.builtin.lineinfile: + path: /volume1/nextcloud/docker-compose.yaml + backrefs: true + backup: false + state: present + regexp: "^ image: nextcloud:" + line: " image: nextcloud:{{ nc_version }}" + + - name: "Téléchargement de l'image nextcloud: {{ nc_version }}" + community.docker.docker_image: + # Needed on DSM : pip3 install docker + name: nextcloud + source: pull + tag: '{{ nc_version }}' + + - name: Compose down & compose up detached + # Needed on DSM : pip3 install docker-compose + community.docker.docker_compose: + project_src: "/volume1/nextcloud" + recreate: smart + + - name: Pause de 30 secondes + ansible.builtin.pause: + seconds: 30 + + - name: Pause en attendant la remontée des conteneurs + ansible.builtin.pause: + minutes: 2 + + - name: "Mise à jour de la base de données" + community.docker.docker_container_exec: + container: nextcloud_app_1 + tty: true + user: www-data + command: "{{ item }}" + loop: + - "php occ db:add-missing-columns" + - "php occ db:add-missing-indices" + - "php occ db:add-missing-primary-keys" + + - name: Modification du fichier .htaccess pour Mac + tags: caldav + ansible.builtin.lineinfile: + path: /volume1/nextcloud/data/.htaccess + backup: false + state: present + search_string: "{{ item.search_string }}" + line: "{{ item.line }}" + loop: + - { search_string: 'RewriteRule ^\.well-known/carddav', line: ' RewriteRule ^\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]' } + - { search_string: 'RewriteRule ^\.well-known/caldav', line: ' RewriteRule ^\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]' } + +``` +=> Cette façon de faire renvoi un problème d'intégrité sur le fichier config.php. diff --git a/docs/Synology/2019-09-01-access-synology-with-ssh-asymetrical-key.md b/docs/Synology/2019-09-01-access-synology-with-ssh-asymetrical-key.md new file mode 100644 index 0000000..06a021d --- /dev/null +++ b/docs/Synology/2019-09-01-access-synology-with-ssh-asymetrical-key.md @@ -0,0 +1,83 @@ +--- +title: "Se connecter en SSH au Synology à l'aide d'une clef asymétrique." +summary: "brief decription to sum up" +author: + - JF +date: 2019-09-01 +--- +# Se connecter en SSH au Synology à l'aide d'une clef asymétrique. +## Génération de la clef SSH. +- On génère la clef : +```bash +ssh-keygen -o -b 521 -t ecdsa -C "mon login que je n'ai plus envie de saisir" +``` + - `-t ecdsa` pour l'agorithme de signature numérique basé sur une courbe elliptique (Elliptic Curve Digital Signature Algorithm) + - `-b 521` pour le nombre de bits. + - `-C "quelquechose"` pour savoir à quoi sert cette clef. Généralement on y met le nom d'utilisateur lié ou une adresse courriel. + +- Quand on exécute la commande : +```bash +# Generating public/private ecdsa key pair. +Enter file in which to save the key (/home/user/.ssh/id_ecdsa): /home/user/.ssh/syno_key +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +# Your identification has been saved in /home/user/.ssh/syno_key +# Your public key has been saved in /home/user/.ssh/syno_key.pub +# The key fingerprint is: +# SHA256:IjVg4Tu0/qiLP7MC3TBFluQeEo7jQSWrKu8HgpYLai4 mon login que je n'ai plus envie de saisir +# The key's randomart image is: +#+---[ECDSA 521]---+ +#| oo+Bo | +#|.oo*o. | +#|ooo.= o | +#|o.++ = . | +#|oo.+* . S | +#|*oo..o . | +#|B.... | +#|E=o .o | +#|==BB. . | +#+----[SHA256]-----+ +``` +Ce qu'il est bon de faire. C'est de tout de suite sauvegarder le couple de clef. La privée surtout. Avoir défini un mot de passe sur la clef permet d'augmenter son niveau de protection. Il faut se souvenir du mot de passe, bien entendu. + +## Transfert de la clef sur le Synology. +- Ça tombe bien. Il existe aussi une commande pour ça. +```bash +ssh-copy-id -i /home/user/.ssh/syno_key.pub mon-login@mon-syno +``` + - On copie bien la clef publique, hein ! La clef privée est, et doit, restée privée bien au chaud. + +- Particularité du Synology, il stocke la clef à un endroit pas commun : +```bash +/var/services/homes/mon-login/.ssh/authorized_keys +``` + +- Si on veut impressionner, il y a possiblité de transférer la clef de la manière suivante : +```bash +ssh mon-login@mon-syno "/bin/cat >> /var/services/homes/mon-login/.ssh/authorized_keys" < /home/user/.ssh/syno_key.pub +``` + +- Vérifier les droits des fichiers : + - `sudo -i` + - `chmod 711 /var/services/homes/mon-login` (755 à l'origine) + - `chmod 700 /var/services/homes/mon-login/.ssh` (700 à l'origine) + - `chmod 600 /var/services/homes/mon-login/.ssh/authorized_keys` (644 à l'origine) + +## Modification de la configuration de sshd +### Le serveur ssh. + +`vi /etc/ssh/sshd_config` +- Les trois lignes suivantes sont importantes : + +```bash +RSAAuthentication yes +PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys +``` + +### Redémarrage du service sshd depuis l'interface DSM. + ![Synology control pannel. Where to stop and start sshd service.](sshd_restart.png) + diff --git a/docs/Synology/2019-12-16-wildcard-lets-encrypt-certificate.md b/docs/Synology/2019-12-16-wildcard-lets-encrypt-certificate.md new file mode 100644 index 0000000..00b91ab --- /dev/null +++ b/docs/Synology/2019-12-16-wildcard-lets-encrypt-certificate.md @@ -0,0 +1,70 @@ +--- +title: "Générer et mettre à jour automatiquement un certificat \"wildcard\" let's encrypt." +summary: "brief decription to sum up" +author: + - JF +date: 2019-12-16 +--- +# Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt. + +## Installation de acme.sh +```bash +# 1 - Beeing root + +SYNOPATH="/volume1/something" +cd $SYNOPATH + +git clone https://github.com/acmesh-official/acme.sh.git + +./acme.sh/acme.sh --install --nocron --home $SYNOPATH/acme.sh/.acme.sh --accountemail "admin@savaneprod.fr" +``` + + +Sur DSM, les certificats se trouvent dans `/usr/syno/etc/certificate/_archive/`. + +## Mise à jour automatique du certificat + +### Chez Gandi + +Utilsation de l'API Gandi : [https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api](https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api) + +### Le script de mise à jour + +```bash +SYNOPATH="/volume1/something" + +jour=$(date +%Y-%m-%d) +file='$SYNOPATH/Certificats/'$jour'.log' + +HOME_orig=$HOME +HOME="$SYNOPATH/Certificats/.acme.sh" + +export GANDI_LIVEDNS_KEY="la clef récupérée chez Gandi" + +export SYNO_Certificate="savaneprod.fr cert" +export SYNO_Create=0 +export SYNO_Username="admin_c_pas_top" +export SYNO_Password="Un mdp de ouf" + +echo "*********************************************" 2>&1 | tee -a $file +echo " Mise à jour du certificat *.savaneprod.fr" 2>&1 | tee -a $file +echo "*********************************************" 2>&1 | tee -a $file + +bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME --renew -d savaneprod.fr -d '*.savaneprod.fr' --dns dns_gandi_livedns --force --log 2>&1 | tee -a $file +bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME -d savaneprod.fr -d "*.savaneprod.fr" --deploy --deploy-hook synology_dsm --log 2>&1 | tee -a $file + +echo "---------------------------------" 2>&1 | tee -a $file +echo " Fin du script de mise à jour." 2>&1 | tee -a $file +echo "*********************************" 2>&1 | tee -a $file +``` + +### La conf dans DSM dans le planificateur de tâches + +![Planificateur de tâche, onglet "General"](task_general-tab.png) + +J'ai finalement décidé de renouveler tous les mois parce que le Synology propose tous les 3 mois mais la durée de vie du certificat est légèrement inférieure. Et je n'ai pas cherché à configurer le renouvellement tous les deux mois. +![Planificateur de tâches, onglet "Schedule"](task_Schedule-tab.png) + +Exécution du script. Il faut bien entendu que le script ait la permission d'éxécution configurée. +![Planificateur de tâches, onglet "Task Settings"](task_setting-tab.png) + diff --git a/docs/Synology/2020-12-04-borg-backup.md b/docs/Synology/2020-12-04-borg-backup.md new file mode 100644 index 0000000..7e7ed85 --- /dev/null +++ b/docs/Synology/2020-12-04-borg-backup.md @@ -0,0 +1,101 @@ +--- +title: "Sauvegarde externalisée grâce à Borg Backup" +authors: + - JF +date: 2020-12-04 +--- +# La sauvegarde de savanecloud.fr +J'ai découvert "Borg" lors du stage concluant ma formation de reconversion professionnelle. L'outil est simple, efficace, disponible sur Synology DSM et il existe des fournisseurs de services spécialisés chez lesquels, on peut externaliser nos sauvegardes. +Mais me direz-vous pourquoi externaliser des sauvegardes ? Beh ouais, avec un NAS en RAID 1 j'ai peu de risque de perdre mes données. +Effectivement. Mais le risque existe. Matérialisé par un cambriolage ou une destruction malencontreuse dudit NAS. Bref. Un jour j'ai eu peur et j'ai pris au sérieux la sauvegarde en dehors du cadre professionnel. Et bien entendu, laisser faire le boulot par Google, Dropbox, feu Hubic ou Microsoft ne me plaisais pas beaucoup. + +* Borg backup : https://github.com/borgbackup/borg/ +* BorgBase : https://www.borgbase.com + +## Installation de Borg sur le Synology +### Le dépot de Synocommunity +Le paquet n'est pas disponible par défaut dans le dépôt ("repository", dire "ripo" pour les franglophones) de DSM. Pour l'obtenir, il faut ajouter un dépôt depuis les paramètres du gestionnaire de paquets de DSM. Le dépôt que j'utilise est celui de [SynoCommunity](https://synocommunity.com/). +![Ajout d'un dépôt dans le gestionnaire de paquets de DSM.](borg_synocommunity.png) +Ensuite il suffit de raffraîchir la liste des paquets disponibles et Borg Apparaît. Vous noterez en bas que Borg nécessite Python 3.11, cette dépendance est aussi à installer depuis le dépôt de SynoCommunity. +![Fiche descriptive du paquet Borg](borg_package.png) + +## Script de sauvegarde avec Borg + +```bash +#!/bin/bash +# borg init --encryption=keyfile-blake2 /volume1/Backup/borgrepolzma/ + +#Formatage et mise en page +stars='***************************************************************************' + +# Pour le calcul d'exécutoin du script +start_time=$(date +%s) + +log_file='/volume1/Backup/logs/'$(date +%Y-%m-%d--%Hh%M)'_borgbase.log' + +echo $(date +%d\ %b\ %Y\ %H:%M:%S) 2>&1 | tee -a $log_file + +# Définition des variables d'environnement pour simplifier les commandes +# export BORG_RSH= +# export BORG_REPO='borgserver:/borgrepo' +export BORG_REPO='borgserver:borgrepo' +export BORG_CACHE_DIR='' + +# Cron n'a pas de $HOME +export HOME=/root + +# Suite l'erreur "Attempting to access a previously unknown unencrypted repository!" +# Apparue le 28/05/2020 +export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes + +printf '\n%s\n%s\n%s\n' $stars "Début de la sauvegarde " $stars 2>&1 | tee -a $log_file + +# Préparation de la sauvegarde du nextcloud +docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --on 2>&1 | tee -a $log_file +sleep 1m 2>&1 | tee -a $log_file + +# Dump de la base de données Postgres +docker exec -i nextcloud_db_1 /usr/bin/pg_dump -U nextcloud nextcloud | gzip -9 > /volume1/nextcloud/db_dump.sql.gz 2>&1 | tee -a $log_file +# Restaurer la BDD +# docker exec nextcloud_db_1 pg_restore -U postgres -d nexcloud /backups/db_dump.sql + +/usr/local/bin/borg create \ +--one-file-system \ +--stats \ +--compression lz4 \ +::{now:%Y-%m-%d--%Hh%M} \ +/volume1/dir1 \ +/volume1/dir2 \ +/volume1/nextcloud \ +--exclude /volume1/nextcloud/db \ +2>&1 | tee -a $log_file +# ne pas sauvegarder les fichiers du conteneur postgres +#--exclude /volume1/nextcloud/db \ + +# Fin de la sauvegarde +docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --off 2>&1 | tee -a $log_file + +printf '\n%s\n%s\n%s\n' $stars "PRUNE" $stars 2>&1 | tee -a $log_file + +# Keep 31 end of day, 0 additional end of week archives, and 0 end of month archive +/usr/local/bin/borg prune -v --list --stats --keep-daily=31 --keep-weekly=0 --keep-monthly=0 2>&1 | tee -a $log_file +printf '\n%s\n' '--- Fin de la sauvegarde ---' 2>&1 | tee -a $log_file + +printf '\n%s\n%s\n%s\n' $stars "borg info" $stars >> $log_file +# Pour le mail envoyé en fin par le Task Scheduler Synology +/usr/local/bin/borg info borgserver:borgrepo >> $log_file + +printf '\n%s\n%s\n%s\n' $stars "...Suppression des logs de plus de 200 jours..." $stars 2>&1 | tee -a $log_file +find /volume1/Backup/logs -mtime +60 -exec rm -f {} \; 2>&1 | tee -a $log_file + +timestamp=$(date +%s) +TZ='Europe/Paris' printf '%s\nNous sommes le %(%d %b %Y)T et il est %(%H:%M:%S)T.\n%s\n' $stars $timestamp $timestamp $stars 2>&1 | tee -a $log_file + +# Calcul du temps d'exécution du script +end_time=$(date +%s) +exec_time=$(($end_time - $start_time)) +printf '\n%s\n' $stars +TZ='Europe/Paris' printf "L'exécution du script a duré %(%Hh%Mm%Ss)T\n" $exec_time 2>&1 | tee -a $log_file + +``` +Le service qui me permet d'externaliser facilement les sauvegardes, est [BorgBase](https://borgbase.com). diff --git a/docs/Synology/2021-02-06-restore-time-machine-backup.md b/docs/Synology/2021-02-06-restore-time-machine-backup.md new file mode 100644 index 0000000..4f3e055 --- /dev/null +++ b/docs/Synology/2021-02-06-restore-time-machine-backup.md @@ -0,0 +1,32 @@ +--- +title: "Restaurer un mac depuis une sauvegarde Time machine." +summary: "brief decription to sum up" +author: + - JF +date: 2021-02-06 +--- +# Restaurer un mac depuis une sauvegarde Time machine. + +- Accéder au mode de récupération de OS X en restant appuyer sur `Commmand +R` quand le Mac redémarre et que l'écran est gris. +- Quand la fenêtre avec les options apparaît, sélectionner "Utilities" dans la barre de menu et lancer un "Terminal". +- Dans le terminal utiliser les commandes suivantes : +```bash +cd /Volumes +mkdir syno +``` +- On monte la sauvegarde Time Machine depuis le partage du NAS Synology en saisissant la commande suivante : +```bash +mount -t afp afp://timemachine:motdepasse@Savaneprod.local/Time\ Machine /Volumes/syno +``` +Il est possible que l'adresse IP fonctionne mieux. +- Vérification que le montage a fonctionné. +```bash +ls -la syno/ +``` +- Maintenant on a besoin de monter "sparsebundle" en utilisant `hdid` (hard drive image driver) +```bash +hdid nameOfThebundle.backupbundle +``` +- Saisir le mot de passe si demandé (si le disque ou la sauvegarde était chiffré.e). +- Maintenant quitter le terminal et sélectionner "Restore" depuis Time machine. +- La sauvegarde présente sur le NAS doit maintenant être visible. Suivre les instructions données à l'écran. diff --git a/docs/Synology/borg_package.png b/docs/Synology/borg_package.png new file mode 100644 index 0000000..e2a94e6 Binary files /dev/null and b/docs/Synology/borg_package.png differ diff --git a/docs/Synology/borg_synocommunity.png b/docs/Synology/borg_synocommunity.png new file mode 100644 index 0000000..9c14e43 Binary files /dev/null and b/docs/Synology/borg_synocommunity.png differ diff --git a/docs/Synology/index.md b/docs/Synology/index.md new file mode 100644 index 0000000..b643d0a --- /dev/null +++ b/docs/Synology/index.md @@ -0,0 +1,11 @@ +--- +title: Liens relatifs à l'utilisation de Synology DSM. +authors: + - JF +date: 2023-10-13 +--- +# Liens relatifs à l'utilisation de Synology DSM. + +- Utiliser Dynamic DNS a.k.a DynDNS ou DDNS avec Gandi.net : [https://github.com/EmixamPP/synology-ddns-gandi](https://github.com/EmixamPP/synology-ddns-gandi) + - Nécessaire lorsque le fournisseur d'accès par lequel le Synology est connecté à Internet ne propose pas d'adresse IP publique fixe. Et lorsque le domaine est géré par Gandi.net . + - DSM implémente par défaut ce service pour OHV. diff --git a/docs/Synology/sshd_restart.png b/docs/Synology/sshd_restart.png new file mode 100644 index 0000000..56ac218 Binary files /dev/null and b/docs/Synology/sshd_restart.png differ diff --git a/docs/Synology/task_Schedule-tab.png b/docs/Synology/task_Schedule-tab.png new file mode 100644 index 0000000..3dc8cb4 Binary files /dev/null and b/docs/Synology/task_Schedule-tab.png differ diff --git a/docs/Synology/task_general-tab.png b/docs/Synology/task_general-tab.png new file mode 100644 index 0000000..35591a6 Binary files /dev/null and b/docs/Synology/task_general-tab.png differ diff --git a/docs/Synology/task_setting-tab.png b/docs/Synology/task_setting-tab.png new file mode 100644 index 0000000..b4f5b43 Binary files /dev/null and b/docs/Synology/task_setting-tab.png differ diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 0000000..45d9caf --- /dev/null +++ b/docs/about.md @@ -0,0 +1 @@ +À propos. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..33907a6 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,11 @@ +# Savanewiki, le wiki de savaneprod.fr + +savaneprod.fr a été créé par curiosité d'abord. Et puis pérennisé pour garder une souveraineté sur la vie numérique de la famille qui l'utilise : + +- Un Synology sur lequel est installé docker et [Nextcloud](https://nextcloud.com/fr/) dedans. +- Un domaine enregistré chez gandi.net +- Certificats TLS enregistrés chez [Let's encrypt](https://letsencrypt.org/). +- Des courriels gérés par [Migadu](https://migadu.com/). +- Deux PC sous [pop!_os](https://pop.system76.com/). +- Un Mac avec un Time Machine qui sauvegarde sur le Synology. +- Des sauvegardes externalisées grâce à [Borg Backup](https://borgbackup.readthedocs.io). diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..c6ff939 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,14 @@ +site_name: Savanewiki +site_url: https://docs.savaneprod.fr +nav: + - Home: index.md + - Synology: + - "Synology/index.md" + - "Synology/2019-09-01-access-synology-with-ssh-asymetrical-key.md" + - "Synology/2019-12-16-wildcard-lets-encrypt-certificate.md" + - "Synology/2020-12-04-borg-backup.md" + - "Synology/2021-02-06-restore-time-machine-backup.md" + - Ansible: + - "Ansible/2023-10-01-nextcloud-docker-update-from-ansible.md" + - About: about.md +theme: readthedocs