alts/altLogo

Comment construire son cloud souverain sans passer par les GAFAM ?

alts/postPic

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: