404
- -Page not found
- - -diff --git a/site/404.html b/site/404.html deleted file mode 100644 index a62ae01..0000000 --- a/site/404.html +++ /dev/null @@ -1,134 +0,0 @@ - - -
- - - - -Page not found
- - -Se connecter en SSH au Synology à l’aide d’une clef asymétrique.
----
-- name: Mise à jour du conteneur Nextcloud
- hosts: savaneprod.fr
- vars:
- nc_version: 28.0.5
- 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 en attendant la remontée des conteneurs
- ansible.builtin.pause:
- #minutes: 2
- seconds: 30
-
- - 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"
- - "php occ config:system:set maintenance_window_start --type=integer --value=1"
-
- - name: Pause de 1 minute
- ansible.builtin.pause:
- minutes: 1
-
- - 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.
- -Positionner le terminal à la racine du dossier du site mkdocs.
-mkdocs serve
-
-La mise à jour est dynamique, elle suit la mise à jour des pages.
-vi ./docs/rubrique/$(date '+%Y-%m-%d')-nouvelle_page.md
-
-Ajouter le nom de la page dans le fichier.
-vi mkdocs.yml
-
-site_name: Savanewiki
-site_url: https://docs.savaneprod.fr
-nav:
- - Home: index.md
- - Rubrique:
- - "Rubrique/index.md"
- - "Rubrique/$(date '+%Y-%m-%d')-nouvelle_page.md"
- - About: about.md
-theme: readthedocs
-
-Contenu minimal de la page :
----
-title: "Nouvelle page"
-summary: "Description brève"
-author:
- - JF
-date: $(date '+%Y-%m-%d')
----
-
-
-mkdocs build --clean
-
-Rsync étant compliqué à utilser avec Synology. Utiliser Gitea pour télécharger les fichiers au bon endroit, un peu tordu. J'ai décidé d'utiliser Ansible pour publier les builds de Savanewiki.
-Toujours parce que rsync n'est pas standard avec Synology, je n'ai pas cherché à utiliser le module ansible.posix.synchronize. Ce n'est pas très efficace d'un point de vue du mécanisme, mais ça l'est d'un point de vue simplicité et temps de mise en place.
---
-- name: Déploiement de SavaneWiki
- hosts: savaneprod.fr
-
- tasks:
- - name: Remove dest files
- ansible.builtin.file:
- path: /volume1/web/docs/
- state: absent
-
- - name: Copie des fichier de site/
- ansible.builtin.copy:
- dest: /volume1/web/docs/
- group: http
- mode: 600
- owner: root
- src: "{{ playbook_dir }}/../site/"
-
-
- pvresize /dev/sdc
-* Il est inutile de rentrer des option ou des arguments, la commande se charge seule d'effectuer le redimensionnement. Et le Volume Group prend automatiquement la taille du Physical Volume.
S'il s'agit d'un nouveau volume :
- * pvcreate /dev/le_volume
- * vgs pour afficher les Volume groups de la machine
- * vgextend nom_du_vg /dev/le_volume, asseoit un Volume Group sur deux disques durs. Attention ! Si un disque crash le Volume Group est mort.
lvchange -a n <nom du vg> -> désactiver le volume logique
lvextend -l +100%FREE /dev/vg001/linshare
lvchange -a y <nom du vg> -> activer le volume logique
À sa réactivation, le volume remonte automatiquement selon /etc/fstab
Attention : La commande de redimensionnement du système de fichier peut changer en fonction de celui-ci.
-xfs_growfs /dev/mapper/vg001-linshare dans le cas de CentOS.
resize2fs /dev/notre_vg dans le cas d'un système de fichier en ext.
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 :
-# 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.
-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 :
-/var/services/homes/mon-login/.ssh/authorized_keys
-
-ssh mon-login@mon-syno "/bin/cat >> /var/services/homes/mon-login/.ssh/authorized_keys" < /home/user/.ssh/syno_key.pub
-
-sudo -ichmod 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)vi /etc/ssh/sshd_config
-- Les trois lignes suivantes sont importantes :
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
-
-
# 1 - Being 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/.
Utilsation de l'API Gandi : https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api
-SYNOPATH="/volume1/something"
-API="dns_gandi_livedns"
-
-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 $API --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
-
-
-* On peut alors modifier le script avec les valeurs suivantes :
API="dns_infomaniak_add"
-export INFOMANIAK_API_TOKEN="mon_t0k3n_9uil_e2t_grand_et_b1en_utile"
-
-Il faut le sauvegarder en lieu sûr, car une fois créé il ne sera plus possible de le consulter.
-
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.
-
Exécution du script. Il faut bien entendu que le script ait la permission d'éxécution configurée.
-
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.
-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.
-
-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.
-
#!/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=<clef privée pour sauvegarder sur le serveur distant>
-# export BORG_REPO='borgserver:/borgrepo'
-export BORG_REPO='borgserver:borgrepo'
-export BORG_CACHE_DIR='<emplacement du cache de Borg>'
-
-# 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.
- -Commmand +R quand le Mac redémarre et que l'écran est gris.cd /Volumes
-mkdir syno
-
-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é.
-ls -la syno/
-
-hdid (hard drive image driver)hdid nameOfThebundle.backupbundle
-
-On utilise synology-ddns-gandi à installer au préalable : https://github.com/EmixamPP/synology-ddns-gandi
-
-Query URL = https://infomaniak.com/nic/update?hostname=__HOSTNAME__&myip=__MYIP__
Utliser les identifiants créés depuis l'interface infomaniak.
- -Je suis joignable à savanewiki.jf[at]savaneprod.fr.
-Clef PGP:
-----BEGIN PGP PUBLIC KEY BLOCK-----
-
-xjMEZQNvlxYJKwYBBAHaRw8BAQdADoAhdyJQN7eaezxEuPRgAdwDrTllPt1iSstm
-FTPsoDDNFUpGIDxqZkBzYXZhbmVwcm9kLmZyPsKJBBMWCAAxFiEEQiGqSUxYk8/C
-tTXN28NxXcaN35UFAmUDb5cCGwMECwkIBwUVCAkKCwUWAgMBAAAKCRDbw3Fdxo3f
-lWfLAP4sefmkn1kFT3mS+bgoCyZqsDyHSIt/CRx1TMLxm9GJTAEA1ZbmYj2S1m4I
-ul91EH9PMCH6cXOw9CTjwW2ehm5f8AnOOARlA2+XEgorBgEEAZdVAQUBAQdAXkK7
-YF1FUE93x+RtLhnsZ7UTqXv8197M7LoECRluriEDAQgHwngEGBYIACAWIQRCIapJ
-TFiTz8K1Nc3bw3Fdxo3flQUCZQNvlwIbDAAKCRDbw3Fdxo3flQgjAP4qdGIlGhH6
-MdiKnExcYsqo6JAJjaBU+aHFlonnTzvHmAEAil+lpNdm5oxQ/vGrHHbdXP9CMQSn
-wQnRURmbliaQWgk=
-=ob9+
------END PGP PUBLIC KEY BLOCK-----
-
-
- 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 :
-' + escapeHtml(summary) +'
' + noResultsText + '
'); - } -} - -function doSearch () { - var query = document.getElementById('mkdocs-search-query').value; - if (query.length > min_search_length) { - if (!window.Worker) { - displayResults(search(query)); - } else { - searchWorker.postMessage({query: query}); - } - } else { - // Clear results for short queries - displayResults([]); - } -} - -function initSearch () { - var search_input = document.getElementById('mkdocs-search-query'); - if (search_input) { - search_input.addEventListener("keyup", doSearch); - } - var term = getSearchTermFromLocation(); - if (term) { - search_input.value = term; - doSearch(); - } -} - -function onWorkerMessage (e) { - if (e.data.allowSearch) { - initSearch(); - } else if (e.data.results) { - var results = e.data.results; - displayResults(results); - } else if (e.data.config) { - min_search_length = e.data.config.min_search_length-1; - } -} - -if (!window.Worker) { - console.log('Web Worker API not supported'); - // load index in main thread - $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { - console.log('Loaded worker'); - init(); - window.postMessage = function (msg) { - onWorkerMessage({data: msg}); - }; - }).fail(function (jqxhr, settings, exception) { - console.error('Could not load worker.js'); - }); -} else { - // Wrap search in a web worker - var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); - searchWorker.postMessage({init: true}); - searchWorker.onmessage = onWorkerMessage; -} diff --git a/site/search/search_index.json b/site/search/search_index.json deleted file mode 100644 index 6b52ae8..0000000 --- a/site/search/search_index.json +++ /dev/null @@ -1 +0,0 @@ -{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Savanewiki, le wiki de savaneprod.fr savaneprod.fr a \u00e9t\u00e9 cr\u00e9\u00e9 par curiosit\u00e9 d'abord. Et puis p\u00e9rennis\u00e9 pour garder une souverainet\u00e9 sur la vie num\u00e9rique de la famille qui l'utilise : Un Synology sur lequel est install\u00e9 docker et Nextcloud dedans. Un domaine enregistr\u00e9 chez infomaniak. Un serveur Proxmox, pour essayer des choses. Certificats TLS enregistr\u00e9s chez Let's encrypt . Des courriels g\u00e9r\u00e9s par Migadu . Deux PC sous pop!_os . Un Mac avec un Time Machine qui sauvegarde sur le Synology. Des sauvegardes externalis\u00e9es gr\u00e2ce \u00e0 Borg Backup et BorgBase .","title":"Home"},{"location":"#savanewiki-le-wiki-de-savaneprodfr","text":"savaneprod.fr a \u00e9t\u00e9 cr\u00e9\u00e9 par curiosit\u00e9 d'abord. Et puis p\u00e9rennis\u00e9 pour garder une souverainet\u00e9 sur la vie num\u00e9rique de la famille qui l'utilise : Un Synology sur lequel est install\u00e9 docker et Nextcloud dedans. Un domaine enregistr\u00e9 chez infomaniak. Un serveur Proxmox, pour essayer des choses. Certificats TLS enregistr\u00e9s chez Let's encrypt . Des courriels g\u00e9r\u00e9s par Migadu . Deux PC sous pop!_os . Un Mac avec un Time Machine qui sauvegarde sur le Synology. Des sauvegardes externalis\u00e9es gr\u00e2ce \u00e0 Borg Backup et BorgBase .","title":"Savanewiki, le wiki de savaneprod.fr"},{"location":"about/","text":"Je suis joignable \u00e0 savanewiki.jf[at]savaneprod.fr . Clef PGP: -----BEGIN PGP PUBLIC KEY BLOCK----- xjMEZQNvlxYJKwYBBAHaRw8BAQdADoAhdyJQN7eaezxEuPRgAdwDrTllPt1iSstm FTPsoDDNFUpGIDxqZkBzYXZhbmVwcm9kLmZyPsKJBBMWCAAxFiEEQiGqSUxYk8/C tTXN28NxXcaN35UFAmUDb5cCGwMECwkIBwUVCAkKCwUWAgMBAAAKCRDbw3Fdxo3f lWfLAP4sefmkn1kFT3mS+bgoCyZqsDyHSIt/CRx1TMLxm9GJTAEA1ZbmYj2S1m4I ul91EH9PMCH6cXOw9CTjwW2ehm5f8AnOOARlA2+XEgorBgEEAZdVAQUBAQdAXkK7 YF1FUE93x+RtLhnsZ7UTqXv8197M7LoECRluriEDAQgHwngEGBYIACAWIQRCIapJ TFiTz8K1Nc3bw3Fdxo3flQUCZQNvlwIbDAAKCRDbw3Fdxo3flQgjAP4qdGIlGhH6 MdiKnExcYsqo6JAJjaBU+aHFlonnTzvHmAEAil+lpNdm5oxQ/vGrHHbdXP9CMQSn wQnRURmbliaQWgk= =ob9+ -----END PGP PUBLIC KEY BLOCK-----","title":"About"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/","text":"Mise \u00e0 jour de Nextcloud docker par Ansible Pr\u00e9requis Se connecter en SSH au Synology \u00e0 l\u2019aide d\u2019une clef asym\u00e9trique. Le playbook --- - name: Mise \u00e0 jour du conteneur Nextcloud hosts: savaneprod.fr vars: nc_version: 28.0.5 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\u00e9l\u00e9chargement 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 en attendant la remont\u00e9e des conteneurs ansible.builtin.pause: #minutes: 2 seconds: 30 - name: \"Mise \u00e0 jour de la base de donn\u00e9es\" 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\" - \"php occ config:system:set maintenance_window_start --type=integer --value=1\" - name: Pause de 1 minute ansible.builtin.pause: minutes: 1 - 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\u00e7on de faire renvoi un probl\u00e8me d'int\u00e9grit\u00e9 sur le fichier config.php.","title":"Mise \u00e0 jour de Nextcloud docker par Ansible"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/#mise-a-jour-de-nextcloud-docker-par-ansible","text":"","title":"Mise \u00e0 jour de Nextcloud docker par Ansible"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/#prerequis","text":"Se connecter en SSH au Synology \u00e0 l\u2019aide d\u2019une clef asym\u00e9trique.","title":"Pr\u00e9requis"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/#le-playbook","text":"--- - name: Mise \u00e0 jour du conteneur Nextcloud hosts: savaneprod.fr vars: nc_version: 28.0.5 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\u00e9l\u00e9chargement 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 en attendant la remont\u00e9e des conteneurs ansible.builtin.pause: #minutes: 2 seconds: 30 - name: \"Mise \u00e0 jour de la base de donn\u00e9es\" 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\" - \"php occ config:system:set maintenance_window_start --type=integer --value=1\" - name: Pause de 1 minute ansible.builtin.pause: minutes: 1 - 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\u00e7on de faire renvoi un probl\u00e8me d'int\u00e9grit\u00e9 sur le fichier config.php.","title":"Le playbook"},{"location":"Ansible/2023-11-14-savanewiki-plubication/","text":"Publication du build mkdocs de Savanewiki via Ansible Utilisation de mkdocs Pour d\u00e9marrer le serveur mkdocs Positionner le terminal \u00e0 la racine du dossier du site mkdocs. mkdocs serve La mise \u00e0 jour est dynamique, elle suit la mise \u00e0 jour des pages. Cr\u00e9ation d'une page. vi ./docs/rubrique/$(date '+%Y-%m-%d')-nouvelle_page.md R\u00e9f\u00e9rencement de la page dans l'arborescence du site Ajouter le nom de la page dans le fichier. vi mkdocs.yml site_name: Savanewiki site_url: https://docs.savaneprod.fr nav: - Home: index.md - Rubrique: - \"Rubrique/index.md\" - \"Rubrique/$(date '+%Y-%m-%d')-nouvelle_page.md\" - About: about.md theme: readthedocs Contenu minimal de la page : --- title: \"Nouvelle page\" summary: \"Description br\u00e8ve\" author: - JF date: $(date '+%Y-%m-%d') --- Compilation du site mkdocs build --clean Le playbook ansible Rsync \u00e9tant compliqu\u00e9 \u00e0 utilser avec Synology. Utiliser Gitea pour t\u00e9l\u00e9charger les fichiers au bon endroit, un peu tordu. J'ai d\u00e9cid\u00e9 d'utiliser Ansible pour publier les builds de Savanewiki. Toujours parce que rsync n'est pas standard avec Synology, je n'ai pas cherch\u00e9 \u00e0 utiliser le module ansible.posix.synchronize . Ce n'est pas tr\u00e8s efficace d'un point de vue du m\u00e9canisme, mais \u00e7a l'est d'un point de vue simplicit\u00e9 et temps de mise en place. --- - name: D\u00e9ploiement de SavaneWiki hosts: savaneprod.fr tasks: - name: Remove dest files ansible.builtin.file: path: /volume1/web/docs/ state: absent - name: Copie des fichier de site/ ansible.builtin.copy: dest: /volume1/web/docs/ group: http mode: 600 owner: root src: \"{{ playbook_dir }}/../site/\"","title":"Publication de Savanewiki"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#publication-du-build-mkdocs-de-savanewiki-via-ansible","text":"","title":"Publication du build mkdocs de Savanewiki via Ansible"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#utilisation-de-mkdocs","text":"","title":"Utilisation de mkdocs"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#pour-demarrer-le-serveur-mkdocs","text":"Positionner le terminal \u00e0 la racine du dossier du site mkdocs. mkdocs serve La mise \u00e0 jour est dynamique, elle suit la mise \u00e0 jour des pages.","title":"Pour d\u00e9marrer le serveur mkdocs"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#creation-dune-page","text":"vi ./docs/rubrique/$(date '+%Y-%m-%d')-nouvelle_page.md","title":"Cr\u00e9ation d'une page."},{"location":"Ansible/2023-11-14-savanewiki-plubication/#referencement-de-la-page-dans-larborescence-du-site","text":"Ajouter le nom de la page dans le fichier. vi mkdocs.yml site_name: Savanewiki site_url: https://docs.savaneprod.fr nav: - Home: index.md - Rubrique: - \"Rubrique/index.md\" - \"Rubrique/$(date '+%Y-%m-%d')-nouvelle_page.md\" - About: about.md theme: readthedocs Contenu minimal de la page : --- title: \"Nouvelle page\" summary: \"Description br\u00e8ve\" author: - JF date: $(date '+%Y-%m-%d') ---","title":"R\u00e9f\u00e9rencement de la page dans l'arborescence du site"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#compilation-du-site","text":"mkdocs build --clean","title":"Compilation du site"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#le-playbook-ansible","text":"Rsync \u00e9tant compliqu\u00e9 \u00e0 utilser avec Synology. Utiliser Gitea pour t\u00e9l\u00e9charger les fichiers au bon endroit, un peu tordu. J'ai d\u00e9cid\u00e9 d'utiliser Ansible pour publier les builds de Savanewiki. Toujours parce que rsync n'est pas standard avec Synology, je n'ai pas cherch\u00e9 \u00e0 utiliser le module ansible.posix.synchronize . Ce n'est pas tr\u00e8s efficace d'un point de vue du m\u00e9canisme, mais \u00e7a l'est d'un point de vue simplicit\u00e9 et temps de mise en place. --- - name: D\u00e9ploiement de SavaneWiki hosts: savaneprod.fr tasks: - name: Remove dest files ansible.builtin.file: path: /volume1/web/docs/ state: absent - name: Copie des fichier de site/ ansible.builtin.copy: dest: /volume1/web/docs/ group: http mode: 600 owner: root src: \"{{ playbook_dir }}/../site/\"","title":"Le playbook ansible"},{"location":"Linux/2019-07-09-manipulations-LVM/","text":"Manipulation de volumes LVM Commandes pour avoir des informations sur les volumes : Lister pvscan, vgscan, lvscan Obtenir des informations sur les volumes pvs, vgs, lvs Obtenir des informations sur un volume pvdisplay, vgdisplay, lvdisplay Tout d'abord il faut commencer par le redimensionnement du volume physique pvresize /dev/sdc * Il est inutile de rentrer des option ou des arguments, la commande se charge seule d'effectuer le redimensionnement. Et le V olume G roup prend automatiquement la taille du P hysical V olume. S'il s'agit d'un nouveau volume : * pvcreate /dev/le_volume * vgs pour afficher les Volume groups de la machine * vgextend nom_du_vg /dev/le_volume , asseoit un Volume Group sur deux disques durs. Attention ! Si un disque crash le Volume Group est mort. On d\u00e9sactive le volume logique pour pouvoir travailler dessus. lvchange -a n