## Installation Nextcloud selon les pratiques d'itopie
[[_TOC_]]
### Installation de PHP
#### PHP 8.2
1. Ajout du dépôt [[sury|https://packages.sury.org/php/]] pour PHP, en suivant les indications du [[README|https://packages.sury.org/php/README.txt]] :
1. Ajouter le fichier nextcloud.conf dans /etc/php/8.x/fpm/pool.d/ \
**NB**, ce fichier contient la configuration du socket Unix pour l'exécution des requêtes PHP. \
**ATTENTION**, les valeurs de ce fichiers doivent être adaptées en fonction des ressources de la machine. Il existe un [[calculateur en ligne|https://spot13.com/pmcalculator/]] qui permet de les calculer.
tcp dport { 80, 443 } ct state new counter packets 0 bytes 0 accept
[...]
}
}
]
# systemctl restart nftables.service
```
1. Tester la connexion : `# curl -I -L http://${WEBSITENAME.TLD}`
1. Installer `certbot` pour [[Let's Encrypt|installation/apache/letsencrypt]] (cf. <https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04>) si VM "non-managé" (pas Infomaniak ou reverse-proxy itopie) :
```
# apt-get install certbot python3-certbot-nginx
# certbot --nginx -d ${WEBSITENAME.TLD}
[...]
Enter email address (used for urgent renewal and security notices)
1. Créer l'utilisateur et la base de données (cf. <https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html#postgresql-database>) :
```
# sudo -u postgres psql
postgres=# CREATE USER ncadmin
WITH ENCRYPTED PASSWORD '${ncadmin_DB_PASSWORD}';
postgres=# CREATE DATABASE nextcloud
WITH OWNER ncadmin;
postgres=# GRANT ALL PRIVILEGES
ON DATABASE nextcloud
TO ncadmin;
postgres=# exit
#
```
1. Configurer la connexion en socket (et mapping) :
```
# sed -i -e '/local all postgres peer/a local nextcloud all ident map=nextcloud' \
1. Stopper le service : `# systemctl stop redis.service`
1. Ajouter l'utilisateur `www-data` au groupe `redis` afin que Nextcloud puisse accéder au socket (cf. <https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html#id2>) : \
**ATTENTION**, une meilleure solution serait d'utiliser `systemd-tmpfiles` en ajoutant une ACL pour l'utilisateur `www-data` à la volée quand le socket apparaître !
```
# adduser www-data redis
# systemctl restart php8.2-fpm.service
#
```
1. Configurer le logiciel pour communiquer en socket :
```
# cat <<EOF >>/etc/redis/redis.conf
### Nextcloud
include /etc/redis/local_socket.conf
EOF
# cat <<EOF >/etc/redis/local_socket.conf
### Nextcloud
unixsocket /run/redis/redis-server.sock
unixsocketperm 770
EOF
#
```
1. Redémarrer le service : `# systemctl restart redis.service`
1. Configurer Nextcloud pour utiliser Redis et APCu :
```
# cd /srv/nextcloud/
# vi config/config.php
[ajouter à la fin before la dernière ");":
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),
]
#
```
#### Exemple du fichier `config.php`
**ATTENTION**, le deuxième dossier pour les applications, _i.e._ `/srv/nextcloud/apps2`, est outil pendant la mise à jour manuelle dans le cas des différentes versions des applications (comme conseillé par la documentation officielle Nextcloud), à vérifier si c'est toujours le cas !
* PDF viewer (permet de visualiser directement un PDF dans Nextcloud web)
* Photos (base)
* Polls (formulaires et sondages)
* Privacy (base)
* Recommendations (montre les fichiers qui sont utilisés fréquemment)
* Share by mail (base)
* Suspicious Login (application de sécurité pour éviter les connexion malveillantes)
* Talk (application de chat et de visio conférence)
* Tasks (gestion des tâches en lien avec le calendrier, via CalDAV)
* Temporary files lock (permet d'éviter des conflits en verrouillant les fichiers ouverts)
* Text (base)
* Theming (permet de mettre des thèmes à l'interface web de Nextcloud)
* TimeManager (Gestion du temps)
* Two-Factor TOTP Provider
* Update notification (base)
* User status (base)
* User usage report (permet de suivre l'utilisation des ressources par utilisateur)
* Versions (base)
* Video player (base)
## Installation Nextcloud selon les pratiques d'itopie
[[_TOC_]]
### Installation de PHP
#### PHP 8.2
1. Ajout du dépôt [[sury|https://packages.sury.org/php/]] pour PHP, en suivant les indications du [[README|https://packages.sury.org/php/README.txt]] :
1. Ajouter le fichier nextcloud.conf dans /etc/php/8.x/fpm/pool.d/ \
**NB**, ce fichier contient la configuration du socket Unix pour l'exécution des requêtes PHP. \
**ATTENTION**, les valeurs de ce fichiers doivent être adaptées en fonction des ressources de la machine. Il existe un [[calculateur en ligne|https://spot13.com/pmcalculator/]] qui permet de les calculer.
tcp dport { 80, 443 } ct state new counter packets 0 bytes 0 accept
[...]
}
}
]
# systemctl restart nftables.service
```
1. Tester la connexion : `# curl -I -L http://${WEBSITENAME.TLD}`
1. Installer `certbot` pour [[Let's Encrypt|installation/apache/letsencrypt]] (cf. <https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04>) si VM "non-managé" (pas Infomaniak ou reverse-proxy itopie) :
```
# apt-get install certbot python3-certbot-nginx
# certbot --nginx -d ${WEBSITENAME.TLD}
[...]
Enter email address (used for urgent renewal and security notices)
1. Créer l'utilisateur et la base de données (cf. <https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html#postgresql-database>) :
```
# sudo -u postgres psql
postgres=# CREATE USER ncadmin
WITH ENCRYPTED PASSWORD '${ncadmin_DB_PASSWORD}';
postgres=# CREATE DATABASE nextcloud
WITH OWNER ncadmin;
postgres=# GRANT ALL PRIVILEGES
ON DATABASE nextcloud
TO ncadmin;
postgres=# exit
#
```
1. Configurer la connexion en socket (et mapping) :
```
# sed -i -e '/local all postgres peer/a local nextcloud all ident map=nextcloud' \
1. Stopper le service : `# systemctl stop redis.service`
1. Ajouter l'utilisateur `www-data` au groupe `redis` afin que Nextcloud puisse accéder au socket (cf. <https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html#id2>) : \
**ATTENTION**, une meilleure solution serait d'utiliser `systemd-tmpfiles` en ajoutant une ACL pour l'utilisateur `www-data` à la volée quand le socket apparaître !
```
# adduser www-data redis
# systemctl restart php8.2-fpm.service
#
```
1. Configurer le logiciel pour communiquer en socket :
```
# cat <<EOF >>/etc/redis/redis.conf
### Nextcloud
include /etc/redis/local_socket.conf
EOF
# cat <<EOF >/etc/redis/local_socket.conf
### Nextcloud
unixsocket /run/redis/redis-server.sock
unixsocketperm 770
EOF
#
```
1. Redémarrer le service : `# systemctl restart redis.service`
1. Configurer Nextcloud pour utiliser Redis et APCu :
```
# cd /srv/nextcloud/
# vi config/config.php
[ajouter à la fin before la dernière ");":
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),
]
#
```
#### Exemple du fichier `config.php`
**ATTENTION**, le deuxième dossier pour les applications, _i.e._ `/srv/nextcloud/apps2`, est outil pendant la mise à jour manuelle dans le cas des différentes versions des applications (comme conseillé par [la documentation officielle Nextcloud](https://docs.nextcloud.com/server/latest/admin_manual/apps_management.html#using-custom-app-directories)), à vérifier si c'est toujours le cas !