329 lines
10 KiB
Markdown
329 lines
10 KiB
Markdown
# Service NUAGE
|
||
|
||
Service Nextcloud du candidat chaton de Libre en communs.
|
||
|
||
Responsable : LaurentP (@lpoujoulat)
|
||
Équipe : LaurentP (@lpoujoulat), LHumanG33k (@human-geek)
|
||
|
||
CPU : 2
|
||
RAM : 1Go
|
||
|
||
# Installation
|
||
|
||
## Généralités
|
||
|
||
Sauf mention contraire, toutes les commandes indiquées ci-après sont exécutées avec les permissions root
|
||
|
||
## Création de l'espace de stockage
|
||
|
||
Créer les chemins nécessaires:
|
||
|
||
# mkdir -p /var/www/nuage.chalec.org/data
|
||
|
||
Préparer le volume de données utilisateurs dans la partition /dev/vdb1 (500Go):
|
||
|
||
# mkfs.ext4 -m 0 -L DataNuage -e remount-ro /dev/vdb1
|
||
|
||
Ajouter le volume à la table de montage /etc/fstab:
|
||
|
||
# Users data storage for the Nextcloud instance nuage.chalec.org
|
||
UUID=[UUID-/dev/vdb1] /var/www/nuage.chalec.org/data ext4 errors=remount-ro,nosuid,nodev,noexec,noatime 0 2
|
||
|
||
Monter le volume et attribuer les droits à l'utilisateur serveur web
|
||
|
||
# mount /var/www/nuage.chalec.org/data
|
||
# chown -R www-data.www-data /var/www/nuage.chalec.org
|
||
|
||
## Installation des services
|
||
|
||
L'installation et la configuration sont basées sur les instructions originales données par:
|
||
https://docs.nextcloud.com/server/latest/admin_manual/installation/index.html
|
||
|
||
### Installation d'Apache
|
||
|
||
Avec les droits d'installation :
|
||
```bash
|
||
apt install apache2
|
||
a2enmod rewrite
|
||
a2enmod headers
|
||
```
|
||
|
||
### Installation de php et des modules pré-requis
|
||
|
||
|
||
Avec les droits d'installation :
|
||
```bash
|
||
apt install php-fpm php-cli
|
||
a2enmod proxy_fcgi setenvif
|
||
a2enconf php7.4-fpm
|
||
apt install \
|
||
php-ctype php-dom \
|
||
php-gd php-iconv \
|
||
php-json php-xml php-mbstring \
|
||
php-posix php-mbstring \
|
||
php-posix php-xmlwriter \
|
||
php-xmlreader php-zip \
|
||
php-pdo-pgsql php-curl \
|
||
php-fileinfo php-bz2 \
|
||
php-intl \
|
||
php-exif php-redis \
|
||
php-imagick php-bcmath \
|
||
libmagickcore-6.q16-6-extra
|
||
|
||
```
|
||
Certains paquets sont requis pour avoir une prise en charge complète des fichiers notament des images.
|
||
|
||
|
||
Modifier le fichier de configuration des ports d'apache pour forcer l'écoute sur le port 80 de IPV4.
|
||
Pour cela, dans le fichier /etc/apache2/ports.conf, remplacez la ligne:
|
||
|
||
Listen 80
|
||
|
||
par:
|
||
|
||
Listen 0.0.0.0:80
|
||
|
||
Redémarrez le serveur Apache:
|
||
|
||
# systemctl restart apache2
|
||
|
||
### Installation de la base de données
|
||
|
||
Installer le serveur PostgreSQL et l'outil de génération de mots de passe:
|
||
|
||
# apt install postgresql pwgen
|
||
|
||
Générer un mot de passe fort pour le futur utilisateur de la base de données:
|
||
|
||
# pwgen -syr "'" 15 1
|
||
|
||
Passer en ligne de commande SQL superviseur de postgreSQL:
|
||
|
||
# su postgres -c psql
|
||
|
||
Créer l'utilisateur de la base nextcloud en utilisant le mot de passe précédent:
|
||
|
||
=# create role nextcloud with login password '<pwd>';
|
||
|
||
Créer la base de données pour nextcloud:
|
||
|
||
=# create database nextcloud owner nextcloud;
|
||
|
||
Sortir de psql avec Ctrl+D.
|
||
|
||
|
||
### Installation de nextcloud
|
||
|
||
```bash
|
||
# Déplacement dans le dossier
|
||
cd /var/www/nuage.chalec.org
|
||
# Téléchargement de l'archive compressée de la dernière version
|
||
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
|
||
# Téléchargement du fichier de somme de controle hashé en sha256 de la dernière version
|
||
wget https://download.nextcloud.com/server/releases/latest.tar.bz2.sha256
|
||
# Vérification de la somme de controle
|
||
sha256sum -c latest.tar.bz2.sha256
|
||
# Extraction du contenu de l'archive
|
||
tar -xvf latest.tar.bz2
|
||
# Suppression de l'archive
|
||
rm latest.tar.bz2
|
||
# Suppression du fichier de somme de controle
|
||
rm latest.tar.bz2.sha256
|
||
# Changement de l'utilisateur et du groupe propriaitaire du contenu extrait
|
||
# dans le dossier nextcloud
|
||
chown -R www-data.www-data nextcloud
|
||
# Déplacement dans le dossier des sources de nextcloud
|
||
cd nextcloud
|
||
# Lancement de l'installation en mode terminal non interactif
|
||
# Remplacez <DB_PASS> par le mot de passe de l'utilisateur de PostgreSQL
|
||
# généré auparavant en mettant bien deux SIMPLES quotes autours.
|
||
# Remplacez <ADM_PASS> par le mot de passe de votre choix.
|
||
# Le mot de passe doit être long (au moins 14 caractères) tout en restant utilisable sur une interface WEB.
|
||
sudo -u www-data \
|
||
php occ maintenance:install \
|
||
--database "pgsql" \
|
||
--database-name "nextcloud" \
|
||
--database-host "localhost" \
|
||
--database-user "nextcloud" \
|
||
--database-pass '<DB_PASS>' \
|
||
--admin-user "chalec" \
|
||
--admin-pass "<ADM_PASS>"
|
||
```
|
||
|
||
| :memo: | La commande d'installation est longue (1 à 2 min). Soyez patient. |
|
||
|---------------|:------------------------------------------------------------------------|
|
||
|
||
|
||
|
||
### Configuration de nextcloud
|
||
|
||
La configuration se fait à travers le fichier de configuration /var/www/nuage.chalec.org/nextcloud/config/config.php généré.
|
||
|
||
Un certain nombre de choses sont à configurer (voir la doc (https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/index.html) pour plus de détails ou le fichiers (/var/www/nuage.chalec.org/nextcloud/config/config.sample.php) ci-dessous. Une version (à priori) complète des options se trouve à l'adresse https://github.com/nextcloud/server/blob/master/config/config.sample.php
|
||
|
||
```php
|
||
//[...]
|
||
'trusted_domains' =>
|
||
array (
|
||
0 => '127.0.0.1',
|
||
1 => '80.67.179.96',
|
||
2 => '192.168.2.193',
|
||
3 => 'nuage.chalec.org',
|
||
4 => '192.169.1.1',
|
||
),
|
||
'default_language' => 'fr',
|
||
'default_locale' => 'fr_FR',
|
||
'default_phone_region' => 'FR',
|
||
'account_manager.default_property_scope' =>
|
||
array (
|
||
'displayname' => 'v2-federated',
|
||
'address' => 'v2-private',
|
||
'website' => 'v2-private',
|
||
'email' => 'v2-private',
|
||
'avatar' => 'v2-private',
|
||
'phone' => 'v2-private',
|
||
'twitter' => 'v2-private',
|
||
'organisation' => 'v2-private',
|
||
'role' => 'v2-private',
|
||
'headline' => 'v2-private',
|
||
'biography' => 'v2-private',
|
||
),
|
||
|
||
```
|
||
|
||
### Mise en place des caches (mémoire, fichiers)
|
||
|
||
Cette étape est optionnelle mais permet de gagner en réactivité.
|
||
Une partie des étapes est extraite de la documentation officielle le point d'entrée étant : https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html.
|
||
N'hésitez pas à vérifier le cas échéant que tout est encore d'actualité.
|
||
|
||
Attention ces étapes peuvent mettre très brièvement votre service hors d'usage. (En effet il est facile d'oublier une étape ou de faire une typo)
|
||
|
||
#### Mémoire
|
||
|
||
##### PHP
|
||
|
||
Dans le fichier de configuratino du pool fpm la limite de mémoire est passée à la valeur recommandée.
|
||
```ini
|
||
php_admin_value[memory_limit] = 512M
|
||
```
|
||
|
||
##### Apcu
|
||
|
||
```bash
|
||
apt install php-apcu
|
||
|
||
```
|
||
Ajouter la ligne suivante au fichier de configuration de nextcloud (config/config.php) en prenant garde à bien respecter le fait qu'il s'agisse d'un tableau (ne pas oublier de virgule par exemple). Plus d'informations peuvent être trouvées sur la documentation de php https://www.php.net/manual/fr/language.types.array.php.
|
||
|
||
```php
|
||
'memcache.local' => '\OC\Memcache\APCu',
|
||
```
|
||
|
||
##### Redis
|
||
|
||
|
||
Tout d'abord il faut installer le serveur redis et le module php correspondant.
|
||
|
||
```bush
|
||
apt install redis php-redis
|
||
```
|
||
|
||
Attention, ici la machine est protégée du réseau exterieur et pour ne pas avoir a modifier la configuration redis le choix est fait de ne pas écouter sur un socket local. Plus d'informations sont disponible dans la documentation de nextcloud.
|
||
|
||
```php
|
||
'memcache.distributed' => '\OC\Memcache\Redis',
|
||
'redis' => [
|
||
'host' => 'localhost',
|
||
'port' => 6379,
|
||
],
|
||
```
|
||
|
||
|
||
|
||
#### Fichiers
|
||
|
||
Attention cette section par du principe que redis installé et activé pour la mémoire. Si ce n'est pas le cas et que vous ne souhaitez pas l'activer (pour la mémoire) pensez à installer redis et rajouter les éléments de configuration redis avec les clefs/valeurs host et port dans la configuration de nextcloud.
|
||
Si le prérequis est satisfait il suffit de rajouter dans la configuration de nextcloud (config/config.php). La position des options dans le fichiers n'a pas d'importance. Cela peut être avant ou après le bloc intitulé redis.
|
||
|
||
```php
|
||
'filelocking.enabled' => true,
|
||
'memcache.locking' => '\OC\Memcache\Redis',
|
||
```
|
||
|
||
### Tâches planifiés
|
||
|
||
Pour la configuration des tâches planifiés nous utilisons la méthode de la documentation officielle : https://github.com/nextcloud/server/blob/master/config/config.sample.php
|
||
|
||
|
||
### Personalisation
|
||
|
||
La personnalisation du service se fait a travers l'interface de Nextcloud. Dans un souci d'efficacité la meilleure manière de faire est de se référer à la documentation officielle : https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/theming.html
|
||
|
||
|
||
### Mise à jour
|
||
|
||
Un script existe. Il est préparé pour fonctionner avec une installation apcu. Pour l'executer :
|
||
```bash
|
||
cd /var/www/nuage.chalec.org/script`
|
||
bash nextcloud.sh
|
||
```
|
||
Il contient les commandes suivantes de mise à jour
|
||
|
||
```bash
|
||
|
||
#!/bin/bash
|
||
set -o posix
|
||
|
||
function cdnextcloud()
|
||
{
|
||
cd /var/www/nuage.chalec.org/nextcloud
|
||
}
|
||
|
||
|
||
function update_app ()
|
||
{
|
||
cdnextcloud
|
||
sudo -u www-data php --define apc.enable_cli=1 occ maintenance:mode --on
|
||
sudo -u www-data php --define apc.enable_cli=1 occ app:update --all
|
||
sudo -u www-data php --define apc.enable_cli=1 occ maintenance:mode --off
|
||
cd ~
|
||
}
|
||
|
||
|
||
function update_core ()
|
||
{
|
||
cdnextcloud
|
||
cd ./updater
|
||
sudo -u www-data php --define apc.enable_cli=1 updater.phar --no-interaction
|
||
cdnextcloud
|
||
sudo -u www-data php --define apc.enable_cli=1 occ upgrade --no-interaction
|
||
}
|
||
|
||
function post_update ()
|
||
{
|
||
cdnextcloud
|
||
sudo -u www-data php --define apc.enable_cli=1 occ maintenance:mode --on
|
||
sudo -u www-data php --define apc.enable_cli=1 occ db:add-missing-primary-keys
|
||
sudo -u www-data php --define apc.enable_cli=1 occ db:add-missing-indices
|
||
sudo -u www-data php --define apc.enable_cli=1 occ db:add-missing-columns
|
||
sudo -u www-data php --define apc.enable_cli=1 occ db:convert-filecache-bigint
|
||
sudo -u www-data php --define apc.enable_cli=1 occ maintenance:mode --off
|
||
cd ~
|
||
}
|
||
|
||
update_app
|
||
update_core
|
||
post_update
|
||
update_app
|
||
|
||
```
|
||
Un cron permet de lancer la mise a jour régulièrement.
|
||
|
||
|
||
|
||
### Notes
|
||
|
||
Sans refaire une installation complète à chaque mise à jour il est possible de passer à coté de certaines évolutions, n'hésitez pas à ouvrir un ticket pour signaler une erreur ou une coquille car bien sur je suis huma(i)n et que cette documentation s'adresse à tous.
|
||
|