Outils pour utilisateurs

Outils du site


yunohost_un_container_lxc

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

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, voir cette page à ce sujet à propos de cryptpad

nano /etc/apache2/sites-available/ynh.futuretic.fr-le-ssl.conf 
ynh.futuretic.fr-le-ssl.conf
<IfModule mod_ssl.c>
 
        <VirtualHost *:443>
 
                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
                <IfModule mod_headers.c>
                        Header always set Strict-Transport-Security "max-age=15768000"
                </IfModule>
 
		# 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

		<Proxy *>
			Order deny,allow
			Allow from all
		</Proxy>
 
                ErrorLog /var/log/apache2/ynh.futuretic.fr.error.log
                LogLevel error
                CustomLog /var/log/apache2/ynh.futuretic.fr.access.log vhost_combined
 
        </VirtualHost>
 
</IfModule>

A noter le LogLevel à mettre sur debug à la place de error si debug voir 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 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'application Yunohost pour Cryptpad - Zero Knowledge realtime collaborative editor

Il faut installer Cryptpad sur un (sous).domaine dédié 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

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 :)

yunohost_un_container_lxc.txt · Dernière modification: 2021/10/10 23:27 de Benjamin Labomedia