Table des matières

Le site de Caliban dans un container LXC

Je gère l'hébergement du site de l'Association Caliban Belgique. Jusqu'ici, il était hébergé chez un petit VPS de chez OVH mais pour rationaliser un peu les coûts (et me forcer à utiliser lxc), j'ai décidé de le mettre dans un conteneur LXC pour le migrer sur un autre serveur.

# lxc-create -t download -n caliban -- --dist debian --release buster --arch amd64
 
# lxc-ls -f
NAME    STATE   AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED 
caliban STOPPED 0         -      -    -    false  

On modifie la configuration pour que le conteneur ait une IP fixe :

# vim /var/lib/lxc/caliban/config
 
# cat /var/lib/lxc/caliban/config
# Template used to create this container: /usr/share/lxc/templates/lxc-download
# Parameters passed to the template: --dist debian --release buster --arch amd64                                                                             
# Template script checksum (SHA-1): 273c51343604eb85f7e294c8da0a5eb769d648f3
# For additional config options, please look at lxc.container.conf(5)
 
# Uncomment the following line to support nesting containers:
#lxc.include = /usr/share/lxc/config/nesting.conf
# (Be aware this has security implications)
 
 
# Distribution configuration
lxc.include = /usr/share/lxc/config/common.conf
lxc.arch = linux64
 
# Container specific configuration
lxc.rootfs.path = dir:/var/lib/lxc/caliban/rootfs
lxc.uts.name = caliban
 
# Network configuration
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:22:1a:9e

Plus qu'à démarrer, se connecter au conteneur et essayer :

# lxc-start caliban
 
# lxc-attach -n caliban
root@caliban:/# 

Création d'un utilisateur :

root@caliban:/# adduser caliban

Locales :

root@caliban:/# dpkg-reconfigure locales

Programmes à installer

Base

root@caliban:/home/caliban# apt install wget

MariaDB

Prérequis : Faire un dump de la base de données sur l'ancien serveur et la copier sur le nouveau avec scp.

root@caliban:/home/caliban# apt install mariadb-server
 
root@caliban:/home/caliban# mysql -u root -p 
(...)
MariaDB [(none)]> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.001 sec)
 
MariaDB [(none)]> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxxxxxxxxxxxxxx';
Query OK, 0 rows affected (0.002 sec)
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxxxxxxxxxxxxxx';
Query OK, 0 rows affected (0.002 sec)
 
MariaDB [(none)]> quit;
Bye
 
root@caliban:/home/caliban# mysql -u root wordpress < wordpress.sql

Installation de wordpress

root@caliban:/home/caliban# wget https://wordpress.org/latest.tar.gz
 
root@caliban:/home/caliban# tar -xzvf latest.tar.gz
 
root@caliban:/home/caliban# mkdir /var/www/wordpress
 
root@caliban:/home/caliban# cp -r wordpress/* /var/www/wordpress/

Nginx

Installation du serveur web nginx :

root@caliban:/home/caliban# apt install nginx

Installation de PHP :

root@caliban:/etc/nginx# apt install php7.3-fpm php7.3-mysql php-fpm

TLS

Pour avoir un beau petit cadenas vert sur le site (et sécuriser tout le trafic!), on installe les certificats qui-vont-bien sur le host. (Pas sur le conteneur comme ça, on pourra isoler les services de Caliban tout en gardant un point central pour tous les certificats.)

On installe acme.sh et puis :

$ acme.sh --issue -d caliban.be -d '*.caliban.be' --dns dns_ovh --keylength ec-384
 
$ sudo mkdir /etc/ssl/caliban.be
 
$ sudo chown -R simon:simon /etc/ssl/caliban.be/
 
$ sudo visudo
(...)
%simon  ALL= NOPASSWD: /bin/systemctl start nginx
%simon  ALL= NOPASSWD: /bin/systemctl stop nginx
%simon  ALL= NOPASSWD: /bin/systemctl restart nginx
%simon  ALL= NOPASSWD: /bin/systemctl reload nginx
(...)
 
$ acme.sh --install-cert -d caliban.be --ecc --keypath /etc/ssl/caliban.be/privkey.pem --fullchainpath /etc/ssl/caliban.be/fullchain.pem --reloadcmd "sudo systemctl reload nginx"

Redirection pour SSH