Comment construire son cloud souverain sans passer par les GAFAM ?

Comment construire son cloud souverain sans passer par les GAFAM ?
Photo par Victor Chartin.

Introduction

Aujourd'hui nous allons apprendre à construire notre cloud souverain sans utiliser l’hébergement de Google, Apple, Amazon ou Microsoft. Nous posséderons donc notre propre drive (stockage de fichier, photos, …) mais aussi nos calendriers, contacts, notes, gestionnaire de mots de passe, mails et site perso. Tout cela pour 6€ par mois.

Nota Bene 1 : Cet article fait suite au précédent intitulé “Quel est l’intérêt de construire son cloud souverain ?”.

Nota Bene 2 : Cet article technique est un tutoriel étape par étape pour mettre en place soi-même son propre Cloud souverain. Il nécessite d'être familier avec un environnement linux en ligne de commandes.
Pour comprendre plus en détail l’utilisation des différentes technologies, je vous renvoie vers les documentations dédiées.

Architecture simplifiée du cloud souverain

Choisir son nom de domaine et son hébergeur

Dans un souci de souveraineté numérique, je préfère héberger mes données en France. Je vous propose donc des prestataires comme OVH ou Scaleway. De mon côté, j’ai pris à la fois mon nom de domaine et l’offre VPS à 6€ par mois chez OVH. Cela fait plus d’un an et j’en suis très content. La puissance de l’offre la moins chère suffit pour un cloud de base.

Une fois votre commande passée, assurez-vous d’avoir accès au tableau de bord pour continuer le tutoriel.

Initialisation du VPS

Vous pouvez suivre ce tutoriel d’OVH qui explique très bien la marche à suivre.

Pour toutes les commandes ci-dessous, assurez-vous d’être connecté en ssh à votre VPS depuis le terminal de votre ordinateur.

Mise en place de Nginx

Commencez par installer Nginx avec apt :

sudo apt update
sudo apt install nginx

Mise en place de Docker

sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> focal stable"

Essayez cette commande pour vous assurer que l’installation a réussi

apt-cache policy docker-ce

Cela devrait sortir un résultat semblable à ce qui est écrit ci-dessous :

docker-ce:
  Installed: (none)
  Candidate: 5:19.03.9~3-0~ubuntu-focal
  Version table:
     5:19.03.9~3-0~ubuntu-focal 500
        500 <https://download.docker.com/linux/ubuntu> focal/stable amd64 Packages

Mise en place de Docker compose

sudo curl -L "<https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Pour vous assurer que l’installation s’est bien déroulée, essayez cette commande

docker-compose --version

Vous devriez obtenir un résultat similaire :

Output
docker-compose version 1.29.2, build 5becea4c

Mise en place de Certbot

Cet utilitaire sera utile pour demander un certificat SSL par la suite.

sudo apt install python3 python3-venv libaugeas0
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-nginx
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot

Mise en place de Nextcloud

Nous pouvons alors commencer à construire nos briques logicielles. Nextcloud va nous permettre de gérer pour nous le drive, les calendriers, rappels, notes, contacts ou toutes autres extensions accessibles depuis leur large catalogue.

La procédure que nous allons suivre pour déployer Nextcloud sur notre VPS est similaire à celle que nous allons effectuer pour les autres applications. (Vous vous référerez donc à cette partie aussi pour la suite en remplaçant les bonnes valeurs). En résumé, elle consiste en 4 étapes :

  • Installer l’application sur le VPS grâce à Docker.
  • Ajouter une redirection CNAME depuis le dashboard du nom de domaine.
  • Utiliser Nginx comme un reverse proxy pour pouvoir connecter votre app en local sur votre VPS au reste d’internet.
  • Utiliser certbot pour demander un certificat SSL pour votre sous-domaine nouvellement crée.

Créez un dossier pour Nextcloud

mkdir nextcloud

Dans ce dossier :

touch docker-compose.yml

Dans ce fichier copiez-collez le résultat ci-dessous EN VOUS ASSURANT de mettre de bons mots de passe à la place des “XXXXXXXXXXX”.

version: '2.3'

volumes:
  nextcloud: {}
  db: {}

services:
  db:
    image: mariadb
    container_name: nextcloud_db
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=XXXXXXXXXXX
      - MYSQL_PASSWORD=XXXXXXXXXXX
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    networks:
      - nextcloud

  nextcloud:
    image: nextcloud
    container_name: nextcloud_app
    restart: always
    ports:
      - 8003:80
    links:
      - db
    volumes:
      - ./nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=XXXXXXXXXXX
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
    networks:
      - nextcloud

