Installer nextcloud sur votre Raspberry Pi

Introduction

Logo de NextCloud
Logo de NextCloud

Nextcloud propose sa plate-forme de collaboration de contenu open source et auto-hébergée, combinant ce qu’il décrit comme une interface utilisateur facile pour les solutions de cloud computing grand public avec les mesures de sécurité et de conformité dont les entreprises ont besoin.

Nextcloud offre un accès universel aux données via des interfaces mobiles, de bureau et web, ainsi que des fonctions de communication et de collaboration sécurisées de nouvelle génération sur site, comme l’édition de documents en temps réel, le chat et les appels vidéo, ce qui les place sous le contrôle direct de l’informatique et les intègre à l’infrastructure existante

Prérequis

Difficulté : moyen Temps : 1h

  • Une Raspberry Pi 3b+ ou supérieur
  • Une carte SD de 16 Go ou plus
  • Raspbian Buster déjà installé
  • Une partition qui sera allouée au fichier data de nextcloud. cela permet de faciliter l’ajout de HDD en cas de manque d’espace. (optionelle)
  • Deux ou trois tasses de café

Bien, maintenant que tout ça est prêt, nous pouvons commencer.

Installation

La première chose que nous devons faire, c’est installer un serveur Web. C’est lui qui va entrer en contact avec le navigateur du client. Il est là pour répondre aux requêtes qu’on lui donne. Il en existe une petite dizaine, mais les deux principaux sont :

  • Apache
  • Nginx

Nginx est connue pour sa capacité à gérer un grand nombre de connexions, ce qui l’a rendu très populaire. Il est d’ailleurs utilisé par la plupart des serveurs qui reçoivent plusieurs milliers de requêtes par seconde. Apache est le serveur Web le plus utilisé et personnalisable notamment avec les fichiers “.htaccess”.

Dans ce tutoriel, nous utiliserons Apache comme serveur Web pour des soucis de facilité.

Nous avons aussi besoin d’une base de données pour y stocker des informations comme les utilisateurs et les évènements du calendrier… Les plus connues sont Mysql et Mariadb.

Dans ce tutoriel, nous utiliserons Mariadb mais vous pouvez prendre Mysql si vous le désirez, les commandes étant 100% compatibles entre les deux logiciels.

Nous aurons aussi besoin de php, là rien à dire dessus.

Nous allons commencer par installer la base de donnée et le serveur Web :

apt-get install apache2 mariadb-server libApache2-mod-php7.3

Puis php et quelques modules :

apt-get install php7.3 php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-mbstring

apt-get install php7.3-intl php-imagick php7.3-xml php7.3-zip

Apache2 Debian Default Page
Page Web par défaut après installation de Apache2

Nous allons vérifier qu’Apache s’est bien installé. Pour cela ouvrez votre naviguateur et tapez dans l’URL l’IP de votre serveur. Une page comme celle-ci devrait apparaître :Si ce n’est pas le cas, essayez de démarrer Apache avec sudo systemctl start Apache2

Une fois installé, nous allons récupérer les fichiers Nextcloud.

Il suffit de se rendre sur cette page : https://nextcloud.com/install/#instructions-server et de faire un clic droit puis copier l’adresse lien.

Dans un terminal du serveur nous pouvons lancer la commande suivante :
wget https://download.nextcloud.com/server/releases/nextcloud-xxx.zip
(évidemment, utilisez la bonne adresse en remplaçant les “xxx” par la version idoine”)

Le fichier va alors se télécharger dans le répertoire où vous êtes.
Le fichier actuellement compressé est inutilisable, nous devons donc le décompresser et le changer de répertoire.

sudo unzip nextcloud-xxx.zip -d /var/www/

La commande unzip avec l’option -d permet d’extraire le fichier dans le répertoire donné, ici : /var/www/ qui est le dossier réservé aux sites-Web. Vous pouvez, si vous le souhaitez changer de répertoire, mais il n’y a pas d’obligation.
Maintenant que notre fichier est prêt, nous devons nous assurer qu’Apache puisse y avoir accès avec la commande suivante :
sudo chown -R www-data:www-data /var/www/

Configurer Apache

Nous devons commencer par activer quelques modules nécessaire au bon fonctionnement de Nextcloud.
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime

Une fois les modules activés, nous pouvons nous occuper de la configuration d’Apache. Les fichiers de configurations d’Apache se trouvent généralement dans /etc/Apache2/. Nous allons éditer le fichier suivant /etc/Apache2/sites-available/000-default.conf.

Il devrait contenir quelque chose de similaire à ça :

