NextCloud
LXC Ubuntu 20.04
Installation Serveur
# apt update && apt upgrade
Archive NextCloud
# apt install unzip # cd /tmp/ # wget https://download.nextcloud.com/server/releases/nextcloud-21.0.1.zip # unzip nextcloud-21.0.1.zip -d /var/www/ # rm nextcloud-21.0.1.zip # chown -R www-data. /var/www/nextcloud
Serveur SQL MariarDB
Installation :
# apt install mariadb-server
On lance le script pour attribuer un mot de passe root, virer l'utilisateur anonyme etc.
# mysql_secure_installation
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y ... Success!
On créé la base de donnée pour NextCloud :
# mysql -U
MariaDB [(none)]> create database nextcloud; MariaDB [(none)]> create user nextcloud@localhost identified by 'motdepasse'; MariaDB [(none)]> grant all privileges on nextcloud.* to nextcloud@localhost IDENTIFIED BY 'motdepasse'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit;
Installation de Apache2 & PHP7.4
# apt install imagemagick php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp
On créé le vhost local :
# vi /etc/apache2/sites-available/nextcloud.conf
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
On active le site :
# a2ensite nextcloud.conf
On active quelques modules :
# a2enmod rewrite # a2enmod headers # a2enmod env # a2enmod dir # a2enmod mime
On active SSL :
# a2enmod ssl # a2ensite default-ssl # systemctl reload apache2
Configuration de NextCloud
On se rend sur l'adresse https://IP_NEXCLOUD/nextcloud/ et on rempli les champs indiqués puis ont clique sur "Terminer l'installation".
Si message d'erreur pas de panique, on retourne sur https://IP_NEXCLOUD/nextcloud/ pour vérifier que tout s'est bien déroulé.
Configuration Reverse-Proxy NGINX
VHost NextCloud
Exemple de vhost pour NextCloud :
server {
listen 80;
listen [::]:80;
server_name nextcloud.exemple.com;
# return 404;
return 301 https://$host$request_uri;
}
server {
server_name nextcloud.exemple.com;
error_page 403 https://nextcloud.exemple.com;
location / {
client_max_body_size 0; # 0 supprime la limite d'upload
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_pass https://IP_SERVEUR_NEXTCLOUD/nextcloud/;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/nextcloud.exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nextcloud.exemple.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
ssl_trusted_certificate /etc/letsencrypt/live/nextcloud.exemple.com/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
location ^~ /.well-known {
# The following 6 rules are borrowed from `.htaccess`
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
# Anything else is dynamically handled by Nextcloud
location ^~ /.well-known { return 301 /index.php$uri; }
try_files $uri $uri/ =404;
}
}
Configuration de Nextcloud
On modifie le fichier de configuration de NextCloud pour qu'il accepte le nom de domaine et le reverse proxy :
NextCloud ~# vi /var/www/nextcloud/config/config.php
...
'trusted_domains' =>
array (
0 => '12.34.56.789',
1 => 'nextcloud.exemple.com',
),
'trusted_proxies' =>
array (
0 => 'IP_PROXY',
),
'overwritewebroot' => '/',
...
Post-Installation
NextCloud est maintenant fonctionnel, mais si vous vous rendez, depuis la page de l'administrateur, sur Administrateur -> Paramètres -> Vue d'ensemble .
Il reste quelques réglages à effectués. (3 si vous avez suivie ce tutorial).
(optionnel) Jolie URL
# vi /var/www/nextcloud/config/config.php
... 'installed' => true, 'overwrite.cli.url' => 'https://nextcloud.exemple.com/nextcloud', 'htaccess.RewriteBase' => '/nextcloud', );
# cd /var/www/nextcloud/ # sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess
Limite de mémoire PHP à 512 Mo
# vi /etc/php/7.4/apache2/php.ini
... memory_limit = 512M ...
# apache2ctl graceful
Préfixe de région par défaut
# vi /var/www/nextcloud/config/config.php
... 'htaccess.RewriteBase' => '/nextcloud', 'default_phone_region' => 'FR', );
Langue par défaut
# vi /var/www/nextcloud/config/config.php
... 'default_phone_region' => 'FR', 'default_language' => 'fr', ...
Memcache via Redis & APCu
# apt install redis-server php-redis php-apcu # vi /etc/redis/redis.conf
Il faut activer les deux ligne suivantes en supprimant le "#" devant + modification des droits :
unixsocket /var/run/redis/redis-server.sock unixsocketperm 770
On désactive l'écoute TCP :
port 0
# usermod -a -G redis www-data # systemctl restart redis # systemctl restart apache2
Enfin, on édite Nextcloud pour utiliser Redis :
# vi /var/www/nextcloud/config/config.php
...
'default_phone_region' => 'FR',
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 1.5,
),
);
Il faut activer APCu dans "cli" pour éviter un bug avec certaines commandes :
# vi /etc/php/7.4/cli/conf.d/20-apcu.ini
extension=apcu.so apc.enable_cli=1
Optimisation performances (proxy_fcgi & php-fpm)
Pour de meilleurs performances on active php-fpm et proxy_fcgi
# a2enmod proxy_fcgi setenvif # a2enconf php7.4-fpm # systemctl reload apache2
Test final
On retoune dans le menu "Vue d'ensemble", normalement tous les tests devraient être validés :
Comme suggéré on se rend sur ce site pour tester le niveau de sécurité de notre serveur NextCloud, si tout va bien vous devriez obtenir ceci :
Crontab
# vi /etc/systemd/system/nextcloudcron.service
[Unit] Description=Nextcloud cron.php job [Service] User=www-data ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php KillMode=process
Puis
# vi /etc/systemd/system/nextcloudcron.timer
[Unit] Description=Run Nextcloud cron.php every 5 minutes [Timer] OnBootSec=5min OnUnitActiveSec=5min Unit=nextcloudcron.service [Install] WantedBy=timers.target
On active les scripts :
# systemctl enable --now nextcloudcron.timer
On peut ensuite se rendre dans "Paramètres" -> "Paramètres de base" pour vérifier que le changement est prise en compte :
datadirectory
Variable nécessaire pour certaines applications comme RainLoop :
# vi /var/www/nextcloud/config/config.php
... 'overwritewebroot' => '/', 'datadirectory' => '/var/www/nextcloud/data', 'dbtype' => 'mysql', ...
Désactiver le découpage des 10Mb
Par default NextCloud découpe les téléchargement en portion de 10Mb, ce qui peut grandement ralentir les envoies de fichier imposant, pour le désactiver :
# cd /var/www/nextcloud/ # sudo -u www-data php occ config:app:set files max_chunk_size --value 0
Désactivé les "espaces de travails riches"
Une fonction que je n'ai jamais utilisé, crée des fichier "readme.md" et des messages d'érreurs.. a voir.
# cd /var/www/nextcloud/ # sudo -u www-data php occ config:app:set text workspace_available --value=0
Mail Serveur
Il est important de configurer un serveur d'envoi courriel pour le serveur, il permettra d'utiliser la fonction récupération de mot de passe etc :
Astuces de personnalisation
Fichiers par défaut
Lorsque l'on créé un nouvel utilisateur, Nextcloud peuplera le nouveau dossier personnel avec le contenu de "/var/www/nextcloud/core/skeleton". Par défaut tous les utilisateurs se retrouveront donc avec diverse images et fichiers d'exemple sans intérêt.
Désativation du modèle de création
# vi /var/www/nextcloud/config/config.php
... 'default_phone_region' => 'FR', 'skeletondirectory' => '', 'memcache.locking' => '\OC\Memcache\Redis', ...
Modèle de création personnalisé
Création du dossier pour le modèle :
# mkdir /var/www/nextcloud/mon_model
Ensuite on peut créer/copier les dossiers/fichiers que l'on souhaite à l'intérieur. Puis l'on attribue les droits au dossier et son contenu :
# chown -R www-data. /var/www/nextcloud/mon_model
Enfin, on active le nouveau dossier :
# vi /var/www/nextcloud/config/config.php
... 'default_phone_region' => 'FR', 'skeletondirectory' => '/var/www/nextcloud/mon_model', 'memcache.locking' => '\OC\Memcache\Redis', ...
Application
Les applications s'installent via la GUI de l'administrateur :
Certaines demandent cependant des interventions supplémentaires.
Antivirus ClamAV
Installation
Il faut simplement installer l'antivirus sur le serveur :
# apt-get install clamav clamav-daemon
Puis installer "Antivirus for files" depuis la GUI de l'administrateur. Voila!
Configuration
Support de Stockages Externes
Il faut activer "External storage support" via la GUI de l'administrateur. Un nouveau menu "Stockages Externes" apparaitra dans la console d'administration de l'administrateur.
Partages CIFS/Samba
Par défaut les partages dit de types Windows ne sont pas disponible, il suffit d'installer les paquets suivants :
# apt install smbclient libsmbclient
Collabora Online
Client
On installe l'application "Collabora Online" via la GUI de l'administrateur.
Serveur
On active le dépôt de Collabora :
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D # echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu2004 ./' >> /etc/apt/sources.list
On installe le serveur de base :
# apt update && apt upgrade # apt install loolwsd code-brand
On installe les modules de langue désirés (ici français, espagnol et anglais)
# apt install collaboraofficebasis6.4-fr collaboraofficebasis6.4-es collaboraofficebasis6.4-en-gb collaboraofficebasis6.4-en-us
On désactive la prise en charge du certificat SSL en local et on l'active pour le proxy :
# loolconfig set ssl.enable false # loolconfig set ssl.termination true
On autorise notre serveur à se connecter :
# loolconfig set storage.wopi.host nextcloud.example.com
On redémarre le serveur Collabora pour activer les changements :
# systemctl restart loolwsd
Reverse-Proxy
Exemple de VHost pour le reverse proxy :
server {
server_name collabora.exemple.com;
error_log /var/log/nginx/collabora.error;
# static files
location ^~ /loleaflet {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/lool/(.*)/ws$ {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
location ~ ^/lool {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /lool/adminws {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/collabora.exemple.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/collabora.exemple.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
add_header Strict-Transport-Security "max-age=31536000" always; # managed by Certbot
ssl_trusted_certificate /etc/letsencrypt/live/collabora.exemple.com/chain.pem; # managed by Certbot
ssl_stapling on; # managed by Certbot
ssl_stapling_verify on; # managed by Certbot
}
server {
if ($host = collabora.exemple.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name collabora.exemple.com;
error_log /var/log/nginx/collabora.error;
# static files
location ^~ /loleaflet {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/lool/(.*)/ws$ {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
location ~ ^/lool {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /lool/adminws {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
}
Liaison Client/Serveur
On se rend dans le menu "Collabora Online" du menu d'administration de l'admin :
Webmail RainLoop intégré
Installation et configuration
On installe l'application "RainLopp" via la GUI de l'administrateur puis on se rend dans le menu "Paramètres" -> "Administration" -> "Paramètres supplémentaires" et on clique sur "Accédez à la page d'administration de RainLoop"
Il faut se connecter avec l'utilisateur "admin" et le mot de passe par défaut "12345"
Activation de la fonction "Contacts"
Création de la base de données
# mysql -U
MariaDB [(none)]> create database rainloop; MariaDB [(none)]> create user rainloop@localhost identified by 'motdepasse'; MariaDB [(none)]> grant all privileges on rainloop.* to rainloop@localhost IDENTIFIED BY 'motdepasse'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit;
Activation (GUI)
Depuis le menu "Contacts" de la page d'administration de Rainloop :
Ajouter un domaine
Par défaut seul les comptes mails du domaine "gmail.com" sont autorisés à être enregistrés par les utilisateurs, il faut passer par le menu "domaines" de page d'administration de Rainloop pour en ajouter :
Quelques Exemples
Domaine laposte.net
Domaine yahoo.fr
Domaine Office365
Connexion automatique de l'utilisateur
Il est possible de connecter automatiquement une boite mail afin que l'utilisateur n'ai pas à rentrer de nouveau ses identifiants courriel une fois déjà connecté à NextCloud. Il suffit de se rendre, depuis le compte utilisateur idoine, dans le menu "Paramètres" -> "Paramètres supplémentaires" -> "Webmail Rainloop"
Connexion compte Google protégé
Il n'y a pas de réel module de connexion OAuth 2 avec RainLoop, pas la peine de configurer l'intégration à Google il vous faudrait de toutes façons activés les connexions "moins sécurisées". Il est donc fortement conseillé de passer par les mots de passe d'application.
Application "Maps" (Cartes)
The "unique" column option is not supported
Au moment ou ce guide est rédigé, l'application "Maps" refuse de s'activer avec le message The "unique" column option is not supported. Il faut donc appliquer ce patch
(Il faut supprimer les lignes en rouge et ajouter les lignes en verte)
Les fichiers sont, dans l'ordre, les suivants :
/var/www/nextcloud/apps/maps/lib/Migration/Version000009Date20190625000800.php
/var/www/nextcloud/apps/maps/lib/Migration/Version000012Date20190722184716.php
/var/www/nextcloud/apps/maps/lib/Migration/Version000013Date20190723185417.php
Application "Face Recognition" (Reconnaissance Facial)
Dépendance
Pour résourdre l'erreur "App "Face Recognition" cannot be installed because the following dependencies are not fulfilled: The library pdlib is not available."
# echo "deb https://repo.delellis.com.ar focal focal" > /etc/apt/sources.list.d/20-pdlib.list # wget -qO - https://repo.delellis.com.ar/repo.gpg.key | sudo apt-key add - # apt update # apt install php7.4-pdlib
On corrige un bug..
# rm /etc/php/7.4/apache2/conf.d/20-pdlib.ini # ln -s /etc/php/7.4/mods-available/20-pdlib.ini /etc/php/7.4/apache2/conf.d/20-pdlib.ini # apache2ctl restart
Configuration et installation du modèle de reconnaissance (Models)
Source models Source mémoire PHP Source commandes
Nous allons installer et activer le modèle de détection le plus précis, le modèle 4 (nécessite l'installation du modèle 1 & 3).
Il faut tout d'abord augmenter la limite de mémoire PHP (min 1G/max 4g) :
# vi /etc/php/7.4/apache2/php.ini
... memory_limit = 2048M ...
# apachectl graceful
Puis on installe les modèles (le dernier installé sera activé) :
# cd /var/www/nextcloud/ # sudo -u www-data php occ face:setup --model 1 # sudo -u www-data php occ face:setup --model 3 # sudo -u www-data php occ face:setup --model 4
Vérification et configuration de l'application
On se rend avec le compte "admin" dans le menu "Paramètres" -> "Administration" -> "Reconnaissance faciale" pour vérifier que la pastille est verte et modifier la configuration si nécessaire..
Application "Intégration Google"
Après avoir installer l'application via le menu de l'administrateur et créé un Projet Cloud Google, il faudra inscrire votre site Nextcloud sur le projet puis importer les identifiants via l'utilisateur "admin" dans "Paramètres" -> "Administration" -> "Comptes connextés"
Côté Google
Côté NextCloud
Import Google
Depuis l'utilisateur idoine on se rend dans le menu "Paramètres" -> "Migration de données" et on clique simplement sur "Se connecter à Google"