Table des matières

Un conteneur LXC pour Yunohost

Objectif : Migrer le serveur (VPS) de duniter.be vers un conteneur LXC sur un serveur plus costaud.

(Attention, Yunohost n'est actuellement disponible que pour Debian Stretch et pas encore pour Debian Buster!)

# lxc-create -t download -n yunohost -- --dist debian --release stretch --arch amd64
 
 
# cat /var/lib/lxc/yunohost/config 
lxc.start.auto = 1
 
# Distribution configuration
lxc.include = /usr/share/lxc/config/common.conf
lxc.arch = linux64
 
# Container specific configuration
lxc.rootfs.path = dir:/var/lib/lxc/yunohost/rootfs
lxc.uts.name = yunohost
 
# Network configuration
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:9e:94:00
 
# cat /etc/lxc/dnsmasq.conf 
(...)
dhcp-host=yunohost,10.0.3.6
 
# systemctl restart lxc-net
 
# lxc-start yunohost
 
# lxc-ls -f
NAME       STATE   AUTOSTART GROUPS IPV4     IPV6 UNPRIVILEGED 
yunohost   RUNNING 1         -      10.0.3.6 -    false        

Installation de Yunohost

Documentation : Installing YunoHost manually

# lxc-attach yunohost
 
root@yunohost:/# apt install curl
 
root@yunohost:/# curl https://install.yunohost.org | bash
(...)
[ OK ] YunoHost installation completed !
===============================================================================
You should now proceed with Yunohost post-installation. This is where you will
be asked for :
  - the main domain of your server ;
  - the administration password.
(...)

On lance la “post-installation” :

root@yunohost:/# yunohost tools postinstall
Domaine principal : artanux.be
Vous êtes maintenant sur le point de définir un nouveau mot de passe d’administration. Le mot de passe doit comporter au moins 8 caractères – bien qu’il soit recommandé d’utiliser un mot de passe plus long (c’est-à-dire une phrase secrète) et/ou d’utiliser différents types de caractères (majuscules, minuscules, chiffres et caractères spéciaux).
Nouveau mot de passe d’administration : 
Confirmez : nouveau mot de passe d’administration : 
Info : L'installation de YunoHost est en cours …
(...)
Succès ! YunoHost a été configuré
Attention : La post-installation est terminée mais YunoHost a besoin d’au moins un utilisateur pour fonctionner correctement. Vous devez en ajouter un en utilisant 'yunohost user create $nomdutilisateur' ou bien via l’interface d’administration web.

On ajoute donc un utilisateur :

root@yunohost:/# yunohost user create nomutilisateur
Prénom : prenom
Nom : nom
Adresse de courriel : ******@artanux.be
Vous êtes maintenant sur le point de définir un nouveau mot de passe utilisateur. Le mot de passe doit comporter au moins 8 caractères — bien qu’il soit recommandé d’utiliser un mot de passe plus long (c’est-à-dire une phrase secrète) et/ou d’utiliser différents types de caractères (majuscules, minuscules, chiffres et caractères spéciaux).
Mot de passe : 
Confirmez : mot de passe : 
Creating directory '/home/nomutilisateur'.
Succès ! La configuration de SSOwat a été générée
Succès ! L’utilisateur a été créé
fullname: prenom nom
mail: *******@artanux.be
username: nomutilisateur

Configuration DNS Chez OVH

Il y a une commande yunohost qui donne la configuration par défaut :

root@yunohost:/# yunohost domain dns-conf artanux.be
Info : Cette page montre la configuration *recommandée*. Elle ne configure *pas* le DNS pour vous. Il est de votre responsabilité que de configurer votre zone DNS chez votre fournisseur/registrar DNS avec cette recommandation.
; Basic ipv4/ipv6 records
@ 3600 IN A 37.187.127.107
* 3600 IN A 37.187.127.107
 
; XMPP
_xmpp-client._tcp 3600 IN SRV 0 5 5222 artanux.be.
_xmpp-server._tcp 3600 IN SRV 0 5 5269 artanux.be.
muc 3600 IN CNAME @
pubsub 3600 IN CNAME @
vjud 3600 IN CNAME @
 
; Mail
@ 3600 IN MX 10 artanux.be.
@ 3600 IN TXT "v=spf1 a mx ip4:37.187.127.107 -all"
mail._domainkey 3600 IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDuAgB7uHn1gy0pix2P1sfVtB9NQpMAVAi9UcuiGficw9a9xFIGbccPsgdVo79Ktt2O+G+HCq+WJln5iftr1+W4QMj8BNlClG6t26QQqK5G20NLaKappYmEKNgTBI40h00M59nVebIUlCMQiI4r7kD0sWPfQIIs/y/K1ouZSpDirwIDAQAB"
_dmarc 3600 IN TXT "v=DMARC1; p=none"
 
; Extra
@ 3600 IN CAA 128 issue "letsencrypt.org"

On ne peut pas copier telle quelle cette configuration dans les zones DNS chez OVH. J'ai du remanier un peu :

$TTL 3600
@	IN SOA dns101.ovh.net. tech.ovh.net. (2020010808 86400 3600 3600000 300)
                         IN NS     dns101.ovh.net.
                         IN NS     ns101.ovh.net.
                         IN MX     10 artanux.be.
                         IN A      37.187.127.107
                         IN CAA    128 issue "letsencrypt.org"
                     600 IN TXT    "v=spf1 a mx ip4:37.187.127.107 -all"
*                        IN CNAME  artanux.be.
_dmarc                   IN TXT    "v=DMARC1; p=none;"
_xmpp-client._tcp        IN SRV    0 5 5222 artanux.be.
_xmpp-server._tcp        IN SRV    0 5 5269 artanux.be.
mail._domainkey          IN TXT    ( "v=DKIM1; h=sha256; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDuAgB7uHn1gy0pix2P1sfVtB9NQpMAVAi9UcuiGficw9a9xFIGbccPsgdVo79Ktt2O+G+HCq+WJln5iftr1+W4QMj8BNlClG6t26QQqK5G20NLaKappYmEKNgTBI40h00M59nVebIUlCMQiI4r7kD0sWPfQIIs/y/K1ouZSpDirwIDAQAB" )
muc                      IN CNAME  artanux.be.
pubsub                   IN CNAME  artanux.be.
vjud                     IN CNAME  artanux.be.

(Je me suis inspiré de cinay.xyz pour la syntaxe qui ne correspond pas trop à ce que la commande initiale donne.)

Reverse Proxy Nginx

Sur le serveur sur lequel tourne les conteneurs LXC que j'utilise, j'ai installé nginx comme reverse proxy. J'utilise le nom de domaine artanux.be pour cet usage.

Prérequis : On génère les certificats wildcard ( valable pour artanux.be et *.artanux.be ) avec acme.sh.

# cat /etc/nginx/sites-available/artanux.be
 
server {
	listen 80;
 
	server_name artanux.be *.artanux.be;
 
	return 301 https://$host$request_uri;
}
 
server {
	listen 443 ssl;
 
	server_name *.artanux.be;
 
	ssl_certificate		/etc/ssl/artanux.be/fullchain.pem;
	ssl_certificate_key	/etc/ssl/artanux.be/privkey.pem;
	ssl_protocols		TLSv1.2;	
	ssl_ecdh_curve		sect571r1:secp521r1:brainpoolP512r1:secp384r1;
	ssl_ciphers		EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES;
	ssl_prefer_server_ciphers on;
 
	location / {
        	proxy_pass		https://10.0.3.6;
	        proxy_redirect		off;
	        proxy_read_timeout	1200s;
 
	        proxy_set_header	Host		$host;
	        proxy_set_header	X-Real-IP	$remote_addr;
	        proxy_set_header	X-Forwarded-For	$proxy_add_x_forwarded_for;
	        client_max_body_size	50M;
	}
}
 
# ln -s /etc/nginx/sites-available/artanux.be /etc/nginx/sites-enabled/