====== 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}}