====== Yunohost dans un container LXC ====== ===== Installation du container LXC ===== Créer le container avec comme nom ynh lxc-create -n ynh -t download -- -d debian -r buster -a amd64 La config du container nano /var/lib/lxc/ynh/config # Template used to create this container: /usr/share/lxc/templates/lxc-download # Parameters passed to the template: -d debian -r buster -a amd64 # Distribution configuration lxc.include = /usr/share/lxc/config/common.conf lxc.arch = linux64 # Container specific configuration lxc.apparmor.profile = generated lxc.apparmor.allow_nesting = 1 lxc.rootfs.path = dir:/var/lib/lxc/ynh/rootfs lxc.uts.name = ynh # Network configuration lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:dd:91:8b Démarrer le container lxc-start ynh Vérifier et lister les container lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED ynh RUNNING 0 - 10.0.3.243 - false Entrer dans le container lxc-attach ynh root@ynh:~# Taper exit pour en sortir ===== Configurations complémentaires de l'hôte à prendre en compte : ===== ==== Config LXC ==== Faire marcher le système de gestion du temps, ajouter une config pour les containers LXC : Yes, every option you place in files you include in /usr/share/lxc/config/common.conf.d/ will be automatically included. So if you do something like: nano /usr/share/lxc/config/common.conf.d/01-sys-time.conf y ajouter lxc.cap.drop = lxc.cap.drop = mac_admin mac_override sys_module sys_rawio Redémarrer le container lxc-stop ynh lxc-start ynh * https://github.com/lxc/lxc/issues/2108 Voir également les fichiers de config génériques de lxc nano /etc/default/lxc nano /etc/default/lxc-net ==== Apache vhost proxy vers le container ==== Apache va servir de proxy pour renvoyer le traffic au container yunohost, une fois apache installé, on lui rajoute des bouts a2enmod expires headers ssl proxy proxy_http proxy_html proxy_wstunnel Installer un certificat https avec certbot et un vhost type On constitue ensuite un vhost proxy pour le https, le http redirige systématiquement sur ce vhost, [[https://github.com/xwiki-labs/cryptpad/wiki/Apache|voir cette page à ce sujet à propos de cryptpad]] nano /etc/apache2/sites-available/ynh.futuretic.fr-le-ssl.conf ServerAdmin tech@futuretic.fr ServerName ynh.futuretic.fr SSLEngine on SSLProxyEngine On # ajout suite a default ssl handshake et suite à AH01097: pass request body failed SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off SSLCertificateFile /etc/letsencrypt/live/ynh.futuretic.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/ynh.futuretic.fr/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf ProxyPreserveHost On ProxyRequests Off # HSTS Header always set Strict-Transport-Security "max-age=15768000" # proxy pour cetificat DocumentRoot /var/www/html ProxyPass /.well-known ! ProxyPass / https://ynh.futuretic.fr/ ProxyPassReverse / https://ynh.futuretic.fr/ #ProxyPass "/" "https://10.0.3.243/" #ProxyPassReverse "/" "https://10.0.3.243/" # For WebSockets RewriteEngine on RewriteCond %{HTTP:Connection} Upgrade [NC] RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteRule /(.*) wss://ynh.futuretic.fr/$1 [P,L] RequestHeader set X-Forwarded-Proto “https” RequestHeader set X-Forwarded-Port “443” #SetEnv proxy-sendchunks 1 Order deny,allow Allow from all ErrorLog /var/log/apache2/ynh.futuretic.fr.error.log LogLevel error CustomLog /var/log/apache2/ynh.futuretic.fr.access.log vhost_combined A noter le LogLevel à mettre sur debug à la place de error si debug voir [[https://documentation.bloomreach.com/14/library/deployment/configuring/configure-apache-httpd-as-reverse-proxy-for-hippo.html|cette page pour paramètres proxy ]] **Ajouter l'adresse à votre fichier hosts** nano /etc/hosts 10.0.3.243 ynh.futuretic.fr **Il faut aussi donner des règles pour transférer les websockets**, sinon yunohost-api ne reçoit pas les messages par ce bias et cryptpad n'est pas content non plus, installer aussi le module headers pour apache sudo a2enmod headers sudo systemctl restart apache2 **Il est nécessaire d'ajouter des paramètres pour que les [[https://serverfault.com/questions/1017710/ah00898-error-during-ssl-handshake-with-remote-server-localhost|poignées de main ssl]] se passent bien** SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off Pour débug : coté hôte : tail -f /var/log/apache2/ynh.futuretic.fr.error.log coté ynh lxc : tail -f /var/log/yunohost/yunohost-api.log Et le debuggeur du navigateur ==== Créer un nouveau certificat pour un sous domaine proxy vers yunohost ==== nano /etc/apache2/sites-available/000-ynh2ssl.futuretic.fr.conf cd /etc/apache2/sites-available/ a2ensite 000-ynh2ssl.futuretic.fr.conf systemctl reload apache2 certbot certonly --http-01-address 135.181.129.123 -d pass.futuretic.fr a2dissite 000-ynh2ssl.futuretic.fr.conf cp cpad.futuretic.fr.conf pass.futuretic.fr.conf cp cpad.futuretic.fr-le-ssl.conf pass.futuretic.fr-le-ssl.conf 3127 nano pass.futuretic..fr.conf Remplacer cpad par pass (dans nano ctrl \ ) nano pass.futuretic.fr.conf nano pass.futuretic.fr-le-ssl.conf a2ensite pass.futuretic.fr-le-ssl.conf pass.futuretic.fr.conf Ajouter à l'ip du container le sous domaine pass.futuretic.fr dans le fichier host nano /etc/hosts systemctl reload apache2 ===== Installation de yunohost dans le container LXC ===== **Entrer dans le container** lxc-attach ynh root@ynh:~# **Installer les outils de base** apt update apt upgrade apt install curl git htop locate netcat nano nload iotop mcrypt rsync sudo unzip **Lancer l'install de Yunohost** curl https://install.yunohost.org | bash Suivre la procédure de post install en définissant le domaine et le password admin **Modif de sécu pou faire marcher le tout** nano /etc/nginx/conf.d/security.conf.inc # Follows the Web Security Directives from the Mozilla Dev Lab and the Mozilla $ # https://wiki.mozilla.org/Security/Guidelines/Web_Security # https://observatory.mozilla.org/ #more_set_headers "Content-Security-Policy : upgrade-insecure-requests"; #more_set_headers "Content-Security-Policy-Report-Only : default-src https: dat$ #more_set_headers "X-Content-Type-Options : nosniff"; more_set_headers "X-XSS-Protection : 1; mode=block"; more_set_headers "X-Download-Options : noopen"; more_set_headers "X-Permitted-Cross-Domain-Policies : none"; more_set_headers "X-Frame-Options : SAMEORIGIN"; Ci-dessus 3 lignes commentées, à voir coté sécu ce que prend en charge le apache du host et ce qui revient au nginx du container ("interférences" dans la transmission des headers et du ssl du fait de la containeurisation à maitriser) **Créer un premier utilisateur via le back office de yunohost** ==== Installation de Cryptpad via Yunohost ==== L'[[https://github.com/YunoHost-Apps/cryptpad_ynh|application Yunohost]] pour Cryptpad - Zero Knowledge realtime collaborative editor Il faut installer Cryptpad sur un (sous).domaine dédié (cpad.futuretic.fr par exemple) et depuis la version 5.2.1, il convient de créer préalablement un sous domaine pour faire la mise à jour (sandbox-cpad.futuretic.fr par exemple). Il faut alors créer le vhost dans le apache en front qui agit comme proxy, générer les certificats sur le host, créer le domaine dans yunohost situé dans le container sans avoir à créer les certificats réels **Pour tuner la config, ça se passe là :** nano /var/www/cryptpad/config/config.js * * CUSTOMIZE AND UNCOMMENT THIS FOR PRODUCTION INSTALLATIONS. */ // httpSafeOrigin: "https://some-other-domain.xyz", //httpSafeOrigin: "cpad.futuretic.fr", ... /* CryptPad can log activity to stdout * This may be useful for debugging */ logToStdout: false, /* Log levels * silly, verbose, debug, feedback, info, warn, error * This will affect both logging to the console and the disk. */ logLevel: 'error', ... **Redémarrer le service** systemctl restart cryptpad systemctl status cryptpad journalctl -u cryptpad ==== Installation et utilisation de Borg Backup pour faire des sauvegardes entre 2 Yunohost ==== * Documentation https://github.com/YunoHost-Apps/borg_ynh Coté serveur A à sauvegarder, debug systemctl status borg.service journalctl -feu borg.service Configuration du port et + nano /etc/yunohost/apps/borg/settings.yml ==== Export de tous les Pads depuis un etherpad vieillissant dans yunohost pour archivage au format markdown ==== Créer un répertoire de backup mkdir etherpadbackup Faire une sauvegarde de la db mysqldump -u etherpad_mypads -p etherpad_mypads > /home/user/etherpadbackup/etherpaddb10102021.sql Lister tous les pads de l'instance et mettre leur nom dans un fichier texte mysql -u etherpad_mypads -p etherpad_mypads -e 'select store.key from store' | grep -Eo '^pad:[^:]+' | sed -e 's/pad://' | sort | uniq -c | sort -rn | awk '{if ($1!="2") {print $2 }}' > /home/user/etherpadbackup/pad_names.txt Faire un script bash qui va créer un export au format etherpad et mardown de tous ces pads et les mettre dans un répertoire respectif #!/bin/sh # The base url to where etherpad is hosted ETHERPAD_SERVER="https://pad.monserveur.org" while IFS= read -r line; do printf '%s\n' "$line" echo "$ETHERPAD_SERVER/p/$line/export/etherpad /home/user/etherpadbackup/etherpad/$line.etherpad" curl "$ETHERPAD_SERVER/p/$line/export/etherpad" >"/home/user/etherpadbackup/etherpad/$line.etherpad" curl "$ETHERPAD_SERVER/p/$line/export/markdown" >"/home/user/etherpadbackup/md/$line.md" done < $1 Lancer le script en passant le nom de fichier contenant la liste des pads en argument : sh export_etherpad.sh pad_names.txt Compresser les dossiers et les transférer en scp tar -czvf etherpadmonserveurbackupmd.tar.gz /home/user/etherpadbackup/ Les fichiers au format markdown gardent +/- leur formattage quand ouvert dans l'éditeur de Nextcloud :) ==== Installation de Opensondage dans Yunohost ==== Via la mécanique habituelle, petite subtilité : dans l'interface d'admin > Utilisateurs > il faut ajouter aux visiteurs anonymes la permission **" OpenSondage - Calage de date et vote (admin) "** Sinon à la fin de la création du sondage, les utilisateurs non loggués ne voient pas la page qui résume les liens et accès à l'admin du sondage (nénamoins envoyés par mail) {{ ::opensondageutilisateuradmin.png |}} ===== Migration de Yunohost 4 Debian 10 à Yunohost 11 et Debian 11 ===== Ça marche à priori tout seul, [[https://yunohost.org/fr/buster_bullseye_migration|voir cette page de documentation]] Dans le container ynh, taper : yunohost tools migrations migrate --debug {{tag>bj yunohost infrastructure futuretic linux etherpad codimd opensondage}}