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.