Création d'un service de cloud personnel avec Nextcloud

Si comme moi vous préférez héberger votre propre cloud personnel plutot que de faire appel à des services tels que Google Drive ou Microsoft OneDrive, je vous propose dans cet article d'installer une solution Nextcloud sur votre serveur. Nous verrons également comment synchroniser vos agendas et carnets d'adresses avec vos différents équipements.

Notre serveur utilisera Debian 11. La partie téléphone mobile se fera sur Android 9. Le serveur sera accessible via l'URL https://cloud.example.com.

Installation du serveur Nextcloud

Ajouter la ligne suivante au fichier /etc/hosts :

127.0.0.1   cloud.example.com

Installer le serveur Web et le serveur de base de données :

apt -y install apache2 mariadb-server php libapache2-mod-php php-curl php-gd php-json php-mbstring php-xml php-zip php-mysql php-bz2 php-intl php-apcu php-bcmath php-gmp php-imagick imagemagick

Modifier les lignes suivantes dans le fichier /etc/apache2/conf-enabled/security.conf :

ServerTokens Prod
ServerSignature Off
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Télécharger et installer le serveur Nextcloud :

wget -O /tmp/nextcloud.tar.bz2 https://download.nextcloud.com/server/releases/latest.tar.bz2
cd /var/www/html
tar xjvf /tmp/nextcloud.tar.bz2
chown -R www-data:www-data /var/www/html/nextcloud

Créer le fichier de configuration /etc/apache2/sites-available/nextcloud.conf :

<VirtualHost *:80>
	DocumentRoot /var/www/html/nextcloud/
	ServerName cloud.example.com

	<Directory /var/www/html/nextcloud/>
		Require all granted
		AllowOverride All
		Options FollowSymLinks MultiViews

		<IfModule mod_dav.c>
			Dav off
		</IfModule>
		
		<IfModule mod_headers.c>
			Header always set Referrer-Policy "strict-origin"
			Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
		</IfModule>
	</Directory>
</VirtualHost>

Activer la configuration et les modules nécessaires :

a2ensite nextcloud.conf
a2enmod headers
a2enmod env
a2enmod rewrite
a2enmod dir
a2enmod mime

Modifier les lignes suivantes dans le fichier /etc/php/7.4/apache2/php.ini :

memory_limit = 512M

Ajouter la ligne suivante au fichier /etc/php/7.4/cli/php.ini :

apc.enable_cli = 1

Redémarrer Apache :

service apache2 restart

Nous allons créer la base de données. Pour cela, exécuter la commande suivante pour lancer un terminal SQL :

mysql -u root

Créer la base de données en modifiant son mot de passe :

CREATE DATABASE nextcloud;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'MonMotDePasseBaseDeDonnees';
GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost';
EXIT;

Finaliser l'installation du serveur Nextcloud. Pour cela, aller sur sur http://cloud.example.com à l'aide de votre navigateur Web et compléter les champs comme suit :

Créer un compte administrateur
Saisir un identifiant et un mot de passe
Répertoire des données
/var/www/html/nextcloud/data
Utilisateur de la base de données
nextcloud
Mot de passe de la base de données
Le mot de passe de la base de données
Nom de la base de données
nextcloud
Hôte de la base de données
localhost
Installer les applications recommandées
Oui

Pour raccourcir les URL de partage, ajouter les deux lignes suivantes au fichier /var/www/html/nextcloud/config/config.php avant la parenthèse fermante :

'overwrite.cli.url' => 'http://cloud.example.com/',
'htaccess.RewriteBase' => '/',

Puis, exécuter la commande suivante :

sudo -u www-data php /var/www/html/nextcloud/occ maintenance:update:htaccess

Ajouter l'indicatif régional et le cache mémoire dans le fichier /var/www/html/nextcloud/config/config.php avant la parenthèse fermante :

'default_language' => 'fr_FR',
'default_phone_region' => 'FR',
'memcache.local' => '\OC\Memcache\APCu',

Nous allons modifier la configuration des tâches de fond. Pour cela, aller sur http://cloud.example.com/settings/admin et cocher Cron.

Éditer la crontab de www-data :

crontab -u www-data -e

Ajouter la ligne suivante et sauvegarder :

*/5 * * * * php -f /var/www/html/nextcloud/cron.php

Toujours sur la page http://cloud.example.com/settings/admin, à la rubrique Serveur e-mail, paramétrer un compte courriel. Vous pouvez utiliser n'importe quel compte courriel ou créer votre propre serveur courriel.

Création du certificat SSL par Let's Encrypt

Si vous n'avez pas encore de certificat SSL, vous pouvez utiliser les certificats SSL gratuits fournis par Let's Encrypt. C'est ce que nous allons détailler ici.

Installer certbot :

apt install certbot python3-certbot-apache

Lancer certbot et suivre les instructions :

certbot --redirect --apache

Activer le renouvellement automatique du certificat en éditant la crontab de root :

crontab -e

Ajouter la ligne suivante (ici, la commande est exécutée tous les dimanches à 3 heures du matin) :

0 3 * * 0 certbot renew

L'outil certbot a modifié les configurations Apache de sorte que toute requête en HTTP soit redirigée vers HTTPS. Nous devons alors modifier la configuration de Nextcloud pour que ce changement soit pris en compte.

Modifier le fichier /var/www/html/nextcloud/config/config.php comme suit :

'overwrite.cli.url' => 'https://cloud.example.com/',

Vous pouvez dès à présent installer et configurer le client Nextcloud sur votre ordinateur.

Configuration de Thunderbird

Nous allons configurer Thunderbird afin qu'il utilise notre Nextcloud comme serveur de carnet d'adresses (CardDAV) et agenda (CalDAV). Pour cela, nous allons installer les extensions suivantes :

Pour paramétrer le compte, ouvrir ÉditionParamètres de synchronisation (TbSync), puis ajouter un compte CardDav/CalDAV :

Configuration du compte CardDAV / CalDAV

Sélectionner Configuration manuelle, puis remplir les champs comme suit :

Nom du compte
Un nom de votre choix (exemple: Cloud perso)
Nom d'utilisateur
Votre nom d'utilisateur Nextcloud
Mot de passe
Votre mot de passe Nextcloud
Adresse du serveur CalDAV
https://cloud.example.com/remote.php/dav
Adresse du serveur CardDAV
https://cloud.example.com/remote.php/dav

Valider, puis une fois la configuration effectuée, cocher Activer et synchroniser ce compte. Cocher ensuite les éléments à synchroniser et définir une synchronisation périodique (pour ma part, je la définis à 10 minutes) :

Configuration du compte CardDAV / CalDAV

Configuration d'un téléphone mobile Android

Installer les applications suivantes, dans cet ordre, sur le téléphone :

  1. Nextcloud
  2. OpenTasks
  3. Open Sync

Connecter l'application Nextcloud au serveur en suivant les instructions à l'écran. Il est possible de configurer l'envoi automatique des photos et vidéos prises vers le cloud dans les options ParamètresEnvoi automatique.

Lancer ensuite OpenSync et paramétrer comme suit :

Capture d'écran d'OpenSync Capture d'écran d'OpenSync Capture d'écran d'OpenSync
Captures d'écran d'OpenSync

Selon le modèle de votre appareil, il peut être nécessaire de modifier les paramètres de gestion de batterie afin de permettre la synchronisation en arrière-plan.