Création d'un service de cloud personnel avec Nextcloud
Cette documentation est basée sur les articles suivants :
- https://docs.nextcloud.com/server/latest/admin_manual/
- https://www.collaboraoffice.com/code/linux-packages/
- https://sdk.collaboraonline.com/docs/installation
Si comme moi, vous préférez héberger votre propre cloud personnel plutôt 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 12. La partie téléphone mobile se fera sur Android 12. 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 127.0.0.1 office.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 nftables
Autoriser le trafic vers le serveur Apache et en loopback en modifiant le fichier /etc/nftables.conf. Adapter selon les autres services déjà installés :
#!/usr/sbin/nft -f flush ruleset table inet tableinet { chain input { type filter hook input priority filter; policy drop; iifname lo accept tcp dport 80 accept tcp dport 443 accept ct state {established,related} accept } chain forward { type filter hook forward priority filter; } chain output { type filter hook output priority filter; } }
Activer et redémarrer nftables :
systemctl enable nftables.service systemctl restart nftables.service
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 mkdir /var/www/html/office
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>
Créer le fichier de configuration /etc/apache2/sites-available/office.conf :
<VirtualHost *:80> ServerAdmin antoine@example.com ServerName office.example.com DocumentRoot /var/www/html/office AllowEncodedSlashes NoDecode SSLProxyEngine On ProxyPreserveHost On SSLProxyVerify None SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off ProxyPass /browser https://127.0.0.1:9980/browser retry=0 ProxyPassReverse /browser https://127.0.0.1:9980/browser ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery ProxyPass /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0 ProxyPassReverse /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities ProxyPassMatch "/cool/(.*)/ws$" wss://127.0.0.1:9980/cool/$1/ws nocanon ProxyPass /cool/adminws wss://127.0.0.1:9980/cool/adminws ProxyPass /cool https://127.0.0.1:9980/cool ProxyPassReverse /cool https://127.0.0.1:9980/cool ProxyPass /lool https://127.0.0.1:9980/cool ProxyPassReverse /lool https://127.0.0.1:9980/cool <Directory /var/www/html/office> Options -Indexes +FollowSymLinks +MultiViews -Includes -ExecCGI AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
Activer la configuration et les modules nécessaires :
a2ensite nextcloud.conf a2ensite office.conf a2enmod headers a2enmod env a2enmod rewrite a2enmod dir a2enmod mime a2enmod proxy a2enmod proxy_http a2enmod proxy_connect a2enmod proxy_wstunnel
Modifier les lignes suivantes dans le fichier /etc/php/8.2/apache2/php.ini :
memory_limit = 512M opcache.interned_strings_buffer = 32
Ajouter la ligne suivante au fichier /etc/php/8.2/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 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.
Installation de la suite bureautique
L'outil Collabora Online permet de créer et de modifier des documents LibreOffice directement depuis l'interface Web de Nextcloud.
Télécharger la clef publique du dépôt :
cd /usr/share/keyrings wget https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg
Ajouter le dépôt pour Debian 11 dans le fichier /etc/apt/sources.list.d/collaboraonline.sources
:
Types: deb URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian11 Suites: ./ Signed-By: /usr/share/keyrings/collaboraonline-release-keyring.gpg
Mettre à jour le catalogue des paquets et installer la suite bureautique :
apt update apt install coolwsd code-brand
Configurer le nom de domaine et ajouter l'adresse IPv6 du serveur parmi les hôtes acceptés dans le fichier /etc/coolwsd/coolwsd.xml
:
<server_name desc="External hostname:port of the server running coolwsd. If empty, it's derived from the request (please set it if this doesn't work). May be specified when behind a reverse-proxy or when the hostname is not reachable directly." type="string" default="">office.example.com</server_name> <net desc="Network settings"> <post_allow desc="Allow/deny client IP address for POST(REST)." allow="true"> <host desc="Local server">XXXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX</host> </post_allow> </net>
Créer le certificat autosigné chiffrant la liaison entre Nextcloud et la suite bureautique :
mkdir -p /opt/ssl/ cd /opt/ssl/ mkdir -p certs/ca openssl genrsa -out certs/ca/root.key.pem 4096 openssl req -x509 -new -nodes -key certs/ca/root.key.pem -out certs/ca/root.crt.pem -subj "/C=FR/ST=FR/L=Troyes/O=Cloud Example/CN=Cloud Example" mkdir -p certs/{servers,tmp} mkdir -p "certs/servers/office.example.com" openssl genrsa -out "certs/servers/office.example.com/privkey.pem" 4096 openssl req -key "certs/servers/office.example.com/privkey.pem" -new -sha256 -out "certs/tmp/office.example.com.csr.pem" -subj "/C=FR/ST=FR/L=Troyes/O=Cloud Example/CN=office.example.com" openssl x509 -req -in certs/tmp/office.example.com.csr.pem -CA certs/ca/root.crt.pem -CAkey certs/ca/root.key.pem -CAcreateserial -out certs/servers/office.example.com/cert.pem mv certs/servers/office.example.com/privkey.pem /etc/coolwsd/key.pem mv certs/servers/office.example.com/cert.pem /etc/coolwsd/cert.pem mv certs/ca/root.crt.pem /etc/coolwsd/ca-chain.cert.pem
Configurer Nextcloud pour utiliser le serveur bureautique. Pour cela, aller sur https://cloud.example.com/settings/apps/office/richdocuments
et installer le module. Une fois ceci fait, aller sur https://cloud.example.com/settings/admin/richdocuments
et renseigner les champs comme suit :
- Type de serveur
- Utiliser votre propre serveur
- URL (et port) du serveur Collabora Online
https://office.example.com
Sauvegarder et vérifier le bon fonctionnement du service.
Configuration de Thunderbird
Nous allons configurer Thunderbird afin qu'il utilise notre Nextcloud comme serveur de carnet d'adresses (CardDAV) et agenda (CalDAV).
Sur Nextcloud, il est recommandé d'utiliser un mot de passe d'application. Cela est nécessaire si vous activez l'authentification à deux facteurs (2FA). Pour en générer un, rendez-vous sur la page https://cloud.example.com/settings/user/security
et générer un mot de passe dans la rubrique Appareils & sessions.
Synchroniser les carnets d'adresses
Pour synchroniser les carnets d'adresses, se rendre dans l'onglet "Contacts" de Thunderbird puis ouvrir le menu "Nouveau carnet d'adresses" et sélectionner "Ajouter un carnet d'adresses CardDAV" :
Remplir les champs comme suit :
- Nom d'utilisateur
- Votre nom d'utilisateur Nextcloud
- Adresse du serveur CalDAV
https://cloud.example.com/
Saisir votre mot de passe d'application et sélectionner les carnets d'adresses à synchroniser. Valider.
Synchroniser les agendas et les listes de tâches
Rendez-vous dans l'onglet "Agenda" de Thunderbird et cliquer sur "Nouvel agenda …". Cochez "Sur le réseau" et valider. Compléter les champs comme suit :
- Nom d'utilisateur
- Votre nom d'utilisateur Nextcloud
- Adresse du serveur CalDAV
https://cloud.example.com/
- Cette adresse ne demande pas d'identifiants de connexion
- Décocher
Cliquer sur "Rechercher les agendas". Saisir votre mot de passe d'application et sélectionner les agendas à synchroniser. Valider.
Configuration d'un téléphone mobile Android
Installer les applications suivantes, dans cet ordre, sur le téléphone :
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ètres → Envoi automatique.
Lancer ensuite DAVx⁵ et paramétrer comme suit :
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.