Installation de NextCloud sur le Public Cloud d'OVH(french post)
Les étapes pour déployer la solution de cloud fichier / coffre fort électronique en utilisant le serveur Nextcloud.
L’infrastructure Nextcloud ( version ‘16.0.4.1’ adaptée avec la fonctionnalité /newpassword) est composée de :
- un serveur Web (Nginx Debian9)
- le serveur PHP (PHP7.3-FPM Debian9)
- une instance de base de données (postgres 9.6 Debian9)
- un volume de données fichiers (openstack swift)
Le déploiement de cette infrastructure peut se faire sur l’offre Public Cloud OVH:
- un réseau privé pour isoler l’ensemble de cet infra
- 1 instance pour le serveur Web et PHP
- 1 instance distincte pour la base de données
- 1 Object storage (dupliqués sur 3 réplicas et facturation à l’usage) Le choix de séparer les instances de type Front (Web) et Back (Base de données) est dictée par un choix d’architecture pour faciliter la montée en charge (installation d’un load balancer en facade des instances Web, en conservant une instance dédiée pour le Back) , l’isolation des composants permettant l’archivage cohérent ( snapshot et cloud archive) un PCA (passage d’une région à une autre), et la sécurité avec si nécessaire un reverse proxy.
A. Installation des prerequis
0- Créer sa clé SSH
https://docs.ovh.com/fr/public-cloud/creation-des-cles-ssh/
Générer une paire de clés SSH (rsa longueur 4096) (par exemple sur linux/debian)
ssh-keygen -t rsa -b 4096
(importer sur son système / par ex sur linux dans ~/.ssh) importer la clé publique SSH dans la console OVH : https://horizon.cloud.ovh.net/project/key_pairs
1- Réseaux privés / Private network
Créer un réseau privé avec une interface par défaut , et un VLAN id Les IP du réseau sont gérés par DHCP par simplicité (pas besoin de fixer les IPs)
2- instance Postgresql
Il existe un choix entre héberger la base de données sur une instance Compute ou alors utiliser une CloudDB (service DBaas d’OVH) => pour des raisons de flexibilité de coût et d’usage (CloudDB est au minimum une instance à 512Mo), le démarrage du projet se fera sur une instance Compute
Documentation sur les instances Cloud Public: Premiers pas avec une instance Public Cloud
-renseigner l’adresse IP privée de postgres sans le DNS <nom domaine>.com cela eviter de coder l adresse IP dans les fichiers de config https://docs.ovh.com/fr/domains/editer-ma-zone-dns/
Modifier l'entrée A de postgres.\<domain>.com
-Se connecter en SSH sur l instance :
ssh debian@*ip publique*
https://docs.ovh.com/gb/en/public-cloud/first-login/#instructions
pour activer VNC, changer le mot de passe root https://docs.ovh.com/fr/public-cloud/passer-root-et-definir-un-mot-de-passe/
sudo passwd
- installer Postgresql
sudo apt-get install postgresql
- creer l utilisateur et l’instance de base de données: nextcloud
sudo -u postgres psql -c "SELECT version();"
sudo -u postgres createuser -P nextcloud
sudo -u postgres psql -d template1
psql (9.6.13)
Type "help" for help.
template1=# ALTER USER nextcloud CREATEDB;
template1=# CREATE DATABASE nextcloud16 OWNER nextcloud;
template1=# GRANT ALL PRIVILEGES ON DATABASE nextcloud16 to nextcloud;
WARNING: could not flush dirty data: Function not implemented
CREATE DATABASE
template1=# \q
- activer l ecoute sur l interface privé du serveur
sudo -u postgres vi /etc/postgresql/9.6/main/postgresql.conf
et modifier la ligne #listen_addresses = ‘localhost’ en listen_addresses = ‘postgres.<domain>.com’
- permettre les connexions provenant de la plage des adresses privées
sudo vi /etc/postgresql/9.6/main/pg_hba.conf
ajouter la ligne :
host all all 10.72.1.0/24 md5
- configurer le serveur en fonction de la taille du serveur
par exemple pour un serveur 2 cores et 7Go de RAM
shared_buffers = 1792MB (1/4 de la RAM) work_mem = 18MB (1/4 de la RAM / nb de connections simulatée)
- redemarrer postgres
sudo service postgresql restart
- faire en sorte que postgres redémarre à chaque reboot d instance
sudo update-rc.d postgresql enable
3- Object Storage
https://docs.ovh.com/gb/en/public-cloud/place-an-object-storage-container-behind-domain-name/
créer un Object storage XXXXX en mode private / non-public
conserver le mot de passe et le fichier openRC
4 - Instance serveur Front pour servir NextCloud
- créer et démarrer une instance Compute / Debian9
-renseigner l’adresse IP PUBLIC de cette instance sans le DNS <domaine>.com https://docs.ovh.com/fr/domains/editer-ma-zone-dns/
Modifier l'entrée A de coffre.<domaine>.com avec l adresse IP v4 Public
Modifier l'entrée AAAA de coffre.<domaine>.com avec l adresse IP v6 Public
-Se connecter en SSH sur l instance :
ssh debian@*ip publique*
- changer le mot de passe root
sudo passwd
- ajouter un user nextcloud
sudo adduser nextcloud
usermod -aG sudo nextcloud
su - nextcloud
-
install un point de montage sur l’object storage https://github.com/ovh/svfs/blob/master/docs/PCS.md
-
installer le package OVH pour supporter Swift
sudo apt-get install ruby fuse
wget https://github.com/ovh/svfs/releases/download/v0.9.1/svfs_0.9.1_amd64.deb .
sudo dpkg -i svfs_0.9.1_amd64.deb
- utiliser les variables décrites dans le fichier OpenRC openrc.sh https://docs.ovh.com/fr/public-cloud/acces-et-securite-dans-horizon/
et choisir un <nom>
sudo mkdir /mnt/<nom>
sudo chown nextcloud:nextcloud /mnt/<nom>
sudo mount -t svfs -o username=$OS_USERNAME,password=$OS_PASSWORD,tenant=$OS_TENANT_NAME,region=$OS_REGION_NAME,uid=nextcloud,gid=nextcloud <nom> /mnt/<nom>
5- NGINX
sur l’instance Serveur Front / Nextcloud
sudo apt-get install nginx
- utiliser le user nextcloud pour démarrer nginx
sudo vi /etc/nginx/nginx.conf
changer user www-data; en
user nextcloud;
- installer la configuration Nextcloud pour nginx
cp nextcloud.conf /etc/nginx/sites-enabled/
6- NGINX avec HTTPS
Lets encrypt fournit un certificat SSL au serveur NGINX
- ajouter un referentiel pour obtenir le certbot qui renouvelera le certificat SSL
sudo apt edit-sources
et ajouter les 2 lignes (ou décommentez du fichier sources.list): deb http://deb.debian.org/debian stretch-backports main contrib non-free deb-src http://deb.debian.org/debian stretch-backports main contrib non-free
sudo apt update
sudo apt install python-certbot-nginx -t stretch-backports
- obtenir un certificat SSL pour notre instance
sudo certbot --nginx -d coffre.xxxxx.com -d www.coffre.xxxxx.com
7 -php7.3-fpm
sur l’instance Serveur Front / Nextcloud
- ajouter la source officielle pour les packages PHP
sudo apt -y install lsb-release apt-transport-https ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.3.list
- installer PHP 7.3
sudo apt update
sudo apt upgrade -y
sudo apt -y install php7.3
- installer les modules complementaires PHP 7.3
sudo apt install php7.3-cli php7.3-fpm php7.3-json php7.3-pdo php7.3-zip php7.3-gd php7.3-mbstring php7.3-curl php7.3-xml php7.3-json
sudo apt install php7.3-pgsql php7.3-apc php7.3-apcu php7.3-imagick php7.3-imap php7.3-intl imagemagick
- installer le module Imagemagick pour gérer les logos custom
sudo apt-get install build-essential checkinstall && apt-get build-dep imagemagick -y
sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libmagickwand-dev
sudo apt update
- utiliser le user nextcloud pour démarrer php
sudo vi /etc/php/7.3/fpm/pool.d/www.conf
changer www-data en
listen.owner = nextcloud
listen.group = nextcloud
changer
;clear_env = no
en
clear_env = no
- augmenter la mémoire allouée pour PHP
sudo vi /etc/php/7.3/fpm/php.ini
changer memory_limit = 128M en
memory_limit = 512M
- augmenter le nombre de process allouées au traitement PHP (dans le cas où le serveur hébergeant le service “nextcloud” est un b2-7 / 2 vCores 7Go de RAM)
sudo vi /etc/php/7.3/fpm/pool.d/www.conf
pm.max_children = 70
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 35
- faire en sorte que php7.3-fpm et nginx redémarre à chaque reboot d instance
sudo update-rc.d php7.3-fpm enable
sudo update-rc.d nginx enable
8 - demarrer les serveurs
sudo service nginx start
sudo service php7.3-fpm start
B. Installation de Nextcloud
en version 16.0.4 / stable
documentation officielle Nextcloud16
0- Choix de la zone de stockage
Il existe de multiples possibilités pour représenter la zone de stockage des fichiers accessibles par NextCloud.
-espace disque en local du serveur nextcloud -point de montage réseau sur un SAN/NAS -technologie de Cloud Storage (Amazon S3, Openstack Swift)
OVH Public Cloud propose les conteneurs d’objet basé sur le standard Openstack Swift à tarif compétitif. ce qui assure une sureté de fonctionnement (3 replicas de la donnée), et la facilité pour la sauvegarde, l’archivage.
Nextcloud et Openstack Swift
Il existe 3 façons d’utiliser un conteneur d’objects Swift:
1. en Primary Storage :
Le primary storage est configuré directement dans Nextcloud config.php https://docs.nextcloud.com/server/15/admin_manual/configuration_files/primary_storage.html De façon à rendre l’accès exclusif à l’instance Nextcloud. C’est pourquoi, il faut s’assurer de sauvegarder la base de données Nextcloud , contenant les meta données, ainsi que la clé de chiffrement serveur permettant de déchiffrer à la volée les éléments/objets stockés dans le conteneur Swift
2. en dossier dans nextcloud par l ‘application “external storage support”
- installer la librairie pour accèder à Openstack Swift
sudo apt-get install smbclient
-
utiliser les variables décrites dans le fichier OpenRC openrc.sh
-
Aller dans Paramètres (icone haut et droit) et dans “Stockages externes”
creer un dossier Nom du dossier : OVHPublicCloud Stockage externe: Openstack Object STorage
Nom du service : swift Région: $OS_REGION_NAME Bucket: <nom>_01 (le nom d un des conteneurs objectstorage OVH) Nom d utilisateur: $OS_USERNAME Mot de passe: $OS_PASSWORD Tenant name: $OS_TENANT_NAME Identity endpoint URL: https://auth.cloud.ovh.net/v2.0/
3. en point de montage réseau avec OVH/svfs
https://github.com/ovh/svfs
1- installation de nextcloud
La version adaptée de nextcloud (avec /newpassword , Aide A la découverte / firstrunwizard et Customized Emails est disponible sur l’object storage
tar xvf nextcloud-server-<nom>.tar.gz
ou (partir d'une version officielle de nextcloud.org)
tar xvf nextcloud-n.x.y.tar.bz2
2- (si nécessaire) installation pour ré-initialiser Nextcloud
Afin de démarrer un serveur avec le seul compte admin, sans tenir compte de la base de données existante.
- créer un base de données vide , avec psql :
sudo -u postgres psql -d template1
psql (9.6.13)
Type "help" for help.
template1=# CREATE DATABASE nextcloud16 OWNER nextcloud;
- retirer ou renommer le fichier config/config.php
- créer un fichier vide config/CAN_INSTALL
Solliciter Nextcloud sur http://serveur_IP:Port/ afin de d’obtenir la page d’installation
3- (pour info) Fichier de configuration
Le fichier de configuration principal est config/config.php
4- Applications
APrès une connexion avec le compte admin de nextcloud Aller dans Applications (icone haut et droit) pour activer:
Aide A la Decouverte (FirstRunWizard adaptée) Theming Custom CSS Customized Emails Default encryption module
Theming & Custom CSS
Aller dans Paramètres (icone haut et droit) et dans “Personnaliser l’apparence”
Choisir les logos présents dans /nextcloud-server/themes/xxx.core/img et le contenui du fichier /nextcloud-server/themes/xxx.core/css/custom.css dans Custom CSS et cliquer sur Save
Securité:
Aller dans Paramètres (icone haut et droit) et dans “Sécurité” Activer le chiffrement coté serveur et Chiffrer l’espace de stockage principal
Bruteforce / protection contre l’attaque par force brute
Aller dans Paramètres (icone haut et droit) et dans “Sécurité” Ajouter l’adresse IP Publique de Sagis dans Liste blanche des IP pour attaque par force brute: 193.248.39.218
C. Configuration des tâches de fond
Dans la console d’administration, dans les Paramètres de base, il faut choisir le système en charge d’exécuter les travaux en arrière plan.
Par défaut, AJAX est choisi mais le paramètre recommandé est ‘cron’
Une explicatin précise est disponible ici
crontab -u nextcloud -e
Ajouter cette ligne
*/5 * * * * php -f /home/nextcloud/nextcloud-server/cron.php
CTRL^X
nextcloud@nextcloud-prod:~$ crontab -u nextcloud -l
D. Réinitialisation de Nextcloud
Pour démarrer un serveur Nextcloud avec une base de données réinitialisées , et aucun document enregistré:
sudo vi nextcloud-server/config/config.php
remplacer la ligne:
'installed' => true,
par
'installed' => false,
et
creer un fichier vide dans le répertoire config
sudo vi nextcloud-server/config/CAN_INSTALL
E. Environnement par défaut à la création d’un compte Client
Le répertoire par défaut est défini par le theming (défini dans config.php):
ls nextcloud-server/themes/sagis/core/skeleton
Personnel
https://docs.nextcloud.com/server/16/admin_manual/configuration_files/default_files_configuration.html