Introduction
Installation et configuration de nextcloud sur un serveur debian 10 (buster) . cette installation est
faite sur mon serveur auto hébergé, donc pas forcément adapté à tous.
Installation
* Télécharger avec wget dans /var/www/html
Puis dans le bon répertoire
Pour l’installation, j’ai suivi la doc du site de nextcloud
le premier vhost nextcloud.conf, qui sera modifié par la suite
ÀA la première connexion, j’ai quelques erreurs qui me demandent d’installer les paquets suivant :

J’ai maintenant ma première connexion
nextcloud vous demande un login et un pass plus le login et le pass de la BDD (mysql)
une fois entrée, j’ai changé l’image d’accueil et mis mon logo

Puis, je me rajoute au group www-data
pour que tous les utilisateurs du serveur puisse lire, supprimer et renommer fichiers, j’ai mis les data à 755
Créer la Base De Données
je vérifie que la base est bien là :
* Voici un listing de ce j’ai installé
dpkg -l | grep php
ii libapache2-mod-php7.3 7.3.9-1 deb10u1
amd64 server-side, HTML-embedded scripting language (Apache 2 module)
ii php 2:7.3+69
all server-side, HTML-embedded scripting language (default)
ii php-common 2:69
all Common files for PHP packages
ii php-curl 2:7.3+69
all CURL module for PHP [default]
ii php-mbstring 2:7.3+69
all MBSTRING module for PHP [default]
ii php-mysql 2:7.3+69
all MySQL module for PHP [default]
ii php-pear 1:1.10.6+submodules+notgz-1.1
all PEAR Base System
ii php-xml 2:7.3+69
all DOM, SimpleXML, WDDX, XML, and XSL module for PHP [default]
ii php7.3 7.3.9-1 deb10u1
all server-side, HTML-embedded scripting language (metapackage)
ii php7.3-cli 7.3.9-1 deb10u1
amd64 command-line interpreter for the PHP scripting language
ii php7.3-common 7.3.9-1 deb10u1
amd64 documentation, examples and common module for PHP
ii php7.3-curl 7.3.9-1 deb10u1
amd64 CURL module for PHP
ii php7.3-gd 7.3.9-1 deb10u1
amd64 GD module for PHP
ii php7.3-json 7.3.9-1 deb10u1
amd64 JSON module for PHP
ii php7.3-mbstring
7.3.9-1 deb10u1
amd64 MBSTRING module for PHP
ii php7.3-mysql
7.3.9-1 deb10u1
amd64 MySQL module for PHP
ii php7.3-opcache 7.3.9-1 deb10u1
amd64 Zend OpCache module for PHP
ii php7.3-readline 7.3.9-1 deb10u1
amd64 readline module for PHP
ii php7.3-sqlite3 7.3.9-1 deb10u1
amd64 SQLite3 module for PHP
ii php7.3-xml 7.3.9-1 deb10u1
amd64 DOM, SimpleXML, WDDX, XML, and XSL module for PHP
ii php7.3-zip 7.3.9-1 deb10u1
amd64 Zip module for PHP php7.3-fpm
dpkg -l | grep apache
ii apache2 2.4.38-3+deb10u1
amd64 Apache HTTP Server
ii apache2-bin 2.4.38-3+deb10u1
amd64 Apache HTTP Server (modules and other binary files)
ii apache2-data 2.4.38-3+deb10u1
all Apache HTTP Server (common files)
ii apache2-doc 2.4.38-3+deb10u1
all Apache HTTP Server (on-site documentation)
ii apache2-utils 2.4.38-3+deb10u1
amd64 Apache HTTP Server (utility programs for web servers)
ii libapache-poi-java 4.0.1-1
all Apache POI - Java API for Microsoft Documents
ii libapache-pom-java 18-1
all Maven metadata for all Apache Software projects
ii libapache2-mod-php7.3
7.3.9-1 deb10u1
amd64 server-side, HTML-embedded scripting language (Apache 2 module)
ii libapache2-mod-php 2:7.3+69
all server-side, HTML-embedded scripting language (Apache 2 module)
(default)
ii libapache2-mod-evasive 1.10.1-3
amd64 evasive module to minimize HTTP DoS or brute force attacks
ii apache2-ssl-dev 2.4.38-3+deb10u1
amd64 Apache HTTP Server (mod_ssl development headers)
dpkg -l | grep mysql
ii libdbd-mysql-perl:amd64 4.050-2
amd64 Perl5 database interface to the MariaDB/MySQL database
ii mysql-common 5.8+1.0.5
all MySQL database common files, e.g. /etc/mysql/my.cnf
ii php-mysql 2:7.3+69
all MySQL module for PHP [default]
ii php7.3-mysql 7.3.9-1 deb10u1
amd64 MySQL module for PHP
ii python3-pymysql 0.9.3-1
all Pure-Python MySQL Driver - Python 3.x
dpkg -l | grep mariadb
ii libmariadb3:amd64
Documentation - Wiki - http://debian-facile.org/
1:10.3.17-0+deb10u1
amd64
MariaDB database client binaries
ii mariadb-client-core-10.3
1:10.3.17-0+deb10u1
amd64
MariaDB database core client binaries
ii mariadb-common
1:10.3.17-0+deb10u1
all
MariaDB common metapackage
ii mariadb-server 1:10.3.17-0+deb10u1
all MariaDB database server (metapackage depending on the latest
version)
ii mariadb-server-10.3
1:10.3.17-0+deb10u1
amd64 MariaDB database server binaries
ii mariadb-server-core-10.3 1:10.3
IP Dynamique et DNS
Vu que ma box m’attribue des IP dynamique. Je suis allé récupérer mon apikey chez gandi :
Un copain m’a fait un script python qui récupère mon IP publique et qui la place dans ma zone DNS chez Gandi.
Le script en python3
#!/usr/local/bin/python3
# -*- coding: UTF-8 -*-
import pycurl
from io import BytesIO
import json
import pprint
import urllib.parse
apikey = 'sxxxxxxxxxxxxx'
buffer = BytesIO()
buffer1 = BytesIO()
curl = pycurl.Curl()
# Requete chez Gandi pour avoir l'ip du DNS
curl.setopt(pycurl.HTTPHEADER, [ "X-Api-Key: " + apikey ]);
curl.setopt(pycurl.WRITEDATA, buffer)
curl.setopt(pycurl.URL,
"https://dns.api.gandi.net/api/v5/domains/funambule.org/records/@/A")
curl.perform()
data = buffer.getvalue().decode('utf-8')
datajs = json.loads(data)
old_ip = datajs['rrset_values'][0]
# Requete chez ifconfig pour avoir l'ip, la vraie
curl.setopt(pycurl.URL, "https://ifconfig.me/all.json")
curl.setopt(pycurl.HTTPHEADER, [ "X-Api-Key: " + apikey ]);
curl.setopt(pycurl.WRITEDATA, buffer1)
curl.perform()
data1js = json.loads(buffer1.getvalue().decode('utf-8'))
new_ip = data1js['ip_addr']
# Les deux sont-elles les memes ?
if old_ip != new_ip:
# NON - Je supprime l'ancienne adresse
buffer2 = BytesIO()
curl.setopt(pycurl.HTTPHEADER, [ "Content-Type: application/json",
"X-Api-Key: " + apikey ])
curl.setopt(pycurl.CUSTOMREQUEST,'DELETE')
curl.setopt(pycurl.WRITEDATA, buffer2)
curl.setopt(pycurl.URL,
"https://dns.api.gandi.net/api/v5/domains/funambule.org/records/@/A")
curl.perform()
print("PUT -> " + buffer3.getvalue().decode('utf-8'))//
puis un crontab qui d’éclanche le script trés souvent
Déplacement de mes data dans un autre DD
mv nextcloud/data/
/home/cumulus/
et correction du fichier configconfig.php de nextcloud (il y en aura d’autres plus loin)
je remplace :
’datadirectory’ => ’/var/www/html/nextcloud/data’,
par
’datadirectory’ => ’/home/cumulus/data’,
dans le cloud, j’ai dans
"Avertissements de sécurité & configuration :"
"Il est important pour la sécurité et la performance de votre instance que celle-ci soit correctement configurée. Afin de vous > aider, votre instance Nextcloud effectue des vérifications automatiques.
Pour de plus amples informations, veuillez consulter la documentation liée.
Il y a quelques erreurs concernant votre configuration.
Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.
SQLite est actuellement utilisé comme système de gestion de base de données. Pour des
installations plus volumineuses, nous vous recommandons de migrer vers un autre système de
gestion de base de données. C’est particulièrement recommandé lorsque l’on utilise un client
bureau pour la synchronisation des fichiers. Pour migrer vers un autre type de base de données,
utilisez la ligne de commande : ’occ db:convert-type’ ou consultez la documentation ↗.
La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo.
Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur
pour forcer l’utilisation de HTTPS, comme expliqué dans nos conseils de sécurisation ↗."
Correction des avertissements
1) la redirection https
Pour que dehydrated -c fonctionne, il faut qu’apache2 fonctionne sur le port 80. il faut donc
désactivé nextcloud-ssl (heureusement qu’une girafe me l’a soufflé à l’oreille, je comprenais pas l’erreur)
Maintenant, mes clés privées et publiques ainsi que mon certificat seront disponibles dans
le répertoire /var/lib/dehydrated/certs/funambule.org
Réactivé nextcloud-ssl et relancé apache2
crontab pour dehydraded
cd /etc/cron.weekly/
touch dehydrated
vim dehydraded
# !/bin/bash
/usr/bin/dehydrated -c && systemctl reload apache2
chmod +x /etc/cron.weekly/dehydrated &&
le vhost nextcloud.conf modifié et simplifié, juste pour la redirection
<VirtualHost *:80>
ServerName funambule.org
ServerAlias www.funambule.org
RedirectMatch ^(.*)$ https://funambule.org/$1
</VirtualHost>
le vhost https dans /etc/apache2/sites-available/nextcloud-ssl.conf
Commencer le vhost en ajoutant la directive NameVirtualHost *:443 au début du fichier, puisque l’on peut generer plusieurs certificats pour la même machine
<VirtualHost *:443>
ServerAdmin lagrenouille@localhost
ServerName funambule.org
ServerAlias www.funambule.org
ServerAlias cumulus
TimeOut 6000
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /var/lib/dehydrated/certs/funambule.org/fullchain.pem
SSLCertificateKeyFile /var/lib/dehydrated/certs/funambule.org/privkey.pem
</IfModule>
DocumentRoot /var/www/html/funambule/
<Directory /var/www/html/funambule/>
Require all granted
</Directory>
ProxyRequests Off
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass /lufi/upload ws://localhost:8081/lufi/upload
ProxyPassReverse /lufi/upload ws://localhost:8081/lufi/upload
ProxyPass /lufi/download/ ws://localhost:8081/lufi/download/
ProxyPassReverse /lufi/download/ ws://localhost:8081/lufi/download/
ProxyPass /lufi/ http://localhost:8081/lufi/
ProxyPassReverse /lufi/ http://localhost:8081/lufi/
Alias /nextcloud /var/www/html/nextcloud
<Directory /var/www/html/nextcloud/>
Options +FollowSymLinks
AllowOverride all
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/nextcloud/
SetEnv HTTP_HOME /var/www/html/nextcloud/
</Directory>
Alias /privatebin /var/www/html/privatebin/
<Directory /var/www/html/privatebin/>
Options +FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Alias /compta /var/www/html/compta/dolibarr/htdocs/
<Directory /var/www/html/compta/dolibarr/htdocs/>
Options +FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Alias /diaporama /var/www/html/funambule/diaporama/
<Directory /var/www/html/funambule/diaporama/>
Options +FollowSymLinks
AllowOverride all
Require all granted
# MANU - 6/6/2020 - pour voir ce qui se passe
# LogLevel debug
</Directory>
Alias /adminer /var/www/html/adminer.php
<Directory /var/www/html/adminer.php>
Options +FollowSymLinks
AllowOverride all
Require all granted
</Directory>
ErrorLog /var/log/apache2/nextcloud/error.log
LogLevel warn
CustomLog /var/log/apache2/nextcloud/access.log combined
<ifModule mod_rewrite.c>
RewriteEngine On
</ifModule>
</VirtualHost>
2) Augmentation de la mémoire allouée à PHP
Vous aurez probablement un message concernant la mémoire du cache trop faible.
Configurez votre fichier /etc/php/7.3/fpm/php.ini .
Memory-limit 512
pendant que vous y êtes, augmentez aussi l’upload à votre goût :
upload_max_size 5000M
3) Le cache avec redis
Éditer le fichier : /var/www/chemin_de_votre_serveur/config/config.php et ajouter :
array(...,
'memcache.local' => '\\OC\\Memcache\\Redis', /* contient les scripts php
précompilés */
'filelocking.enabled' => 'true',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
'timeout' => 0,
'dbindex' => 0,
),
...
);
4) Installation des modules recommandés
Pour le message « Cette instance ne dispose pas de plusieurs modules PHP recommandés. Il est recommandé de les installer pour améliorer les performances, et la compatibilité.
k
5) Migration de SQLite vers MariaDB
Pour le message : » SQLite est actuellement utilisé comme système de gestion de base de
données. Pour des installations plus volumineuses, nous vous recommandons de migrer
vers un autre système de gestion de base de données. » xxxxxxx étant votre mot de passe
mysql
Pour avoir accès en ssh de l’extérieur, j’ai mis dans ma box à la configuration avancée/NAT/PAT
ssh interne 22 externe 2222
le fichier config.php
<?php
$CONFIG = array (
'instanceid' => 'xxxxxxxx',
'passwordsalt' => 'xxxxxxxxxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'trusted_domains' =>
array (
0 => 'funambule.org',
),
'datadirectory' => '/home/cumulus/data',
'dbtype' => 'mysql',
'version' => '16.0.5.1',
'overwrite.cli.url' => 'http://www.funambule.org/nextcloud',
'dbname' => 'nextcloud',
'dbhost' => '127.0.0.1',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'lagrenouille',
'dbpassword' => 'XXXXXXXXX',
'installed' => true,
'has_rebuilt_cache' => true,
'maintenance' => false,
'mail_from_address' => 'lagrenouille',
'mail_smtpmode' => 'smtp',
'mail_sendmailmode' => 'smtp',
'mail_domain' => 'chezlagrenouille.fr',
'mail_smtpauthtype' => 'LOGIN',
'memcache.local' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => 'true',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
'timeout' => 0,
'dbindex' => 0,
),
);
Une fois dans nextcloud, vous allez dans “applications” et vous activez la console, le
prompt est occ

synchronisez votre cloud sur votre bureau


Installation de collabora online sulr nextcloud
Toujours dans le bon repertoire
Création d’un sous domaine (cnam) chez gandi cname collabora.funambule.org
maintenant il faut généré un certif autosigné pour loolwsd
Le chown est important car key.pem est en 400 et par défaut il appartient à root, alors que loolwsd tourne sous le user lool
Rajout de l’alias collabora dans nextcloud/config.config.php à la suite de funambule.org
'trusted_domains' =>
array (
0 => 'funambule.org',
1 => 'collabora.funambule.org',
puis
systemctl restart loolwsd
systemctl restart apache2
J’ai du ouvrir les ports dans ma box, en plus de 22 interne et 2222 externe pour ssh, 80 et 443
et voila
La création d’un document office ouvre instantanément collabora