<VirtualHost *:80>
 # The ServerName directive sets the request scheme, hostname and port that
 # the server uses to identify itself. This is used when creating
 # redirection URLs. In the context of virtual hosts, the ServerName
 # specifies what hostname must appear in the request's Host: header to
 # match this virtual host. For the default virtual host (this file) this
 # value is not decisive as it is used as a last resort host regardless.
 # However, you must set it for any further virtual host explicitly.
 #ServerName www.example.com 

 ServerAdmin Webmaster@localhost 
 DocumentRoot /var/www/html

 # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
 # error, crit, alert, emerg.
 # It is also possible to configure the loglevel for particular
 # modules, e.g.
 #LogLevel info ssl:warn

 ErrorLog ${Apache_LOG_DIR}/error.log
 CustomLog ${Apache_LOG_DIR}/access.log combined

 # For most configuration files from conf-available/, which are
 # enabled or disabled at a global level, it is possible to
 # include a line for only one particular virtual host. For example the
 # following line enables the CGI configuration for this host only
 # after it has been globally disabled with "a2disconf".
 #Include conf-available/serve-cgi-bin.conf
</VirtualHost *:80>
 # vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

La balise <VirtualHost *:80> spécifie à Apache d’écouter sur le port 80 (http).
Je vous laisse décommenter la ligne suivante : ServerName www.example.com et mettre votre nom de domaine si vous en avez un.
ServerAdmin Correspond à votre email. DocumentRoot est le répertoire de nos fichiers Web, ici c’est /var/www/nextcloud/
Vous devez donc avoir un fichier qui ressemble à cela :

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    ServerName www.domaine.com
    ServerAdmin admin@domaine.com
    DocumentRoot /var/www/nextcloud
    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn
    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

Nous avons aussi besoin de rajouter quelques petites règles supplémentaires pour la sécurité de notre serveur qui s’appliquera sur le port 80 (http) et 443 (https). Pour cela nous allons tout d’abord créer un autre fichier de configuration.
touch /etc/Apache2/sites-available/nextcloud.conf

Puis nous allons l’éditer avec nano.
nano /etc/Apache2/sites-available/nextcloud.conf

et y mettre ceci :

Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>

Penser à modifier les valeurs en fonction de votre configuration.
Require all granted
Permet d’autoriser toute les IP à s’y connecter.
AllowOverride All
Indique qu’il y a des fichiers de configuration externe ( fichier .htaccess) qui sont présents et qu’Apache doit les lire.
Nous devons ensuite activer la nouvelle configuration avec :
a2ensite nextcloud.conf
Puis nous redémarrons le service Apache pour appliquer les changements :
sudo systemctl restart Apache2

Configurer Mariadb

Maintenant que la configuration d’Apache nous pouvons nous attaquer à mariadb 🙂
Nous allons commencer par terminer la configuration de mariadb avec la commande ci-dessous :
mysql_secure_installation

Mysql va alors nous poser tout un tas de question auquel il va falloir répondre.
Set root password? [Y/n] :
Y

Remove anonymous users? [Y/n] :
Y

Disallow root login remotely? [Y/n] :
Y

Remove test database and access to it? [Y/n] :
Y

Reload privilege tables now? [Y/n] :
Y

Voici le résumé des réponses :

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

Nous avons aussi besoin de créer un autre utilisateur spécifique à Nextcloud. Rentrons pour cela dans mysql en rentrant simplement : mysql Puis créer l’utilisateur avec :
CREATE USER 'nextcloud_user'@'localhost' IDENTIFIED BY
'password';

Bien sûr, n’oubliez pas de changer de mot de passe 🙂
Puis la base de donnée :
CREATE DATABASE IF NOT EXISTS nextcloud_db CHARACTER SET utf8mb4 COLLATE
utf8mb4_general_ci;

Puis nous donnons les droits à notre utilisateur Nextcloud :
GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud_user'@'localhost';
On applique les changements :
FLUSH PRIVILEGES;

Configurer Nextcloud

Bien, maintenant il ne reste plus qu’à nous connecter sur notre site Web 🙂
Rentrer l’adresse IP de votre serveur dans votre naviguateur et… magie cette page devrait apparaître :

Page de configuration de NextCloud
Page de configuration de NextCloud

Si c’est le cas bravo … sinon … c’est que vous avez loupé un truc. 🙂

Là, rien de plus simple. Entrez votre nouvel identifiant et mot de passe (Ce compte est un compte administrateur. Ne l’utilisez pas comme un compte personnel !!)
Pour le dossier data, deux possibilitées :
Soit vous avez créé une autre partition pour le dossier data, dans ce cas changez le répertoire du dossier (N’oubliez pas de donner les droits à Apache avec sudo chown -R www-data:www- data /votre/partition !!) ou sinon vous pouvez laisser par défaut.
Pour le reste, mettez les infos qu’il nous demande :
Utilisateur de la base de donnée : nextcloud_user
Mot de passe de l'utilisateur : password
Nom de la base de donnée : nextcloud_db

Ce n’est là qu’un exemple, mettez les informations que vous avez défini plus haut !! Une fois complété, vous pouvez valider. Remarquez que Nextcloud vous demande si vous voulez installer des plugins comme le calendrier, only-office et autre ; à vous de choisir.

Roulement de tambour …

Première connexion à NextCloud
Première connexion à NextCloud

OUI !!!!!
Cependant ce n’est que le commencement 🙂

Configurer le cache

Pour que Nextcloud soit plus performant, il est recommandé de configurer une mémoire cache. Elle permet de faciliter l’accès aux fichiers dans le temps.
Pour cela il suffit d’installer le module php suivant : php-apcu
Puis de rajouter cette ligne 'memcache.local' => '\OC\Memcache\APCu', dans le config.php présent dans la racine de votre installation dans le dossier config, soit
/var/www/nextcloud/config/config.php dans notre exemple.
Le fichier config.php est un fichier de configuration, c’est là où tous les paramètres de Nextcloud comme la base de donnée utilisé, le serveur smpt pour l’envoi d’email et encore plein d’autres paramètres y sont stockés.
Puis sudo systemctl restart Apache2 pour appliquer.

Basculer en https

Comme vous avez pu le remarquer, il y a en haut à gauche dans votre naviguateur un petit message vous indiquant que votre connection n’est pas sécurisée. En effet pour le moment toute les informations circulent en clair, ce qui veut dire que, dans la théorie, tout le monde peut voir ce qui ce passe. Ce qui n’est pas franchement génial.
La solution : passer en https afin de rendre illisible l’information afin que personne ne puisse la lire.
Nous allons commencer par activer le module ssl dans Apache :
a2enmod ssl
Puis modifier le fichier /etc/Apache2/site-available/000-default.conf et rajouter la ligne suivante :
Redirect permanent / https://votre-ip-ou-nom-de-domaine/
Votre fichier doit maintenant ressembler à ceci :

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    ServerName www.domaine.com
    ServerAdmin admin@domaine.com
    Redirect permanent / https://127.0.0.1/
    DocumentRoot /var/www/nextcloud
    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn
    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

Nous avons aussi besoin d’activer la configuration pour l’https :
a2ensite default-ssl.conf
Puis nous devons l’éditer :
nano /etc/Apache2/site-available/default-ssl.conf
Vous devriez avoir ceci :

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin Webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/Apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
#SSLCertificateChainFile /etc/Apache2/ssl.crt/server-ca.crt
# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/ssl/certs/
#SSLCACertificateFile /etc/Apache2/ssl.crt/ca-bundle.crt
# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/Apache2/ssl.crl/
#SSLCARevocationFile /etc/Apache2/ssl.crl/ca-bundle.crl

# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10

# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables:
SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment
# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
# Similarly, one has to force some clients to use HTTP/1.0 to workaround
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
# "force-response-1.0" for this.
# BrowserMatch "MSIE [2-6]" \
# nokeepalive ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
# vim: syntax=Apache ts=4 sw=4 sts=4 sr noe

Dans un premier temps modifions les informations, comme le chemin de notre site Web :

DocumentRoot "/var/www/nextcloud/"

Rajoutons ceci :

ServerName www.domaine.com
ServerAdmin admin@domaine.com

Bien que là nous ayons tous les éléments pour être en https, il est encore possible, en cas d’attaque de type ‘man-in-the-middle’, de rediriger le trafic vers http. Pour empêcher cela nous devons ajouter ces trois lignes :

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15552000;
includeSubDomains"
</IfModule>

Votre fichier doit maintenant ressembler à cela :

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot "/var/www/nextcloud/"
ServerName www.domaine.com
ServerAdmin admin@domaine.com
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000;
includeSubDomains"
</IfModule>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/Apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
#SSLCertificateChainFile /etc/Apache2/ssl.crt/server-ca.crt
# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/ssl/certs/
#SSLCACertificateFile /etc/Apache2/ssl.crt/ca-bundle.crt

# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/Apache2/ssl.crl/
#SSLCARevocationFile /etc/Apache2/ssl.crl/ca-bundle.crl

# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10
# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables: SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment variables.
# Per default this exportation is switched off for performance reasons,
# because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only.
# o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
# SSL Protocol Adjustments:
# The safe and default but still SSL/TLS standard compliant shutdown
# approach is that mod_ssl sends the close notify alert but doesn't wait for
# the close notify alert from client. When you need a different shutdown
# approach you can use one of the following variables:
# o ssl-unclean-shutdown:
# This forces an unclean shutdown when the connection is closed, i.e. no
# SSL close notify alert is send or allowed to received. This violates
# the SSL/TLS standard but is needed for some brain-dead browsers. Use 
# this when you receive I/O errors because of the standard approach where
# mod_ssl sends the close notify alert.
# o ssl-accurate-shutdown:
# This forces an accurate shutdown when the connection is closed, i.e. a
# SSL close notify alert is send and mod_ssl waits for the close notify
# alert of the client. This is 100% SSL/TLS standard compliant, but in
# practice often causes hanging connections with brain-dead browsers. Use
# this only for browsers where you know that their SSL implementation
# works correctly.
# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
# Similarly, one has to force some clients to use HTTP/1.0 to workaround
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
# "force-response-1.0" for this.
# BrowserMatch "MSIE [2-6]" \
# nokeepalive ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
# vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

Rechargez la configuration avec :

sudo systemctl restart Apache2

Puis vous pouvez vous connecter à votre serveur en https.

Image montrant une erreur du fait du certificat auto-signé
Avertissement en lien avec le certificat auto-signé

Oups !!!

Non, c’est normal ! Et oui, nous sommes avec un certificat auto-signé c’est donc à nous de le certifier. Nous avons juste besoin d’aller dans “avancé” puis accepter le certificat. Et voilà nous somme sur Nextcloud en https.

Problèmes connus

  • database is missing some indexes
The database is missing some indexes. Due to the fact that adding
indexes on big tables could take some time they were not added
automatically. By running "occ db:add-missing-indices" those missing
indexes could be added manually while the instance keeps running.
Once the indexes are added queries to those tables are usually much faster.
- Missing index "calendarobject_calid_index" in table "oc_calendarobjects_props".
- Missing index "schedulobj_principuri_index" in table "oc_schedulingobjects".

Exécutez la commande suivante :
sudo -u www-data php /votre/dossier/nextcloud/occ db:add-missing-indices

  • Some columns in the database are missing
Some columns in the database are missing a conversion to big int.
Due to the fact that changing column types on big tables could take some
time they were not changed automatically. By running 'occ db:convert-filecache-
bigint'
those pending changes could be applied manually. This operation needs to
be made while the instance is offline. For further details read the
documentation page about this.

    mounts.storage_id
    mounts.root_id
    mounts.mount_id

Exécutez la commande suivante :
sudo -u www-data php /votre/dossier/nextcloud/occ db:convert-filecache-bigint

  • PHP memory limit is below
The PHP memory limit is below the recommended value of 512MB.

Editer le fichier suivant /etc/php/7.3/Apache2/php.ini, chercher la ligne memory_limit (CTRL + w avec nano) puis remplacer la valeur par 512M.
Redémarrer Apache avec :
sudo systemctl restart Apache2

Aller plus loin

Nextcloud depuis l’extérieur

Avoir accès à votre serveur Nextcloud en local c’est bien, mais depuis l’extérieur c’est mieux. 🙂
Ce n’est pas ici l’objet de ce tuto de vous montrer comment faire, car les manipulation varie en fonction de votre opérateur et des box. Une chose est sûre, c’est qu’il faut ouvrir les ports 80/tcp et 443/tcp dans les tables NAT/PAT, avoir une IP statique afin d’éviter de se connecter chez le voisin à chaque fois que votre box redémarre (c’est un service qui peut être payant selon votre opérateur) et n’oubliez pas d’autoriser l’IP dans le config.php de votre serveur Nextcloud.

Certifier le certificat

Bien, maintenant que votre serveur fonctionne à merveille, vous voudriez peut-être le rendre plus facile d’accès. Par exemple quand vous vous connectez, autoriser à chaque fois le certificat peut-être redondant, dans ce cas la certification du certificat s’impose. Là encore ce n’est pas le but de ce tuto de vous montrer comment faire mais il y a des solutions comme Let’s encrypt qui le propose gratuitement.

Toujours plus d’espace

Même s’ il éxiste des cartes SD de 250 Go, un jour vous vous sentirez sûrement à l’étroit. Il éxiste des outils comme mhddfs qui vont vous permettre de fusionner les partitions entre-elles. Je vous renvoie vers ce tuto pour plus d’informations : Mhddfs – Combine Several Smaller Partition into One Large Virtual Storage

Fin 🙂

2 commentaires à propos de “Installer nextcloud sur votre Raspberry Pi”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*