« NextCloud » : différence entre les versions
| (377 versions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 4 : | Ligne 4 : | ||
# apt update && apt upgrade | # apt update && apt upgrade | ||
=== Archive NextCloud === | |||
[https://nextcloud.com/install/#instructions-server '''Page de téléchargement'''] | |||
# apt install unzip | |||
# cd /tmp/ | |||
# wget <nowiki>https://</nowiki>download.nextcloud.com/server/releases/latest.zip | |||
# unzip latest.zip -d /var/www/ | |||
# rm latest.zip | |||
# chown -R www-data. /var/www/nextcloud | |||
=== Serveur SQL MariarDB === | === Serveur SQL MariarDB === | ||
| Ligne 22 : | Ligne 30 : | ||
... Success! | ... Success! | ||
On | On créé la base de donnée pour NextCloud : | ||
{{Méta bandeau | {{Méta bandeau | ||
| niveau = information | | niveau = information | ||
| icône = important | | icône = important | ||
| texte = Utiliser un mot de passe différent de root | | texte = Utiliser un mot de passe différent de "root". | ||
}} | }} | ||
# mysql -u root -p | |||
MariaDB [(none)]> create database <font color=grey>nextcloud</font>; | |||
MariaDB [(none)]> create user <font color=green>nextcloud</font>@localhost identified by '<font color=blue>motdepasse</font>'; | |||
MariaDB [(none)]> grant all privileges on <font color=grey>nextcloud</font>.* to <font color=green>nextcloud</font>@localhost IDENTIFIED BY '<font color=blue>motdepasse</font>'; | |||
MariaDB [(none)]> flush privileges; | |||
MariaDB [(none)]> quit; | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = <font color=grey>nom de la base de données</font> / <font color=green>nom de l'utilisateur de la base de données</font> | |||
}} | |||
=== Installation de Apache2 & PHP7.4 === | |||
# apt install imagemagick php-imagick php7.4 libapache2-mod-php7.4 php7.4-common php7.4-mysql 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éé l'alias du site : | |||
# 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 les modules requis : | |||
# a2enmod rewrite headers env dir mime | |||
On active SSL : | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = ici un certificat auto-signé pour ensuite être placé derrière un [[Nginx_ReverseProxy_LXC_Alpine_Linux|reverse-proxy Nginx]]. | |||
}} | |||
# a2enmod ssl | |||
# a2ensite default-ssl | |||
# systemctl reload apache2 | |||
===(Recommandé) On supprime et désactive la page par défaut d'Apache=== | |||
# rm /var/www/html/index.html | |||
# a2dissite 000-default | |||
# systemctl reload apache2 | |||
===(Optionnel) Plus d'écoute sur le port 80=== | |||
Si le serveur n'a aucun autres service sur le port 80 on peut supprimer son écoute : | |||
# vi /etc/apache2/ports.conf | |||
<font color = grey>...</font> | |||
# /etc/apache2/sites-enabled/000-default.conf | |||
<font color = blue>#</font>Listen 80 | |||
<font color = grey>...</font> | |||
# systemctl reload apache2 | |||
=== Configuration de NextCloud === | |||
On se rend sur l'adresse <nowiki>https://</nowiki><font color = blue>IP_NEXCLOUD</font>/nextcloud/ et on rempli les champs indiqués puis ont clique sur "Terminer l'installation". | |||
[[File:Page Installation 2.PNG|Page d'installation NextCloud]] | |||
Si message d'erreur pas de panique, on retourne sur <nowiki>https://</nowiki><font color = blue>IP_NEXCLOUD</font>/nextcloud/ pour vérifier que tout s'est bien déroulé. | |||
[[File:Page 1er acceuil.PNG|Page de première connexion.]] | |||
=== Configuration Reverse-Proxy Nginx === | |||
==== VHost NextCloud ==== | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Voir [[Nginx_ReverseProxy_LXC_Alpine_Linux|Reverse Proxy Nginx]] | |||
}} | |||
Exemple de vhost pour NextCloud : | |||
server { | |||
listen 80; | |||
listen [::]:80; | |||
server_name <font color = blue>nextcloud.exemple.com</font>; | |||
# return 404; | |||
return 301 <nowiki>https</nowiki>://$host$request_uri; | |||
} | |||
server { | |||
server_name <font color = blue>nextcloud.exemple.com</font>; | |||
error_page 403 <nowiki>https</nowiki>://<font color = blue>nextcloud.exemple.com</font>; | |||
location / { | |||
'''client_max_body_size 0;''' # 0 supprime la limite d'upload | |||
proxy_set_header Upgrade $http_upgrade; | |||
proxy_set_header Connection "upgrade"; | |||
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 <nowiki>https</nowiki>://<font color = blue>IP_SERVEUR_NEXTCLOUD</font>/nextcloud/; | |||
proxy_buffering off; | |||
} | |||
listen [::]:443 ssl; # managed by Certbot | |||
listen 443 ssl; # managed by Certbot | |||
ssl_certificate /etc/letsencrypt/live/<font color = blue>nextcloud.exemple.com</font>/fullchain.pem; | |||
ssl_certificate_key /etc/letsencrypt/live/<font color = blue>nextcloud.exemple.com</font>/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/<font color = blue>nextcloud.exemple.com</font>/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 | |||
<font color = grey>...</font> | |||
'trusted_domains' => | |||
array ( | |||
0 => '12.34.56.789', | |||
<font color = blue>1 => '</font><font color = green>nextcloud.exemple.com</font><font color = blue>',</font> | |||
), | |||
<font color = blue>'trusted_proxies' => | |||
array ( | |||
0 => '</font><font color = green>IP_PROXY</font><font color = blue>', | |||
), | |||
'overwritewebroot' => '/',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = NextCloud sera maintenant accessible via <font color = blue>nextcloud.exemple.com</font> et non <font color = blue>IP_SERVEUR_NEXTCLOUD</font>/nextcloud/ | |||
}} | |||
== Post-Installation == | |||
NextCloud est maintenant fonctionnel, mais si vous vous rendez, depuis la page de l'administrateur, sur Administrateur -> Paramètres -> Vue d'ensemble . | |||
[[File:Vue d'ensemble.PNG|border|Accès du menu "Vue d'ensemble"]] | |||
Il reste quelques réglages à effectués. (3 si vous avez suivie ce tutorial). | |||
[[File:Erreur post install.PNG|border|Message d'erreurs post installation]] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = "Vue d'ensemble" est également le menu pour effectuer les mise à jours de NextCloud | |||
}} | |||
=== (optionnel) Jolie URL === | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Ceci ne règle pas d'erreur mais permet d'avoir une URL plus esthétique. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'installed' => true, | |||
<font color = blue>'overwrite.cli.url' => '<nowiki>https</nowiki>://<font color = green>nextcloud.exemple.com</font>/nextcloud', | |||
'htaccess.RewriteBase' => '/nextcloud',</font> | |||
); | |||
# 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 | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/7.4/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
<font color = grey>...</font> | |||
memory_limit = <font color = blue>512</font>M | |||
<font color = grey>...</font> | |||
# apache2ctl graceful | |||
=== Fuseau horaire PHP === | |||
# vi /etc/php/7.4/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/7.4/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
<font color = grey>...</font> | |||
[Date] | |||
; Defines the default timezone used by the date functions | |||
; <nowiki>http://php.net/date.timezone</nowiki> | |||
<font color = blue>date.timezone =</font> <font color = green>Europe/Paris</font> | |||
<font color = grey>...</font> | |||
# vi /etc/php/7.4/cli/php.ini | |||
<font color = grey>...</font> | |||
[Date] | |||
; Defines the default timezone used by the date functions | |||
; <nowiki>http://php.net/date.timezone</nowiki> | |||
<font color = blue>date.timezone =</font> <font color = green>Europe/Paris</font> | |||
<font color = grey>...</font> | |||
# apache2ctl graceful | |||
=== Préfixe de région par défaut === | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Exemple avec la <font color = green>France</font>. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'htaccess.RewriteBase' => '/nextcloud', | |||
<font color = blue>'default_phone_region' => '<font color = green>FR</font>',</font> | |||
); | |||
=== Langue par défaut === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/language_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Exemple avec le <font color = green>français</font>. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_phone_region' => 'FR', | |||
<font color = blue>'default_language' => '<font color = green>fr</font>',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Peut également être forcé avec <font color = blue>'force_language' => '<font color = green>fr</font>',</font> | |||
}} | |||
=== Localisation par défaut === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/language_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Exemple avec la <font color = green>France</font>. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_language' => 'fr', | |||
<font color = blue>'default_locale' => '<font color = green>fr_FR</font>',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Peut également être forcé avec <font color = blue>'force_locale' => '<font color = green>fr_FR</font>',</font> | |||
}} | |||
=== Memcache via Redis & APCu === | |||
[https://bayton.org/docs/nextcloud/installing-nextcloud-on-ubuntu-16-04-lts-with-redis-apcu-ssl-apache/#4-1-update-the-server-install-lamp-apcu-redis source] | |||
# 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 : | |||
<font color = grey>...</font> | |||
unixsocket /var/run/redis/redis-server.sock | |||
unixsocketperm 7<font color = blue>7</font>0 | |||
<font color = grey>...</font> | |||
On désactive l'écoute TCP : | |||
<font color = grey>...</font> | |||
port <font color = blue>0</font> | |||
<font color = grey>...</font> | |||
# usermod -a -G redis www-data | |||
---- | |||
La commande suivante devra s'effectuer sur l'hôte (ProxMox) pour une installation dans un conteneur : | |||
ProxMox:~# vi /etc/sysctl.conf | |||
<font color = grey>...</font> | |||
<font color = blue>vm.overcommit_memory = 1</font> | |||
ProxMox:~# sysctl vm.overcommit_memory=1 | |||
---- | |||
# systemctl restart redis | |||
# systemctl restart apache2 | |||
Enfin, on édite Nextcloud pour utiliser Redis : | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_phone_region' => 'FR', | |||
<font color = blue>'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, | |||
),</font> | |||
); | |||
Il faut activer APCu dans "cli" pour éviter un bug avec certaines commandes : | |||
# vi /etc/php/8.1/cli/conf.d/20-apcu.ini | |||
extension=apcu.so | |||
<font color = blue>apc.enable_cli=1</font> | |||
=== OpCache === | |||
Optimisation de PHP via OpCache. | |||
# vi /etc/php/8.1/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/8.1/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
Dans cet exemple on applique les [https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html paramètres de base recommandés par NextCloud] [https://gist.github.com/rohankhudedev/1a9c0a3c7fb375f295f9fc11aeb116fe autres paramètres] : | |||
<font color = grey>...</font> | |||
[opcache] | |||
<font color = blue>opcache.enable = 1 | |||
opcache.interned_strings_buffer = 64 | |||
opcache.max_accelerated_files = 50000 | |||
opcache.memory_consumption = 512 | |||
opcache.save_comments = 1 | |||
opcache.revalidate_freq = 1</font> | |||
<font color = grey>...</font> | |||
# vi /etc/php/8.1/cli/php.ini | |||
<font color = grey>...</font> | |||
[opcache] | |||
<font color = blue>opcache.enable = 1 | |||
opcache.interned_strings_buffer = 64 | |||
opcache.max_accelerated_files = 50000 | |||
opcache.memory_consumption = 512 | |||
opcache.save_comments = 1 | |||
opcache.revalidate_freq = 1</font> | |||
<font color = grey>...</font> | |||
# apache2ctl graceful | |||
=== Test final === | |||
On retoune dans le menu [[#Post-Installation|"Vue d'ensemble"]], normalement tous les tests devraient être validés : | |||
[[File:Test réussie.PNG|border|Satisfaisant non ? :)]] | |||
Comme suggéré on se rend sur [https://scan.nextcloud.com/ '''ce site'''] pour tester le niveau de sécurité de notre serveur NextCloud, si tout va bien vous devriez obtenir ceci : | |||
[[File:Test sécurité.PNG|border|une note comme j'aurais aimé en avoir à l'école.]] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = En plus du niveau "A+", tout doit être validé avec l'encoche verte, dans "Hardennings" et "Setup", en dessous. | |||
}} | |||
=== Crontab === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Par défaut les tâches de fond sont lancés en naviguant, ce qui n'est pas optimal et incompatible avec certaines applications. il est préférable d'utiliser crontab ou systemd. | |||
}} | |||
# 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 : | |||
[[File:Paramètres de base.PNG|border|C'est par ici]] | |||
[[File:Crontab active.PNG|border| Activation confirmé]] | |||
=== datadirectory === | |||
Variable nécessaire pour certaines applications comme RainLoop, ajouter si manquante : | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'overwritewebroot' => '/', | |||
<font color = blue>'datadirectory' => '/var/www/nextcloud/data',</font> | |||
'dbtype' => 'mysql', | |||
<font color = grey>...</font> | |||
=== 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 : | |||
# sudo -u www-data php /var/www/nextcloud/occ config:app:set files max_chunk_size --value 0 | |||
=== Désactivé les "espaces de travails riches" === | |||
[https://github.com/nextcloud/text/pull/748 Source] | |||
Une fonction que je n'ai jamais utilisé, crée des fichier "readme.md" et des messages d'érreurs.. a voir. | |||
# sudo -u www-data php /var/www/nextcloud/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 : | |||
[[File:NextCloud Email.PNG|border|Menu de configuration du courriel du serveur]] | |||
=== Mises à jour automatiques du serveur === | |||
Voir [[AutoUpdate#Debian_.2F_Ubuntu|la procédure suivante]] | |||
=Ubuntu 22.04= | |||
== Installation Serveur == | |||
[https://docs.nextcloud.com/server/stable/admin_manual/installation/index.html '''Source'''] [https://www.linuxbabe.com/ubuntu/install-nextcloud-ubuntu-20-04-apache-lamp-stack '''autre source'''] | |||
# apt update && apt upgrade | |||
=== Archive NextCloud === | |||
[https://nextcloud.com/install/#instructions-server '''Page de téléchargement'''] | |||
# apt install unzip | |||
# cd /tmp/ | |||
# wget <nowiki>https://</nowiki>download.nextcloud.com/server/releases/latest.zip | |||
# unzip latest.zip -d /var/www/ | |||
# rm latest.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 : | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = important | |||
| texte = Utiliser un mot de passe différent de "root". | |||
}} | |||
# mysql -u root -p | |||
MariaDB [(none)]> create database <font color=grey>nextcloud</font>; | |||
MariaDB [(none)]> create user <font color=green>nextcloud</font>@localhost identified by '<font color=blue>motdepasse</font>'; | |||
MariaDB [(none)]> grant all privileges on <font color=grey>nextcloud</font>.* to <font color=green>nextcloud</font>@localhost IDENTIFIED BY '<font color=blue>motdepasse</font>'; | |||
MariaDB [(none)]> flush privileges; | |||
MariaDB [(none)]> quit; | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = <font color=grey>nom de la base de données</font> / <font color=green>nom de l'utilisateur de la base de données</font> | |||
}} | |||
=== Installation de Apache2 & PHP8.1 === | |||
# apt install imagemagick php-imagick php libapache2-mod-php php-common php-mysql php-gd php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-bcmath php-gmp | |||
On créé l'alias du site : | |||
# 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 les modules requis : | |||
# a2enmod rewrite headers env dir mime | |||
On active SSL : | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = ici un certificat auto-signé pour ensuite être placé derrière un [[Nginx_ReverseProxy_LXC_Alpine_Linux|reverse-proxy Nginx]]. | |||
}} | |||
# a2enmod ssl | |||
# a2ensite default-ssl | |||
# systemctl reload apache2 | |||
===(Recommandé) On supprime et désactive la page par défaut d'Apache=== | |||
# rm /var/www/html/index.html | |||
# a2dissite 000-default | |||
# systemctl reload apache2 | |||
===(Optionnel) Plus d'écoute sur le port 80=== | |||
Si le serveur n'a aucun autres service sur le port 80 on peut supprimer son écoute : | |||
# vi /etc/apache2/ports.conf | |||
<font color = grey>...</font> | |||
# /etc/apache2/sites-enabled/000-default.conf | |||
<font color = blue>#</font>Listen 80 | |||
<font color = grey>...</font> | |||
# systemctl reload apache2 | |||
=== Configuration de NextCloud === | |||
On se rend sur l'adresse <nowiki>https://</nowiki><font color = blue>IP_NEXCLOUD</font>/nextcloud/ et on rempli les champs indiqués puis ont clique sur "Terminer l'installation". | |||
[[File:Page Installation 2.PNG|Page d'installation NextCloud]] | |||
Si message d'erreur pas de panique, on retourne sur <nowiki>https://</nowiki><font color = blue>IP_NEXCLOUD</font>/nextcloud/ pour vérifier que tout s'est bien déroulé. | |||
[[File:Page 1er acceuil.PNG|Page de première connexion.]] | |||
=== Configuration Reverse-Proxy Nginx === | |||
==== VHost NextCloud ==== | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Voir [[Nginx_ReverseProxy_LXC_Alpine_Linux|Reverse Proxy Nginx]] | |||
}} | |||
Exemple de vhost pour NextCloud : | |||
server { | |||
listen 80; | |||
listen [::]:80; | |||
server_name <font color = blue>nextcloud.exemple.com</font>; | |||
# return 404; | |||
return 301 <nowiki>https</nowiki>://$host$request_uri; | |||
} | |||
server { | |||
server_name <font color = blue>nextcloud.exemple.com</font>; | |||
error_page 403 <nowiki>https</nowiki>://<font color = blue>nextcloud.exemple.com</font>; | |||
location / { | |||
'''client_max_body_size 0;''' # 0 supprime la limite d'upload | |||
proxy_set_header Upgrade $http_upgrade; | |||
proxy_set_header Connection "upgrade"; | |||
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 <nowiki>https</nowiki>://<font color = blue>IP_SERVEUR_NEXTCLOUD</font>/nextcloud/; | |||
proxy_buffering off; | |||
} | |||
listen [::]:443 ssl; # managed by Certbot | |||
listen 443 ssl; # managed by Certbot | |||
ssl_certificate /etc/letsencrypt/live/<font color = blue>nextcloud.exemple.com</font>/fullchain.pem; | |||
ssl_certificate_key /etc/letsencrypt/live/<font color = blue>nextcloud.exemple.com</font>/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/<font color = blue>nextcloud.exemple.com</font>/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 | |||
<font color = grey>...</font> | |||
'trusted_domains' => | |||
array ( | |||
0 => '12.34.56.789', | |||
<font color = blue>1 => '</font><font color = green>nextcloud.exemple.com</font><font color = blue>',</font> | |||
), | |||
<font color = blue>'trusted_proxies' => | |||
array ( | |||
0 => '</font><font color = green>IP_PROXY</font><font color = blue>', | |||
), | |||
'overwritewebroot' => '/',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = NextCloud sera maintenant accessible via <font color = blue>nextcloud.exemple.com</font> et non <font color = blue>IP_SERVEUR_NEXTCLOUD</font>/nextcloud/ | |||
}} | |||
== Post-Installation == | |||
NextCloud est maintenant fonctionnel, mais si vous vous rendez, depuis la page de l'administrateur, sur Administrateur -> Paramètres -> Vue d'ensemble . | |||
[[File:Vue d'ensemble.PNG|border|Accès du menu "Vue d'ensemble"]] | |||
Il reste quelques réglages à effectués. (3 si vous avez suivie ce tutorial). | |||
[[File:Erreur post install.PNG|border|Message d'erreurs post installation]] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = "Vue d'ensemble" est également le menu pour effectuer les mise à jours de NextCloud | |||
}} | |||
=== (optionnel) Jolie URL === | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Ceci ne règle pas d'erreur mais permet d'avoir une URL plus esthétique. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'installed' => true, | |||
<font color = blue>'overwrite.cli.url' => '<nowiki>https</nowiki>://<font color = green>nextcloud.exemple.com</font>/nextcloud', | |||
'htaccess.RewriteBase' => '/nextcloud',</font> | |||
); | |||
# sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess | |||
=== Limite de mémoire PHP à 512 Mo === | |||
# vi /etc/php/8.1/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/8.1/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
<font color = grey>...</font> | |||
memory_limit = <font color = blue>512</font>M | |||
<font color = grey>...</font> | |||
# apache2ctl graceful | |||
=== Fuseau horaire PHP === | |||
# vi /etc/php/8.1/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/8.1/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
<font color = grey>...</font> | |||
[Date] | |||
; Defines the default timezone used by the date functions | |||
; <nowiki>http://php.net/date.timezone</nowiki> | |||
<font color = blue>date.timezone =</font> <font color = green>Europe/Paris</font> | |||
<font color = grey>...</font> | |||
# vi /etc/php/8.1/cli/php.ini | |||
<font color = grey>...</font> | |||
[Date] | |||
; Defines the default timezone used by the date functions | |||
; <nowiki>http://php.net/date.timezone</nowiki> | |||
<font color = blue>date.timezone =</font> <font color = green>Europe/Paris</font> | |||
<font color = grey>...</font> | |||
# apache2ctl graceful | |||
=== Préfixe de région par défaut === | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Exemple avec la <font color = green>France</font>. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'htaccess.RewriteBase' => '/nextcloud', | |||
<font color = blue>'default_phone_region' => '<font color = green>FR</font>',</font> | |||
); | |||
=== Langue par défaut === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/language_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Exemple avec le <font color = green>français</font>. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_phone_region' => 'FR', | |||
<font color = blue>'default_language' => '<font color = green>fr</font>',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Peut également être forcé avec <font color = blue>'force_language' => '<font color = green>fr</font>',</font> | |||
}} | |||
=== Localisation par défaut === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/language_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Exemple avec la <font color = green>France</font>. | |||
}} | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_language' => 'fr', | |||
<font color = blue>'default_locale' => '<font color = green>fr_FR</font>',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Peut également être forcé avec <font color = blue>'force_locale' => '<font color = green>fr_FR</font>',</font> | |||
}} | |||
=== Memcache via Redis & APCu === | |||
[https://bayton.org/docs/nextcloud/installing-nextcloud-on-ubuntu-16-04-lts-with-redis-apcu-ssl-apache/#4-1-update-the-server-install-lamp-apcu-redis source] | |||
# 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 : | |||
<font color = grey>...</font> | |||
unixsocket /var/run/redis/redis-server.sock | |||
unixsocketperm 7<font color = blue>7</font>0 | |||
<font color = grey>...</font> | |||
On désactive l'écoute TCP : | |||
<font color = grey>...</font> | |||
port <font color = blue>0</font> | |||
<font color = grey>...</font> | |||
# usermod -a -G redis www-data | |||
---- | |||
La commande suivante devra s'effectuer sur l'hôte (ProxMox) pour une installation dans un conteneur : | |||
ProxMox:~# vi /etc/sysctl.conf | |||
<font color = grey>...</font> | |||
<font color = blue>vm.overcommit_memory = 1</font> | |||
ProxMox:~# sysctl vm.overcommit_memory=1 | |||
---- | |||
# systemctl restart redis | |||
# systemctl restart apache2 | |||
Enfin, on édite Nextcloud pour utiliser Redis : | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_phone_region' => 'FR', | |||
<font color = blue>'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, | |||
),</font> | |||
); | |||
Il faut activer APCu dans "cli" pour éviter un bug avec certaines commandes : | |||
# vi /etc/php/8.1/cli/conf.d/20-apcu.ini | |||
extension=apcu.so | |||
<font color = blue>apc.enable_cli=1</font> | |||
=== OpCache === | |||
Optimisation de PHP via OpCache. | |||
# vi /etc/php/8.1/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/8.1/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
Dans cet exemple on applique les [https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html paramètres de base recommandés par NextCloud] [https://gist.github.com/rohankhudedev/1a9c0a3c7fb375f295f9fc11aeb116fe autres paramètres] : | |||
<font color = grey>...</font> | |||
[opcache] | |||
<font color = blue>opcache.enable = 1 | |||
opcache.interned_strings_buffer = 64 | |||
opcache.max_accelerated_files = 50000 | |||
opcache.memory_consumption = 512 | |||
opcache.save_comments = 1 | |||
opcache.revalidate_freq = 1</font> | |||
<font color = grey>...</font> | |||
# vi /etc/php/8.1/cli/php.ini | |||
<font color = grey>...</font> | |||
[opcache] | |||
<font color = blue>opcache.enable = 1 | |||
opcache.interned_strings_buffer = 64 | |||
opcache.max_accelerated_files = 50000 | |||
opcache.memory_consumption = 512 | |||
opcache.save_comments = 1 | |||
opcache.revalidate_freq = 1</font> | |||
<font color = grey>...</font> | |||
# apache2ctl graceful | |||
=== Test final === | |||
On retoune dans le menu [[#Post-Installation|"Vue d'ensemble"]], normalement tous les tests devraient être validés : | |||
[[File:Test réussie.PNG|border|Satisfaisant non ? :)]] | |||
Comme suggéré on se rend sur [https://scan.nextcloud.com/ '''ce site'''] pour tester le niveau de sécurité de notre serveur NextCloud, si tout va bien vous devriez obtenir ceci : | |||
[[File:Test sécurité.PNG|border|une note comme j'aurais aimé en avoir à l'école.]] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = En plus du niveau "A+", tout doit être validé avec l'encoche verte, dans "Hardennings" et "Setup", en dessous. | |||
}} | |||
=== Crontab === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Par défaut les tâches de fond sont lancés en naviguant, ce qui n'est pas optimal et incompatible avec certaines applications. il est préférable d'utiliser crontab ou systemd. | |||
}} | |||
# 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 : | |||
[[File:Paramètres de base.PNG|border|C'est par ici]] | |||
[[File:Crontab active.PNG|border| Activation confirmé]] | |||
=== datadirectory === | |||
Variable nécessaire pour certaines applications comme RainLoop, ajouter si manquante : | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'overwritewebroot' => '/', | |||
<font color = blue>'datadirectory' => '/var/www/nextcloud/data',</font> | |||
'dbtype' => 'mysql', | |||
<font color = grey>...</font> | |||
=== 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 : | |||
# sudo -u www-data php /var/www/nextcloud/occ config:app:set files max_chunk_size --value 0 | |||
=== Désactivé les "espaces de travails riches" === | |||
[https://github.com/nextcloud/text/pull/748 Source] | |||
Une fonction que je n'ai jamais utilisé, crée des fichier "readme.md" et des messages d'érreurs.. a voir. | |||
# sudo -u www-data php /var/www/nextcloud/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 : | |||
[[File:NextCloud Email.PNG|border|Menu de configuration du courriel du serveur]] | |||
=== Mises à jour automatiques du serveur === | |||
Voir [[AutoUpdate#Debian_.2F_Ubuntu|la procédure suivante]] | |||
= 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. | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = important | |||
| texte = Il ne faut pas modifier le répertoire par défaut "/var/www/nextcloud/core/skeleton" sinon tous vos changements seront perdu à la prochaine mise a jour. | |||
}} | |||
=== Désativation du modèle de création === | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_phone_region' => 'FR', | |||
<font color = blue>'skeletondirectory' => <nowiki>''</nowiki>,</font> | |||
'memcache.locking' => '\OC\Memcache\Redis', | |||
<font color = grey>...</font> | |||
=== Modèle de création personnalisé === | |||
Création du dossier pour le modèle : | |||
# mkdir -p /usr/local/nextcloud/mon_model | |||
Ensuite on peut créer/copier les dossiers/fichiers que l'on souhaite à l'intérieur... | |||
Enfin, on active le nouveau dossier : | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
'default_phone_region' => 'FR', | |||
<font color = blue>'skeletondirectory' => <nowiki>'/usr/local/nextcloud/mon_model'</nowiki>,</font> | |||
'memcache.locking' => '\OC\Memcache\Redis', | |||
<font color = grey>...</font> | |||
=== Dossier des partages === | |||
Par défaut les partages entre utilisateur apparaissent à la racine, pour plus de clarté on peut les regrouper dans un même dossier : | |||
# vi /var/www/nextcloud/config/config.php | |||
<font color = grey>...</font> | |||
<nowiki>'skeletondirectory' => '',</nowiki> | |||
<font color = blue>'share_folder' => '<font color = green>/Mes Partages</font>',</font> | |||
<font color = grey>...</font> | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = "<font color = green>/Mes Partages</font>" à titre d'exemple. | |||
}} | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = important | |||
| texte = Ne fonctionnera que pour les partages créés après l'inscription de la variable dans config.php. | |||
}} | |||
= Application = | |||
Les applications s'installent via la GUI de l'administrateur : | |||
[[File:Menu applications.PNG|border| Par ici les apps!]] | |||
Certaines demandent cependant des interventions supplémentaires. | |||
== Antivirus ClamAV == | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = L'antivirus scannera tous les fichiers envoyés à la fin de leur téléchargement, ce qui bloquera l'envoie à 100% (sans message d'avertissement) un certains temps suivant le fichier et la puissance de votre processeur (un seul cœur par fichier) | |||
}} | |||
=== Installation === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/antivirus_configuration.html Source] | |||
Il faut simplement installer l'antivirus sur le serveur : | |||
# apt-get install clamav clamav-daemon | |||
Puis installer "'''Antivirus for files'''" depuis [[#Application|la GUI de l'administrateur]]. | |||
Voila! | |||
=== Configuration === | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = La configuration se fait via le menu "'''Sécurité'''" du menu "Paramètres" -> "Administration" de l'utilisateur admin. Par défaut les fichiers vérolés ne sont que signalés dans les log, l'on peut par exemple demander leur effacement. | |||
}} | |||
[[File:Configuration CLAMAV.PNG|border|vade retro satanas!]] | |||
== Support de Stockages Externes == | |||
Il faut activer "'''External storage support'''" via [[#Application|la GUI de l'administrateur]]. Un nouveau menu "'''Stockages Externes'''" apparaitra dans la console d'administration de l'administrateur. | |||
[[File:Stockages externes.PNG|border| Menu Stockages Externes]] | |||
=== Partages CIFS/Samba === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/external_storage/smb.html source] | |||
==== Ubuntu 20.04 ==== | |||
Par défaut les partages dit de types Windows ne sont pas disponible, il suffit d'installer les paquets suivants : | |||
# apt install smbclient libsmbclient | |||
==== Ubuntu 22.04 ==== | |||
# apt install smbclient libsmbclient php8.1-smbclient | |||
== Collabora Online == | |||
=== Client === | |||
On installe l'application "'''Nextcloud Office'''" via [[#Application|la GUI de l'administrateur]]. | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = loupe | |||
| texte = Dans les versions récente de Nextcloud l'application peut être installé par défaut. | |||
}} | |||
=== Serveur === | |||
{{Méta bandeau | |||
| niveau = grave | |||
| icône = important | |||
| texte = Installation dans une VM, machine physique ou un conteneur privilégié(+mknod=1) est fortement recommandé. (certaines version du service "coolwsd" ne fonctionnent pas dans un conteneur non privilégié) | |||
}} | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = Dans un conteneur non privilégié, pour pouvoir utiliser les fonctions d'impression, il faudra activer la fonction "mknod=1" | |||
}} | |||
[[File:MknodA.JPG|mknod=1]] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Voir la [[Restore_mknod|restauration d'un conteneur avec erreur "Cannot mknod: Operation not permitted"]] | |||
}} | |||
====Ubuntu 22.04==== | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Pour des performances optimales nous allons installer le serveur nativement, il sera derrière un [[Nginx_ReverseProxy_LXC_Alpine_Linux|reverse-proxy Nginx]]. | |||
}} | |||
On active le dépôt de Collabora : | |||
# apt install gnupg apt-transport-https ca-certificates | |||
# wget <nowiki>https://</nowiki>collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg -P /usr/share/keyrings/ | |||
# echo 'deb [signed-by=/usr/share/keyrings/collaboraonline-release-keyring.gpg] <nowiki>https://</nowiki>www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu2204 ./' | sudo tee /etc/apt/sources.list.d/collabora.list | |||
On installe le serveur de base : | |||
# apt update && apt upgrade | |||
# apt install coolwsd code-brand | |||
On installe les modules de langue désirés (ici français, espagnol et anglais) | |||
# apt install collaboraoffice*<font color = blue>fr</font> collaboraoffice*<font color = blue>es</font> collaboraoffice*<font color = blue>en</font> collaboraoffice*<font color = blue>en-gb</font> collaboraoffice*<font color = blue>en-us</font> | |||
On désactive la prise en charge du certificat SSL en local et on l'accepte via le proxy : | |||
# coolconfig set ssl.enable false | |||
# coolconfig set ssl.termination true | |||
On autorise notre serveur à se connecter : | |||
# coolconfig set storage.wopi.host <font color = blue>nextcloud.example.com</font> | |||
---- | |||
Pour autoriser plusieurs instances NextCloud : | |||
# vi /etc/coolwsd/coolwsd.xml | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = important | |||
| texte = fichier "xml" : bien respecter les aligments.. | |||
}} | |||
Puis remplacer : | |||
<font color = gray>...</font> | |||
<alias_groups desc="default mode is 'first' it allows only the first host when groups are not defined. set mode to 'groups' and define group to allow multiple host and its aliases" mode="<font color = red>first</font>"> | |||
<font color = gray>...</font> | |||
<font color = gray>...</font> | |||
</alias_groups> | |||
<font color = red><host>nextcloud.example.com</host></font> | |||
</wopi> | |||
<font color = gray>...</font> | |||
Par : | |||
<font color = gray>...</font> | |||
<alias_groups desc="default mode is 'first' it allows only the first host when groups are not defined. set mode to 'groups' and define group to allow multiple host and its aliases" mode="<font color = blue>groups</font>"> | |||
<font color = gray>...</font> | |||
<font color = gray>...</font> | |||
<font color = blue><group> | |||
<host desc="hostname to allow or deny." allow="true"<font color = green><nowiki>https://</nowiki>nextcloud.example.com</font></host> | |||
</group> | |||
<group> | |||
<host desc="hostname to allow or deny." allow="true"><font color = green><nowiki>https://</nowiki>autrenextcloud.example.com</font></host> | |||
</group></font> | |||
</alias_groups> | |||
</wopi> | |||
<font color = gray>...</font> | |||
---- | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = Erreur '''No acceptable WOPI hosts found matching the target host [<font color = blue>nextcloud.example.com</font>]''' | |||
}} | |||
Si les documents ne s'ouvrent pas à cause de cette erreur il faut corriger la sortie de la commande "coolconfig set storage.wopi.host <font color = blue>nextcloud.example.com</font>" en éditant le fichier de configuration : | |||
# vi /etc/coolwsd/coolwsd.xml | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = important | |||
| texte = fichier "xml" : bien respecter les aligments.. | |||
}} | |||
Et remplacer la ligne : | |||
<host><font color = green>nextcloud.example.com</font></host> | |||
Par : | |||
<host <font color = blue>allow="true" desc="Regex pattern of hostname to allow or deny."</font>><font color = green>nextcloud.example.com</font></host> | |||
---- | |||
On redémarre le serveur Collabora pour activer les changements : | |||
# systemctl restart coolwsd | |||
=== Reverse-Proxy === | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Voir [[Nginx_ReverseProxy_LXC_Alpine_Linux|Reverse Proxy Nginx]] | |||
}} | |||
Exemple de VHost pour le reverse proxy : | |||
server { | |||
listen 443 ssl; | |||
server_name <font color = blue>collabora.exemple.com</font>; | |||
error_log /var/log/nginx/collabora.error; | |||
ssl_certificate /etc/letsencrypt/live/<font color = blue>collabora.exemple.com</font>/fullchain.pem; # managed by Certbot | |||
ssl_certificate_key /etc/letsencrypt/live/<font color = blue>collabora.exemple.com</font>/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/<font color = blue>collabora.exemple.com</font>/chain.pem; # managed by Certbot | |||
ssl_stapling on; # managed by Certbot | |||
ssl_stapling_verify on; # managed by Certbot | |||
# static files | |||
location ^~ /browser { | |||
proxy_pass <nowiki>http://</nowiki><font color = blue>12.34.56.789</font>:9980; | |||
proxy_set_header Host $http_host; | |||
} | |||
# WOPI discovery URL | |||
location ^~ /hosting/discovery { | |||
proxy_pass <nowiki>http://</nowiki><font color = blue>12.34.56.789</font>:9980; | |||
proxy_set_header Host $http_host; | |||
} | |||
# Capabilities | |||
location ^~ /hosting/capabilities { | |||
proxy_pass <nowiki>http://</nowiki><font color = blue>12.34.56.789</font>:9980; | |||
proxy_set_header Host $http_host; | |||
} | |||
# main websocket | |||
location ~ ^/cool/(.*)/ws$ { | |||
proxy_pass <nowiki>http://</nowiki><font color = blue>12.34.56.789</font>: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 ~ ^/(c|l)ool { | |||
proxy_pass <nowiki>http://</nowiki><font color = blue>12.34.56.789</font>:9980; | |||
proxy_set_header Host $http_host; | |||
} | |||
# Admin Console websocket | |||
location ^~ /cool/adminws { | |||
proxy_pass <nowiki>http://</nowiki><font color = blue>12.34.56.789</font>:9980; | |||
proxy_set_header Upgrade $http_upgrade; | |||
proxy_set_header Connection "Upgrade"; | |||
proxy_set_header Host $http_host; | |||
proxy_read_timeout 36000s; | |||
} | |||
} | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = <font color = blue>12.34.56.789</font>:9980 est l'adresse IP:port du serveur Collabora (pour le proxy), il peut être installé indépendamment du serveur NextCloud, sur un autre serveur/VM. | |||
}} | |||
=== Liaison Client/Serveur === | |||
On se rend dans le menu "'''Collabora Online'''" du menu d'administration de l'admin : | |||
[[File:Menu Collabora.PNG|border|Ça se passe par ici]] [[File:Liaison Collabora.PNG|border|Menu de configuration pour l'accès au serveur Collabora.]] | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = Dans un container LXC, juste après installation, j'ai réglé l'erreur "Echec de la lecture à partir du stockage..." à l'ouverture d'un fichier avec.. un redémarrage du container.. | |||
}} | |||
===Page d'administration de Collabora=== | |||
Pour activer la page d'administration il faut d'abord attribuer un mot de passe administrateur : | |||
# coolconfig set-admin-password | |||
Enter admin username [admin]: <font color = blue>admin</font> | |||
Enter admin password: | |||
Confirm admin password: | |||
Saving configuration to : /etc/coolwsd/coolwsd.xml ... | |||
Saved | |||
# systemctl restart coolwsd | |||
Puis se rendre à l'adresse '''<nowiki>https://</nowiki><font color = blue>collabora.exemple.com</font>/browser/dist/admin/admin.html''' | |||
== (<font color=red>Obsolète</font>) Webmail RainLoop intégré == | |||
{{Méta bandeau | |||
| niveau = grave | |||
| icône = important | |||
| texte = Voir le remplaçant '''[[#Webmail_SnappyMail_intégré|SnappyMail]]''' | |||
}} | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Il existe une application "'''Mail'''" native qui ne nécessite pas de configuration particulière, au moment ou j'écris ce guide j'ai des soucies de performances avec mes nombreux mails, Rainloop de son côté est impeccable (et me semble bien plus avancé). | |||
}} | |||
=== Installation et configuration === | |||
On installe l'application "'''RainLopp'''" via [[#Application|la GUI de l'administrateur]] puis on se rend dans le menu "'''Paramètres'''" -> "'''Administration'''" -> "'''Paramètres supplémentaires'''" et on clique sur "'''<u>Accédez à la page d'administration de RainLoop</u>'''" | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Si vous avez l'erreur "[202] Data folder permissions error [is_dir]" il vous manque la variable "[[#datadirectory| datadirectory]]". | |||
}} | |||
[[File:Menu Parametres Supplementaires.PNG|border|Menu Paramètres supplémentaires.]] [[File:Menu admin RainLoop.PNG|border|Accès menu administration RainLoop.]] | |||
Il faut se connecter avec l'utilisateur "'''admin'''" et le mot de passe par défaut "'''12345'''" | |||
{{Méta bandeau | |||
| niveau = grave | |||
| icône = important | |||
| texte = Remplacer immédiatement le mot de passe de l'administrateur dans le menu "Sécurité" (ou "Security") à gauche. | |||
}} | |||
---- | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Le message d'erreur suivant en rouge (RainLoop data folder is accessible.) est un faux positif lié à son intégration dans NextCloud, ne pas en tenir compte. | |||
}} | |||
[[File:Faux_positif_RainLoop.PNG|border|Ça fait peut n'est-ce pas ? Aucun problème réel cependant :)]] | |||
---- | |||
=== Activation de la fonction "Contacts" === | |||
==== Création de la base de données ==== | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = important | |||
| texte = Utiliser un mot de passe différent de "root". | |||
}} | |||
# mysql -u root -p | |||
MariaDB [(none)]> create database <font color=grey>rainloop</font>; | |||
MariaDB [(none)]> create user <font color=green>rainloop</font>@localhost identified by '<font color=blue>motdepasse</font>'; | |||
MariaDB [(none)]> grant all privileges on <font color=grey>rainloop</font>.* to <font color=green>rainloop</font>@localhost IDENTIFIED BY '<font color=blue>motdepasse</font>'; | |||
MariaDB [(none)]> flush privileges; | |||
MariaDB [(none)]> quit; | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = <font color=grey>nom de la base de données</font> / <font color=green>nom de l'utilisateur de la base de données</font> | |||
}} | |||
==== Activation (GUI) ==== | |||
Depuis le menu "'''Contacts'''" de la [[#Installation_et_configuration|page d'administration de Rainloop]] : | |||
[[File:Contacts RainLoop.PNG|border| Page de configuration des contacts]] | |||
=== 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 [[#Installation_et_configuration|page d'administration de Rainloop]] pour en ajouter : | |||
[[File:Domaines rainloop.PNG|border|Par ici pour autoriser de nouveaux domaine.]] | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = Les comptes gmail.com nécessiteront un [https://support.google.com/mail/answer/185833?hl=fr '''mot de passe d'application''']. | |||
}} | |||
=== Quelques Exemples === | |||
==== Domaine laposte.net ==== | |||
[[File:Domaine laposte net.PNG|border| Configuration du domaine "laposte.net"]] | |||
==== Domaine yahoo.fr ==== | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = Nécessitera un [https://fr.aide.yahoo.com/kb/SLN15241.html#:~:text=G%C3%A9n%C3%A9rer%20un%20mot%20de%20passe,G%C3%A9n%C3%A9rer%20le%20mot%20de%20passe. '''mot de passe d'application''']. | |||
}} | |||
[[File:Domaine yahoo fr.PNG|border|Configuration du domaine "yahoo.fr"]] | |||
==== Domaine Office365 ==== | |||
[[File:Domaine office365.PNG|borde|Configuration d'un domain Office365]] | |||
=== Connexion automatique de l'utilisateur === | |||
Il est possible de connecter automatiquement une boite mail afin que l'utilisateur n'ait 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'''" | |||
[[File:Connexion auto RainLoop.PNG|border|Menu de connexion automatique 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 activer les connexions "moins sécurisées". Il est donc fortement conseillé de passer par [https://support.google.com/mail/answer/185833?hl=fr '''<u>les mots de passe d'application</u>''']. | |||
== Webmail SnappyMail intégré == | |||
== Application "Maps" (Cartes) == | |||
=== The "unique" column option is not supported === | |||
{{Méta bandeau | |||
| niveau = modéré | |||
| icône = important | |||
| texte = Depuis NextCloud version 21.0.2 modifier les fichiers d'une application générera un message d'erreur dans "Paramètres" -> "Vue d'ensemble". | |||
}} | |||
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 [https://github.com/nextcloud/maps/pull/568/commits/b7875f063bf86bb3385f6227bdaaeeebb59413fe '''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 === | |||
[https://github.com/matiasdelellis/facerecognition/wiki/Installation#ubuntu-focal Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Si un GPU NVidia est installé, il est préférable de passer '''[[#GPU_NVidia_via_CUDA|les analyses de reconnaissance faciale via CUDA]]''' | |||
}} | |||
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 <nowiki>https://</nowiki>repo.delellis.com.ar focal focal" > /etc/apt/sources.list.d/20-pdlib.list | |||
# wget -qO - <nowiki>https://</nowiki>repo.delellis.com.ar/repo.gpg.key | sudo apt-key add - | |||
# apt update | |||
# apt install php7.4-pdlib | |||
---- | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Inutile avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
Si nécessaire 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) === | |||
[https://github.com/matiasdelellis/facerecognition/wiki/Models#install-models Source models] [https://github.com/matiasdelellis/facerecognition/wiki/PHP-memory_limit Source mémoire PHP] [https://github.com/matiasdelellis/facerecognition 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) : | |||
----- | |||
Ubuntu 20.04 : | |||
# vi /etc/php/7.4/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/7.4/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
<font color = grey>...</font> | |||
memory_limit = <font color = blue>4096M</font> | |||
<font color = grey>...</font> | |||
Ubuntu 22.04 : | |||
# vi /etc/php/8.1/apache2/php.ini | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Editer "/etc/php/8.1/fpm/php.ini" si le serveur est configuré avec [[#.28optionnel.29_NextCloud_avec_PHP-FPM|PHP-FPM]]. | |||
}} | |||
<font color = grey>...</font> | |||
memory_limit = <font color = blue>4096M</font> | |||
<font color = grey>...</font> | |||
----- | |||
Puis on recharge Apache : | |||
# apachectl graceful | |||
Puis on installe les modèles (le dernier installé sera activé) : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:setup --model 1 | |||
# sudo -u www-data php /var/www/nextcloud/occ face:setup --model 3 | |||
# sudo -u www-data php /var/www/nextcloud/occ face:setup --model 4 | |||
Il faut configurer la taille mémoire maximale pour la reconnaissance faciale (exemple avec 4GB) : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:setup --memory <font color = blue>4GB</font> | |||
=== Configuration et vérification 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.. | |||
[[File:Reco face.PNG|border|Prêt à pister vos connaissances!]] | |||
Parfois, après installation, un messages d'erreur s'affiche au lieu de valeurs (ici entourés de rouge), il suffit de les modifier et enregistrer avec le bouton entouré en vert : | |||
[[File:Reco face valeurs.PNG|border|Paramètres de la détection des visages..]] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Valeurs données à titre d'exemple. | |||
}} | |||
On peut ensuite tester l'application via la ligne de commande avec un utilisateur et des images disponibles sur son espace de stockage : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:background_job -u <font color = blue>nom_utilisateur</font> -t 900 | |||
La commande pour réinitialiser la recherche si l'on désire tester ses paramètres de reconnaissance faciale : | |||
# sudo -u www-data /var/www/nextcloud/occ face:reset --all | |||
Pour des options de configuration plus avancées voir [[#Face_Recognition_.28Reconnaissance_faciale.29|'''les commandes CLI suivantes''']]. | |||
=== Service SystemD === | |||
[https://github.com/matiasdelellis/facerecognition/wiki/Schedule-Background-Task Source] | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Service pour lancer automatiquement l'analyse toutes les 30mn. | |||
}} | |||
# vi /etc/systemd/system/facerecognition.service | |||
[Unit] | |||
Description=Nextcloud FaceRecognition Job | |||
StartLimitIntervalSec=10s | |||
StartLimitBurst=5 | |||
[Service] | |||
Restart=on-failure | |||
RestartSec=5s | |||
User=www-data | |||
ExecStart=/usr/bin/php -f /var/www/nextcloud/occ face:background_job -t 900 | |||
# vi /etc/systemd/system/facerecognition.timer | |||
[Unit] | |||
Description=Run Nextcloud FaceRecognition every 30 minutes | |||
[Timer] | |||
OnBootSec=30min | |||
OnUnitActiveSec=30min | |||
Unit=facerecognition.service | |||
[Install] | |||
WantedBy=timers.target | |||
On active le service : | |||
# systemctl enable --now facerecognition.timer | |||
===Reconnaissance faciale avec calculs sur GPU=== | |||
==== Vérifier les fonctionnalitées activées de pdlib ==== | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Voir [[GPU_Passthrough|partage du GPU dans un conteneur LXC]] | |||
}} | |||
Pour vérifier si pdlib utilise CUDA : | |||
# php --ri pdlib | |||
Exemple de résultat : | |||
pdlib | |||
pdlib support => enabled | |||
pdlib extension version => 1.0.2 | |||
dlib library version => 19.19.0 | |||
<font color = red>DLIB_USE_CUDA => false</font> | |||
DLIB_USE_BLAS => true | |||
DLIB_USE_LAPACK => true | |||
USE_AVX_INSTRUCTIONS => false | |||
USE_AVX2_INSTRUCTIONS => false | |||
USE_NEON_INSTRUCTIONS => false | |||
USE_SSE2_INSTRUCTIONS => true | |||
USE_SSE4_INSTRUCTIONS => false | |||
==== Suppression de la version standard de pdlib ==== | |||
Si pdlib fut installé via '''[[#D.C3.A9pendance|cette méthode]]''', on supprime la version installé : | |||
# apt remove --purge php7.4-pdlib && apt autoremove | |||
Puis on supprime les sources : | |||
# rm /etc/apt/sources.list.d/20-pdlib.list* | |||
==== GPU NVidia via CUDA ==== | |||
===== Ubuntu 20.04===== | |||
[https://github.com/goodspb/pdlib Source pdlib] [https://stackoverflow.com/questions/49731346/compile-dlib-with-cuda source dlib] | |||
{{Méta bandeau | |||
| niveau = grave | |||
| icône = important | |||
| texte = Atention de vérifier '''[https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html à cette adresse]''' que la version de Cuda n'est pas trop récente pour votre pilote. | |||
}} | |||
On installe les dépendances : | |||
# apt install git cmake g++ software-properties-common libopenblas-dev liblapack-dev libx11-dev php7.4-dev pkg-config | |||
# wget <nowiki>https://</nowiki>developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin | |||
# mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 | |||
# apt-key adv --fetch-keys <nowiki>https://</nowiki>developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub | |||
# add-apt-repository "deb <nowiki>https://</nowiki>developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" | |||
# apt update | |||
On vérifie les versions disponibles en fonction de son pilote NVidia : | |||
# apt list libcudnn8 -a | |||
# apt search cuda-toolkit | |||
On installe la version souhaitée : | |||
# apt install libcudnn8<font color = blue>=8.2.4.15-1+cuda11.4</font> libcudnn8-dev<font color = blue>=8.2.4.15-1+cuda11.4</font> cuda-toolkit<font color = blue>-11-4</font> | |||
On compile et install dlib : | |||
# mkdir -p /opt/SP/packages/ | |||
# cd $_ | |||
# git clone <nowiki>https://</nowiki>github.com/davisking/dlib.git | |||
# cd dlib | |||
# git submodule init | |||
# git submodule update | |||
# mkdir build | |||
# cd $_ | |||
# cmake .. -DBUILD_SHARED_LIBS=ON -D DLIB_USE_CUDA=1 -D USE_AVX_INSTRUCTIONS=1 | |||
# make | |||
# make install | |||
On compile et installe pdlib : | |||
# cd /opt/SP/packages/ | |||
# git clone <nowiki>https://</nowiki>github.com/goodspb/pdlib.git | |||
# cd pdlib | |||
# phpize | |||
# ./configure --enable-debug | |||
# make | |||
# make install | |||
On inscrit le module dans apache : | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/fpm/conf.d/20-pdlib.ini | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/cli/conf.d/20-pdlib.ini | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/apache2/conf.d/20-pdlib.ini | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/mods-available/pdlib.ini | |||
# service apache2 restart && service php7.4-fpm restart | |||
On test : | |||
# php --ri pdlib | |||
Exemple : | |||
pdlib | |||
pdlib support => enabled | |||
pdlib extension version => 1.0.2 | |||
dlib library version => 19.22.99 | |||
<font color = green>DLIB_USE_CUDA => true</font> | |||
DLIB_USE_BLAS => true | |||
DLIB_USE_LAPACK => true | |||
USE_AVX_INSTRUCTIONS => false | |||
USE_AVX2_INSTRUCTIONS => false | |||
USE_NEON_INSTRUCTIONS => false | |||
USE_SSE2_INSTRUCTIONS => true | |||
USE_SSE4_INSTRUCTIONS => false | |||
===== Ubuntu 22.04===== | |||
On installe les dépendances : | |||
# apt install git cmake software-properties-common libopenblas-dev liblapack-dev libx11-dev php8.1-dev pkg-config g++-10 gcc-10 | |||
On installe cudnn : | |||
# apt install nvidia-cudnn | |||
On compile et install dlib : | |||
# mkdir -p /opt/SP/packages/ | |||
# cd $_ | |||
# git clone <nowiki>https://</nowiki>github.com/davisking/dlib.git | |||
# cd dlib | |||
# git submodule init | |||
# git submodule update | |||
# mkdir build | |||
# cd $_ | |||
# CC=gcc-10 CXX=g++-10 cmake -DBUILD_SHARED_LIBS=ON -D DLIB_USE_CUDA=1 -D USE_AVX_INSTRUCTIONS=1 ../ | |||
# make | |||
# make install | |||
On compile et installe pdlib : | |||
# cd /opt/SP/packages/ | |||
# git clone <nowiki>https://</nowiki>github.com/goodspb/pdlib.git | |||
# cd pdlib | |||
# phpize | |||
# ./configure --enable-debug | |||
# make | |||
# make install | |||
On inscrit le module dans apache : | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/fpm/conf.d/20-pdlib.ini | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/cli/conf.d/20-pdlib.ini | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/apache2/conf.d/20-pdlib.ini | |||
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/mods-available/pdlib.ini | |||
# service apache2 restart && service php8.1-fpm restart | |||
On test : | |||
# php --ri pdlib | |||
Exemple : | |||
pdlib | |||
pdlib support => enabled | |||
pdlib extension version => 1.0.2 | |||
dlib library version => 19.24.99 | |||
<font color = green>DLIB_USE_CUDA => true</font> | |||
DLIB_USE_BLAS => true | |||
DLIB_USE_LAPACK => true | |||
USE_AVX_INSTRUCTIONS => false | |||
USE_AVX2_INSTRUCTIONS => false | |||
USE_NEON_INSTRUCTIONS => false | |||
USE_SSE2_INSTRUCTIONS => true | |||
USE_SSE4_INSTRUCTIONS => false | |||
== Application "Intégration Google" == | |||
Après avoir installer l'application via [[#Application|le menu de l'administrateur]] et créé un [https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project?hl=fr 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 === | |||
[[File:Google cloud1.PNG|border|Choix du type d'authentification]] | |||
[[File:Google cloud2.PNG|border|Choix du type d'application]] | |||
[[File:Google cloud3.PNG|border|On inscrit son site NextCloud]] | |||
[[File:Google cloud4.PNG|border|On récupère les identifiants]] | |||
=== Côté NextCloud === | |||
[[File:Google_Comptes_Co.PNG|border|ça se passe par ici.]][[File:Google Comptes Co2.PNG|border|Page de configuration]] | |||
=== 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'''" | |||
[[File:Google import.PNG|border|Menu d'importation Google]] | |||
= (optionnel) NextCloud avec PHP-FPM = | |||
==Ubuntu 20.04== | |||
[https://www.reddit.com/r/PHPhelp/comments/gqszb0/php_fpm_vs_apache_mod_php/ Discussion] [https://tecadmin.net/setup-apache-php-fpm-ubuntu-20-04/ Source] | |||
Pour de meilleurs performances on active php-fpm : | |||
# apt update && apt upgrade | |||
# apt install php7.4-fpm libapache2-mod-fcgid | |||
# a2enconf php7.4-fpm | |||
# a2enmod actions alias proxy_fcgi setenvif proxy | |||
# systemctl reload apache2 | |||
On édite Apache pour activer PHP-FPM pour NextCloud : | |||
# vi /etc/apache2/sites-enabled/nextcloud.conf | |||
<font color = grey>...</font> | |||
</Directory> | |||
<font color = blue><FilesMatch \.php$> | |||
SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost" | |||
</FilesMatch></font> | |||
# apache2ctl restart | |||
Il faut maintenant configurer PHP-FPM : | |||
# vi /etc/php/7.4/fpm/php.ini | |||
*Limite mémoire PHP, minimum 512M et plus si vous utilisez la [[#Application_.22Face_Recognition.22_.28Reconnaissance_Facial.29|reconnaissance faciale]] : | |||
<font color = grey>...</font> | |||
memory_limit = <font color = blue>512</font>M | |||
<font color = grey>...</font> | |||
*On configure le fuseau horaire : | |||
<font color = grey>...</font> | |||
[Date] | |||
; Defines the default timezone used by the date functions | |||
; <nowiki>http://php.net/date.timezone</nowiki> | |||
<font color = blue>date.timezone =</font> <font color = green>Europe/Paris</font> | |||
<font color = grey>...</font> | |||
*On configure OpCache, ici on applique les [https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html paramètres de base recommandés par NextCloud] : | |||
<font color = grey>...</font> | |||
[opcache] | |||
<font color = blue>opcache.enable = 1 | |||
opcache.interned_strings_buffer = 64 | |||
opcache.max_accelerated_files = 50000 | |||
opcache.memory_consumption = 512 | |||
opcache.save_comments = 1 | |||
opcache.revalidate_freq = 1</font> | |||
<font color = grey>...</font> | |||
*On peut optimiser PHP-FPM à l'aide de [https://spot13.com/pmcalculator/ '''ce site'''] | |||
# vi /etc/php/7.4/fpm/pool.d/www.conf | |||
<font color = grey>...</font> | |||
; Note: This value is mandatory. | |||
pm.max_children = <font color = blue>5</font> | |||
<font color = grey>...</font> | |||
; Default Value: (min_spare_servers + max_spare_servers) / 2 | |||
pm.start_servers = <font color = blue>2</font> | |||
<font color = grey>...</font> | |||
; Note: Mandatory when pm is set to 'dynamic' | |||
pm.min_spare_servers = <font color = blue>1</font> | |||
<font color = grey>...</font> | |||
; Note: Mandatory when pm is set to 'dynamic' | |||
pm.max_spare_servers = <font color = blue>3</font> | |||
<font color = grey>...</font> | |||
On active les variables d'environnements PHP en décommentant les lignes suivante : | |||
<font color = grey>...</font> | |||
; Default Value: clean env | |||
<font color = blue>env[HOSTNAME] = $HOSTNAME | |||
env[PATH] = /usr/local/bin:/usr/bin:/bin | |||
env[TMP] = /tmp | |||
env[TMPDIR] = /tmp | |||
env[TEMP] = /tmp</font> | |||
<font color = grey>...</font> | |||
# service php7.4-fpm restart | |||
==Ubuntu 22.04== | |||
Pour de meilleurs performances on active php-fpm : | |||
# apt update && apt upgrade | |||
# apt install php8.1-fpm libapache2-mod-fcgid | |||
# a2enconf php8.1-fpm | |||
# a2enmod actions alias proxy_fcgi setenvif proxy | |||
# systemctl reload apache2 | |||
On édite Apache pour activer PHP-FPM pour NextCloud : | |||
# vi /etc/apache2/sites-enabled/nextcloud.conf | |||
<font color = grey>...</font> | |||
</Directory> | |||
<font color = blue><FilesMatch \.php$> | |||
SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost" | |||
</FilesMatch></font> | |||
# apache2ctl restart | |||
Il faut maintenant configurer PHP-FPM : | |||
# vi /etc/php/8.1/fpm/php.ini | |||
*Limite mémoire PHP, minimum 512M et plus si vous utilisez la [[#Application_.22Face_Recognition.22_.28Reconnaissance_Facial.29|reconnaissance faciale]] : | |||
<font color = grey>...</font> | |||
memory_limit = <font color = blue>512</font>M | |||
<font color = grey>...</font> | |||
*On configure le fuseau horaire : | |||
<font color = grey>...</font> | |||
[Date] | |||
; Defines the default timezone used by the date functions | |||
; <nowiki>http://php.net/date.timezone</nowiki> | |||
<font color = blue>date.timezone =</font> <font color = green>Europe/Paris</font> | |||
<font color = grey>...</font> | |||
*On configure OpCache, ici on applique les [https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html paramètres de base recommandés par NextCloud] : | |||
<font color = grey>...</font> | |||
[opcache] | |||
<font color = blue>opcache.enable = 1 | |||
opcache.interned_strings_buffer = 64 | |||
opcache.max_accelerated_files = 50000 | |||
opcache.memory_consumption = 512 | |||
opcache.save_comments = 1 | |||
opcache.revalidate_freq = 1</font> | |||
<font color = grey>...</font> | |||
*On peut optimiser PHP-FPM à l'aide de [https://spot13.com/pmcalculator/ '''ce site'''] | |||
# vi /etc/php/8.1/fpm/pool.d/www.conf | |||
<font color = grey>...</font> | |||
; Note: This value is mandatory. | |||
pm.max_children = <font color = blue>5</font> | |||
<font color = grey>...</font> | |||
; Default Value: (min_spare_servers + max_spare_servers) / 2 | |||
pm.start_servers = <font color = blue>2</font> | |||
<font color = grey>...</font> | |||
; Note: Mandatory when pm is set to 'dynamic' | |||
pm.min_spare_servers = <font color = blue>1</font> | |||
<font color = grey>...</font> | |||
; Note: Mandatory when pm is set to 'dynamic' | |||
pm.max_spare_servers = <font color = blue>3</font> | |||
<font color = grey>...</font> | |||
On active les variables d'environnements PHP en décommentant les lignes suivante : | |||
<font color = grey>...</font> | |||
; Default Value: clean env | |||
<font color = blue>env[HOSTNAME] = $HOSTNAME | |||
env[PATH] = /usr/local/bin:/usr/bin:/bin | |||
env[TMP] = /tmp | |||
env[TMPDIR] = /tmp | |||
env[TEMP] = /tmp</font> | |||
<font color = grey>...</font> | |||
# service php8.1-fpm restart | |||
= Astuces / Commandes CLI = | |||
[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html Source officielle] | |||
== Activer/Désactiver le mode maintenance == | |||
Activer : | |||
# sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on | |||
Désactiver : | |||
# sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off | |||
== Vérifier/Réparer l'installation de Nextcloud == | |||
# sudo -u www-data php /var/www/nextcloud/occ maintenance:repair | |||
== Ajouter les indices manquants à la base de données == | |||
# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices | |||
== Mise à jour de NextCloud via la CLI == | |||
Utile lorsque la mise à jour via la page web est bloquée.. | |||
# sudo -u www-data php /var/www/nextcloud/updater/updater.phar | |||
== Face Recognition (Reconnaissance faciale)== | |||
[https://github.com/matiasdelellis/facerecognition/wiki/Settings#hidden-settings Source] | |||
=== Lancer analyse manuellement === | |||
Avec un utilisateur et des images disponibles sur son espace de stockage : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:background_job -u <font color = blue>nom_utilisateur</font> -t 900 | |||
Pour lancer l'analyse pour tous les utilisateurs : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:background_job -t 900 | |||
=== Réinitialisation des résultats d'analyses === | |||
Pour la remise à zéro complète : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:reset --all | |||
Pour réinitialiser l'analyse d'un utilisateur : | |||
# sudo -u www-data php /var/www/nextcloud/occ face:reset --all -u <font color = blue>nom_utilisateur</font> | |||
=== Prise en charge des images sur les dossiers partagés === | |||
Pour activer la reconnaissance faciale sur les dossiers partagés. (Désactivé par défaut pour des questions de performance) | |||
# sudo -u www-data php /var/www/nextcloud/occ config:app:set facerecognition handle_shared_files --value true | |||
=== Prise en charge des images sur les dossiers réseaux === | |||
{{Méta bandeau | |||
| niveau = information | |||
| icône = loupe | |||
| texte = Voir [[#Partages_CIFS/Samba|partages Samba]] | |||
}} | |||
Pour activer la reconnaissance faciale des images sur les partages montés dans NextCloud. (Désactivé par default pour préserver la bande passante, le programme nécessitant de faire une copie locale pour analyser chaque images) | |||
# sudo -u www-data php /var/www/nextcloud/occ config:app:set facerecognition handle_external_files --value true | |||
Attention, si des images sont déposées sur un dossier partagé après la fin d'une analyse complète et sans passer par l'interface de Nextcloud, elles ne seront jamais scannées, pour qu'elles soient prise en compte il faut réinitialiser le statut d'achèvement de l'analyse : | |||
# sudo -u www-data php /var/www/nextcloud/occ user:setting <font color = blue>Nom_Utilisateur</font> facerecognition full_image_scan_done false | |||
Pour réinitialiser le statut d'achèvement automatiquement (ici toutes les 3 heures) : | |||
# crontab -e | |||
<font color = grey>...</font> | |||
0 */3 * * * /usr/bin/sudo -u www-data php /var/www/nextcloud/occ user:setting <font color = blue>Nom_Utilisateur</font> facerecognition full_image_scan_done false | |||
=== Relancer l'analyse pour un utilisateur considéré comme terminé === | |||
Utile pour prendre en compte certains changement d'option.. | |||
# sudo -u www-data php /var/www/nextcloud/occ user:setting <font color = blue>nom_utilisateur</font> facerecognition full_image_scan_done false | |||
Version actuelle datée du 17 avril 2024 à 11:40
LXC Ubuntu 20.04
Installation Serveur
# apt update && apt upgrade
Archive NextCloud
# apt install unzip # cd /tmp/ # wget https://download.nextcloud.com/server/releases/latest.zip # unzip latest.zip -d /var/www/ # rm latest.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 root -p
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 php7.4 libapache2-mod-php7.4 php7.4-common php7.4-mysql 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éé l'alias du site :
# 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 les modules requis :
# a2enmod rewrite headers env dir mime
On active SSL :
# a2enmod ssl # a2ensite default-ssl # systemctl reload apache2
(Recommandé) On supprime et désactive la page par défaut d'Apache
# rm /var/www/html/index.html # a2dissite 000-default # systemctl reload apache2
(Optionnel) Plus d'écoute sur le port 80
Si le serveur n'a aucun autres service sur le port 80 on peut supprimer son écoute :
# vi /etc/apache2/ports.conf
... # /etc/apache2/sites-enabled/000-default.conf #Listen 80 ...
# 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 Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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/;
proxy_buffering off;
}
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', );
# 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
Fuseau horaire PHP
# vi /etc/php/7.4/apache2/php.ini
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris ...
# vi /etc/php/7.4/cli/php.ini
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris ...
# 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', ...
Localisation par défaut
# vi /var/www/nextcloud/config/config.php
... 'default_language' => 'fr', 'default_locale' => 'fr_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
La commande suivante devra s'effectuer sur l'hôte (ProxMox) pour une installation dans un conteneur :
ProxMox:~# vi /etc/sysctl.conf
... vm.overcommit_memory = 1
ProxMox:~# sysctl vm.overcommit_memory=1
# 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/8.1/cli/conf.d/20-apcu.ini
extension=apcu.so apc.enable_cli=1
OpCache
Optimisation de PHP via OpCache.
# vi /etc/php/8.1/apache2/php.ini
Dans cet exemple on applique les paramètres de base recommandés par NextCloud autres paramètres :
... [opcache] opcache.enable = 1 opcache.interned_strings_buffer = 64 opcache.max_accelerated_files = 50000 opcache.memory_consumption = 512 opcache.save_comments = 1 opcache.revalidate_freq = 1 ...
# vi /etc/php/8.1/cli/php.ini
... [opcache] opcache.enable = 1 opcache.interned_strings_buffer = 64 opcache.max_accelerated_files = 50000 opcache.memory_consumption = 512 opcache.save_comments = 1 opcache.revalidate_freq = 1 ...
# apache2ctl graceful
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, ajouter si manquante :
# 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 :
# sudo -u www-data php /var/www/nextcloud/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.
# sudo -u www-data php /var/www/nextcloud/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 :
Mises à jour automatiques du serveur
Ubuntu 22.04
Installation Serveur
# apt update && apt upgrade
Archive NextCloud
# apt install unzip # cd /tmp/ # wget https://download.nextcloud.com/server/releases/latest.zip # unzip latest.zip -d /var/www/ # rm latest.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 root -p
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 & PHP8.1
# apt install imagemagick php-imagick php libapache2-mod-php php-common php-mysql php-gd php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-bcmath php-gmp
On créé l'alias du site :
# 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 les modules requis :
# a2enmod rewrite headers env dir mime
On active SSL :
# a2enmod ssl # a2ensite default-ssl # systemctl reload apache2
(Recommandé) On supprime et désactive la page par défaut d'Apache
# rm /var/www/html/index.html # a2dissite 000-default # systemctl reload apache2
(Optionnel) Plus d'écoute sur le port 80
Si le serveur n'a aucun autres service sur le port 80 on peut supprimer son écoute :
# vi /etc/apache2/ports.conf
... # /etc/apache2/sites-enabled/000-default.conf #Listen 80 ...
# 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 Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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/;
proxy_buffering off;
}
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', );
# sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess
Limite de mémoire PHP à 512 Mo
# vi /etc/php/8.1/apache2/php.ini
... memory_limit = 512M ...
# apache2ctl graceful
Fuseau horaire PHP
# vi /etc/php/8.1/apache2/php.ini
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris ...
# vi /etc/php/8.1/cli/php.ini
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris ...
# 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', ...
Localisation par défaut
# vi /var/www/nextcloud/config/config.php
... 'default_language' => 'fr', 'default_locale' => 'fr_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
La commande suivante devra s'effectuer sur l'hôte (ProxMox) pour une installation dans un conteneur :
ProxMox:~# vi /etc/sysctl.conf
... vm.overcommit_memory = 1
ProxMox:~# sysctl vm.overcommit_memory=1
# 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/8.1/cli/conf.d/20-apcu.ini
extension=apcu.so apc.enable_cli=1
OpCache
Optimisation de PHP via OpCache.
# vi /etc/php/8.1/apache2/php.ini
Dans cet exemple on applique les paramètres de base recommandés par NextCloud autres paramètres :
... [opcache] opcache.enable = 1 opcache.interned_strings_buffer = 64 opcache.max_accelerated_files = 50000 opcache.memory_consumption = 512 opcache.save_comments = 1 opcache.revalidate_freq = 1 ...
# vi /etc/php/8.1/cli/php.ini
... [opcache] opcache.enable = 1 opcache.interned_strings_buffer = 64 opcache.max_accelerated_files = 50000 opcache.memory_consumption = 512 opcache.save_comments = 1 opcache.revalidate_freq = 1 ...
# apache2ctl graceful
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, ajouter si manquante :
# 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 :
# sudo -u www-data php /var/www/nextcloud/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.
# sudo -u www-data php /var/www/nextcloud/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 :
Mises à jour automatiques du serveur
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 -p /usr/local/nextcloud/mon_model
Ensuite on peut créer/copier les dossiers/fichiers que l'on souhaite à l'intérieur...
Enfin, on active le nouveau dossier :
# vi /var/www/nextcloud/config/config.php
... 'default_phone_region' => 'FR', 'skeletondirectory' => '/usr/local/nextcloud/mon_model', 'memcache.locking' => '\OC\Memcache\Redis', ...
Dossier des partages
Par défaut les partages entre utilisateur apparaissent à la racine, pour plus de clarté on peut les regrouper dans un même dossier :
# vi /var/www/nextcloud/config/config.php
... 'skeletondirectory' => '', 'share_folder' => '/Mes Partages', ...
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
Ubuntu 20.04
Par défaut les partages dit de types Windows ne sont pas disponible, il suffit d'installer les paquets suivants :
# apt install smbclient libsmbclient
Ubuntu 22.04
# apt install smbclient libsmbclient php8.1-smbclient
Collabora Online
Client
On installe l'application "Nextcloud Office" via la GUI de l'administrateur.
Serveur
Ubuntu 22.04
On active le dépôt de Collabora :
# apt install gnupg apt-transport-https ca-certificates # wget https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg -P /usr/share/keyrings/ # echo 'deb [signed-by=/usr/share/keyrings/collaboraonline-release-keyring.gpg] https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu2204 ./' | sudo tee /etc/apt/sources.list.d/collabora.list
On installe le serveur de base :
# apt update && apt upgrade # apt install coolwsd code-brand
On installe les modules de langue désirés (ici français, espagnol et anglais)
# apt install collaboraoffice*fr collaboraoffice*es collaboraoffice*en collaboraoffice*en-gb collaboraoffice*en-us
On désactive la prise en charge du certificat SSL en local et on l'accepte via le proxy :
# coolconfig set ssl.enable false # coolconfig set ssl.termination true
On autorise notre serveur à se connecter :
# coolconfig set storage.wopi.host nextcloud.example.com
Pour autoriser plusieurs instances NextCloud :
# vi /etc/coolwsd/coolwsd.xml
Puis remplacer :
...
<alias_groups desc="default mode is 'first' it allows only the first host when groups are not defined. set mode to 'groups' and define group to allow multiple host and its aliases" mode="first">
...
...
</alias_groups>
<host>nextcloud.example.com</host>
</wopi>
...
Par :
...
<alias_groups desc="default mode is 'first' it allows only the first host when groups are not defined. set mode to 'groups' and define group to allow multiple host and its aliases" mode="groups">
...
...
<group>
<host desc="hostname to allow or deny." allow="true"https://nextcloud.example.com</host>
</group>
<group>
<host desc="hostname to allow or deny." allow="true">https://autrenextcloud.example.com</host>
</group>
</alias_groups>
</wopi>
...
Si les documents ne s'ouvrent pas à cause de cette erreur il faut corriger la sortie de la commande "coolconfig set storage.wopi.host nextcloud.example.com" en éditant le fichier de configuration :
# vi /etc/coolwsd/coolwsd.xml
Et remplacer la ligne :
<host>nextcloud.example.com</host>
Par :
<host allow="true" desc="Regex pattern of hostname to allow or deny.">nextcloud.example.com</host>
On redémarre le serveur Collabora pour activer les changements :
# systemctl restart coolwsd
Reverse-Proxy
Exemple de VHost pour le reverse proxy :
server {
listen 443 ssl;
server_name collabora.exemple.com;
error_log /var/log/nginx/collabora.error;
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
# static files
location ^~ /browser {
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 ~ ^/cool/(.*)/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 ~ ^/(c|l)ool {
proxy_pass http://12.34.56.789:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /cool/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 :
Page d'administration de Collabora
Pour activer la page d'administration il faut d'abord attribuer un mot de passe administrateur :
# coolconfig set-admin-password
Enter admin username [admin]: admin Enter admin password: Confirm admin password: Saving configuration to : /etc/coolwsd/coolwsd.xml ... Saved
# systemctl restart coolwsd
Puis se rendre à l'adresse https://collabora.exemple.com/browser/dist/admin/admin.html
(Obsolète) 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 root -p
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'ait 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 activer les connexions "moins sécurisées". Il est donc fortement conseillé de passer par les mots de passe d'application.
Webmail SnappyMail intégré
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
Si nécessaire 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) :
Ubuntu 20.04 :
# vi /etc/php/7.4/apache2/php.ini
... memory_limit = 4096M ...
Ubuntu 22.04 :
# vi /etc/php/8.1/apache2/php.ini
... memory_limit = 4096M ...
Puis on recharge Apache :
# apachectl graceful
Puis on installe les modèles (le dernier installé sera activé) :
# sudo -u www-data php /var/www/nextcloud/occ face:setup --model 1 # sudo -u www-data php /var/www/nextcloud/occ face:setup --model 3 # sudo -u www-data php /var/www/nextcloud/occ face:setup --model 4
Il faut configurer la taille mémoire maximale pour la reconnaissance faciale (exemple avec 4GB) :
# sudo -u www-data php /var/www/nextcloud/occ face:setup --memory 4GB
Configuration et vérification 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..
Parfois, après installation, un messages d'erreur s'affiche au lieu de valeurs (ici entourés de rouge), il suffit de les modifier et enregistrer avec le bouton entouré en vert :
On peut ensuite tester l'application via la ligne de commande avec un utilisateur et des images disponibles sur son espace de stockage :
# sudo -u www-data php /var/www/nextcloud/occ face:background_job -u nom_utilisateur -t 900
La commande pour réinitialiser la recherche si l'on désire tester ses paramètres de reconnaissance faciale :
# sudo -u www-data /var/www/nextcloud/occ face:reset --all
Pour des options de configuration plus avancées voir les commandes CLI suivantes.
Service SystemD
# vi /etc/systemd/system/facerecognition.service
[Unit] Description=Nextcloud FaceRecognition Job StartLimitIntervalSec=10s StartLimitBurst=5 [Service] Restart=on-failure RestartSec=5s User=www-data ExecStart=/usr/bin/php -f /var/www/nextcloud/occ face:background_job -t 900
# vi /etc/systemd/system/facerecognition.timer
[Unit] Description=Run Nextcloud FaceRecognition every 30 minutes [Timer] OnBootSec=30min OnUnitActiveSec=30min Unit=facerecognition.service [Install] WantedBy=timers.target
On active le service :
# systemctl enable --now facerecognition.timer
Reconnaissance faciale avec calculs sur GPU
Vérifier les fonctionnalitées activées de pdlib
Pour vérifier si pdlib utilise CUDA :
# php --ri pdlib
Exemple de résultat :
pdlib pdlib support => enabled pdlib extension version => 1.0.2 dlib library version => 19.19.0 DLIB_USE_CUDA => false DLIB_USE_BLAS => true DLIB_USE_LAPACK => true USE_AVX_INSTRUCTIONS => false USE_AVX2_INSTRUCTIONS => false USE_NEON_INSTRUCTIONS => false USE_SSE2_INSTRUCTIONS => true USE_SSE4_INSTRUCTIONS => false
Suppression de la version standard de pdlib
Si pdlib fut installé via cette méthode, on supprime la version installé :
# apt remove --purge php7.4-pdlib && apt autoremove
Puis on supprime les sources :
# rm /etc/apt/sources.list.d/20-pdlib.list*
GPU NVidia via CUDA
Ubuntu 20.04
On installe les dépendances :
# apt install git cmake g++ software-properties-common libopenblas-dev liblapack-dev libx11-dev php7.4-dev pkg-config # wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin # mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 # apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub # add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" # apt update
On vérifie les versions disponibles en fonction de son pilote NVidia :
# apt list libcudnn8 -a # apt search cuda-toolkit
On installe la version souhaitée :
# apt install libcudnn8=8.2.4.15-1+cuda11.4 libcudnn8-dev=8.2.4.15-1+cuda11.4 cuda-toolkit-11-4
On compile et install dlib :
# mkdir -p /opt/SP/packages/ # cd $_ # git clone https://github.com/davisking/dlib.git # cd dlib # git submodule init # git submodule update # mkdir build # cd $_ # cmake .. -DBUILD_SHARED_LIBS=ON -D DLIB_USE_CUDA=1 -D USE_AVX_INSTRUCTIONS=1 # make # make install
On compile et installe pdlib :
# cd /opt/SP/packages/ # git clone https://github.com/goodspb/pdlib.git # cd pdlib # phpize # ./configure --enable-debug # make # make install
On inscrit le module dans apache :
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/fpm/conf.d/20-pdlib.ini # echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/cli/conf.d/20-pdlib.ini # echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/apache2/conf.d/20-pdlib.ini # echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/7.4/mods-available/pdlib.ini # service apache2 restart && service php7.4-fpm restart
On test :
# php --ri pdlib
Exemple :
pdlib pdlib support => enabled pdlib extension version => 1.0.2 dlib library version => 19.22.99 DLIB_USE_CUDA => true DLIB_USE_BLAS => true DLIB_USE_LAPACK => true USE_AVX_INSTRUCTIONS => false USE_AVX2_INSTRUCTIONS => false USE_NEON_INSTRUCTIONS => false USE_SSE2_INSTRUCTIONS => true USE_SSE4_INSTRUCTIONS => false
Ubuntu 22.04
On installe les dépendances :
# apt install git cmake software-properties-common libopenblas-dev liblapack-dev libx11-dev php8.1-dev pkg-config g++-10 gcc-10
On installe cudnn :
# apt install nvidia-cudnn
On compile et install dlib :
# mkdir -p /opt/SP/packages/ # cd $_ # git clone https://github.com/davisking/dlib.git # cd dlib # git submodule init # git submodule update # mkdir build # cd $_ # CC=gcc-10 CXX=g++-10 cmake -DBUILD_SHARED_LIBS=ON -D DLIB_USE_CUDA=1 -D USE_AVX_INSTRUCTIONS=1 ../ # make # make install
On compile et installe pdlib :
# cd /opt/SP/packages/ # git clone https://github.com/goodspb/pdlib.git # cd pdlib # phpize # ./configure --enable-debug # make # make install
On inscrit le module dans apache :
# echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/fpm/conf.d/20-pdlib.ini # echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/cli/conf.d/20-pdlib.ini # echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/apache2/conf.d/20-pdlib.ini # echo -e "[pdlib]\nextension="pdlib.so"" > /etc/php/8.1/mods-available/pdlib.ini # service apache2 restart && service php8.1-fpm restart
On test :
# php --ri pdlib
Exemple :
pdlib pdlib support => enabled pdlib extension version => 1.0.2 dlib library version => 19.24.99 DLIB_USE_CUDA => true DLIB_USE_BLAS => true DLIB_USE_LAPACK => true USE_AVX_INSTRUCTIONS => false USE_AVX2_INSTRUCTIONS => false USE_NEON_INSTRUCTIONS => false USE_SSE2_INSTRUCTIONS => true USE_SSE4_INSTRUCTIONS => false
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"
(optionnel) NextCloud avec PHP-FPM
Ubuntu 20.04
Pour de meilleurs performances on active php-fpm :
# apt update && apt upgrade # apt install php7.4-fpm libapache2-mod-fcgid # a2enconf php7.4-fpm # a2enmod actions alias proxy_fcgi setenvif proxy # systemctl reload apache2
On édite Apache pour activer PHP-FPM pour NextCloud :
# vi /etc/apache2/sites-enabled/nextcloud.conf
...
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
# apache2ctl restart
Il faut maintenant configurer PHP-FPM :
# vi /etc/php/7.4/fpm/php.ini
- Limite mémoire PHP, minimum 512M et plus si vous utilisez la reconnaissance faciale :
... memory_limit = 512M ...
- On configure le fuseau horaire :
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris ...
- On configure OpCache, ici on applique les paramètres de base recommandés par NextCloud :
... [opcache] opcache.enable = 1 opcache.interned_strings_buffer = 64 opcache.max_accelerated_files = 50000 opcache.memory_consumption = 512 opcache.save_comments = 1 opcache.revalidate_freq = 1 ...
- On peut optimiser PHP-FPM à l'aide de ce site
# vi /etc/php/7.4/fpm/pool.d/www.conf
... ; Note: This value is mandatory. pm.max_children = 5 ... ; Default Value: (min_spare_servers + max_spare_servers) / 2 pm.start_servers = 2 ... ; Note: Mandatory when pm is set to 'dynamic' pm.min_spare_servers = 1 ... ; Note: Mandatory when pm is set to 'dynamic' pm.max_spare_servers = 3 ...
On active les variables d'environnements PHP en décommentant les lignes suivante :
... ; Default Value: clean env env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp ...
# service php7.4-fpm restart
Ubuntu 22.04
Pour de meilleurs performances on active php-fpm :
# apt update && apt upgrade # apt install php8.1-fpm libapache2-mod-fcgid # a2enconf php8.1-fpm # a2enmod actions alias proxy_fcgi setenvif proxy # systemctl reload apache2
On édite Apache pour activer PHP-FPM pour NextCloud :
# vi /etc/apache2/sites-enabled/nextcloud.conf
...
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
# apache2ctl restart
Il faut maintenant configurer PHP-FPM :
# vi /etc/php/8.1/fpm/php.ini
- Limite mémoire PHP, minimum 512M et plus si vous utilisez la reconnaissance faciale :
... memory_limit = 512M ...
- On configure le fuseau horaire :
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris ...
- On configure OpCache, ici on applique les paramètres de base recommandés par NextCloud :
... [opcache] opcache.enable = 1 opcache.interned_strings_buffer = 64 opcache.max_accelerated_files = 50000 opcache.memory_consumption = 512 opcache.save_comments = 1 opcache.revalidate_freq = 1 ...
- On peut optimiser PHP-FPM à l'aide de ce site
# vi /etc/php/8.1/fpm/pool.d/www.conf
... ; Note: This value is mandatory. pm.max_children = 5 ... ; Default Value: (min_spare_servers + max_spare_servers) / 2 pm.start_servers = 2 ... ; Note: Mandatory when pm is set to 'dynamic' pm.min_spare_servers = 1 ... ; Note: Mandatory when pm is set to 'dynamic' pm.max_spare_servers = 3 ...
On active les variables d'environnements PHP en décommentant les lignes suivante :
... ; Default Value: clean env env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp ...
# service php8.1-fpm restart
Astuces / Commandes CLI
Activer/Désactiver le mode maintenance
Activer :
# sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Désactiver :
# sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Vérifier/Réparer l'installation de Nextcloud
# sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
Ajouter les indices manquants à la base de données
# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Mise à jour de NextCloud via la CLI
Utile lorsque la mise à jour via la page web est bloquée..
# sudo -u www-data php /var/www/nextcloud/updater/updater.phar
Face Recognition (Reconnaissance faciale)
Lancer analyse manuellement
Avec un utilisateur et des images disponibles sur son espace de stockage :
# sudo -u www-data php /var/www/nextcloud/occ face:background_job -u nom_utilisateur -t 900
Pour lancer l'analyse pour tous les utilisateurs :
# sudo -u www-data php /var/www/nextcloud/occ face:background_job -t 900
Réinitialisation des résultats d'analyses
Pour la remise à zéro complète :
# sudo -u www-data php /var/www/nextcloud/occ face:reset --all
Pour réinitialiser l'analyse d'un utilisateur :
# sudo -u www-data php /var/www/nextcloud/occ face:reset --all -u nom_utilisateur
Prise en charge des images sur les dossiers partagés
Pour activer la reconnaissance faciale sur les dossiers partagés. (Désactivé par défaut pour des questions de performance)
# sudo -u www-data php /var/www/nextcloud/occ config:app:set facerecognition handle_shared_files --value true
Prise en charge des images sur les dossiers réseaux
Pour activer la reconnaissance faciale des images sur les partages montés dans NextCloud. (Désactivé par default pour préserver la bande passante, le programme nécessitant de faire une copie locale pour analyser chaque images)
# sudo -u www-data php /var/www/nextcloud/occ config:app:set facerecognition handle_external_files --value true
Attention, si des images sont déposées sur un dossier partagé après la fin d'une analyse complète et sans passer par l'interface de Nextcloud, elles ne seront jamais scannées, pour qu'elles soient prise en compte il faut réinitialiser le statut d'achèvement de l'analyse :
# sudo -u www-data php /var/www/nextcloud/occ user:setting Nom_Utilisateur facerecognition full_image_scan_done false
Pour réinitialiser le statut d'achèvement automatiquement (ici toutes les 3 heures) :
# crontab -e
... 0 */3 * * * /usr/bin/sudo -u www-data php /var/www/nextcloud/occ user:setting Nom_Utilisateur facerecognition full_image_scan_done false
Relancer l'analyse pour un utilisateur considéré comme terminé
Utile pour prendre en compte certains changement d'option..
# sudo -u www-data php /var/www/nextcloud/occ user:setting nom_utilisateur facerecognition full_image_scan_done false