networks:
  nextcloud:
    name: nextcloud

Puis, toujours dans le dossier Nextcloud, faites :

docker compose up

Si vous faites la commande ci-dessous, vous devriez voir votre conteneur en fonctionnement.

docker ps -a

Vous pouvez aussi faire un curl (toujours depuis votre terminal connecté en ssh au serveur) pour vous assurer que vous recevez bien la page HTML d’accueil de Nextcloud.

curl localhost:8003

Votre Nextcloud est maintenant instancié !

Il s’agit dorénavant de le connecter à internet.

Pour cela commencez par rajouter une direction CNAME depuis le tableau de bord de votre nom de domaine chez OVH en choisissant par exemple drive.doe.com (en prenant doe.com comme nom de domaine). C’est-à-dire que votre nextcloud sera accessible en tapant drive.doe.com dans votre navigateur.

Faisons maintenant le pont entre l’application nextcloud en local et le CNAME.

Dirigeons-nous dans le dossier des fichiers de configuration des applications que l’on veut exposer.

cd /etc/nginx/sites-available/

Créons celui de nextcloud.

touch nextcloud

Copiez-collez le texte ci-dessous dans ce fichier.

server {

       location / {
               proxy_set_header Host $host;
               proxy_pass <http://localhost:8003>;
       }

       server_name drive.doe.com;

       listen 80;
       listen [::]:80;

}

Puis il est nécessaire de créer un lien symbolique de ce fichier vers le dossier “sites-enabled” :

cd /etc/nginx/sites-enabled/
sudo ln -s ../sites-available/nextcloud .

Si vous tapez le code ci-dessous le lien symbolique doit apparaître :

ls -l

Vous devriez être capable de visualiser la page d’accueil de Nextcloud en allant sur la bonne url depuis votre navigateur (ex : drive.doe.com).

Il s’agit maintenant d’ajouter un certificat SSL à votre nom de domaine.

Pour cela c’est très simple : depuis votre terminal connecté en ssh à votre VPS.

sudo certbot --nginx -d drive.doe.com

Suivez les instructions (notamment quand c’est la première fois que vous l’utilisez).

Et voilà ! Vous pouvez dorénavant vous créer un compte sur votre Nextcloud.

Vous avez dès lors accès à votre drive. Vous pouvez aussi installer Nextcloud Desktop pour l’avoir directement dans votre explorateur de fichier.

Vous pouvez aussi ajouter les extensions que vous souhaitez depuis le store de votre Nextcloud.

Dans la documentation vous trouverez comment synchroniser le calendrier à votre smartphone. Ceci est aussi possible pour les contacts, notes ou rappels.

Bitwarden

Pour votre gestionnaire de mot de passe je vous recommande Bitwarden. C’est la référence dans l’open-source.

Les étapes d’installations sont les mêmes que pour Nextcloud ci-dessus. Je vous donne ci-après le fichier de configuration du docker-compose.yml.

Assurez-vous de mettre le bon port (unique) et de bien le reporter dans le fichier de config nginx.

version: '3'

services:
  bitwarden:
    image: bitwardenrs/server
    container_name: bitwarden
    restart: always
    ports:
      - 8002:80
    volumes:
      - ./bw-data:/data
    environment:
      WEBSOCKET_ENABLED: 'true' # Required to use websockets
      SIGNUPS_ALLOWED: 'true'   # set to false to disable signups

Mails

Pour les mails, il y a deux façons d’opérer.

Si vous êtes chez OVH vous pouvez prendre l’offre MX Plan associé à votre nom de domaine pour seulement 6€ à vie. Il s’agit, je pense, de la meilleure chose à faire.

Si vous souhaitez quand même déployer votre propre serveur mail je vous conseille MailServer. Je l’ai utilisé suffisamment longtemps pour pouvoir vous le conseiller. Il y a aussi MailInABox qui a l’air pas mal, mais je n’ai jamais essayé.

Conclusion

De par la maturité des technologies numériques et surtout de l’open source, la mise en place de son cloud souverain est très abordable. Cela requiert un certain nombre de compétences. Mais si vous ne les avez pas, contactez-nous. Nous vous aiderons avec plaisir.

Sources: