install nextcloud et auto-hébergement

par maurice

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