Installation de Nextcloud 12 sur Arch Linux

Arch Linux ARM et Nextcloud 12 sur Raspberry Pi

Installation de Nextcloud 12 (avec certbot)

Pages 1 - 2 - 3 - 4

arch_cloud

Sur la base d'un serveur LAMP avec php-fpm sur une distribution Arch Linux, guide d'installation de Nextcloud.

Afin d'améliorer la sécurité de notre nuage privé, une explication sur l'installation d'un certificat de confiance gratuit Let's Encrypt (certbot) est également donnée.

Nous pourrons ainsi accéder en https à Nextcloud sur notre serveur.

 

Configuration de php pour Nextcloud

Sur le serveur web LAMP avec php-fpm, nous allons devoir ajouter et initialiser des extensions au langage PHP pour qu'il soit utilisable par Nextcloud :

$ sudo pacman -S php-gd php-intl php-mcrypt php-apcu
$ sudo nano /etc/php/php.ini

 

Dans la liste des extensions, décommenter les extensions suivantes si elles ont un ; :

extension=bz2.so
extension=curl.so
extension=gd.so
extension=iconv.so
extension=intl.so
extension=mcrypt.so
extension=pdo_mysql.so
extension=xmlrpc.so
extension=zip.so

 

Création d'un Virtual Host pour Nextcloud

Plutôt que de mettre l'application Nextcloud dans la racine du serveur (/srv/http), nous allons créer un hôte virtuel.

Ainsi, nous garderons la possibilité d'installer un autre service web sur le serveur par la suite.

$ sudo mkdir /etc/httpd/conf/vhosts

 

Nous allons maintenant créer un hôte virtuel accessible en http pour Nextcloud :

$ sudo nano /etc/httpd/conf/vhosts/nextcloud

Remplacer les données en rouge par votre configuration

<VirtualHost *:80>
 ServerAdmin webmaster@nextcloud-myweb.duckdns.org
 DocumentRoot "/srv/http/nextcloud"
 ServerName nextcloud-myweb.duckdns.org
 ServerAlias nextcloud-myweb.duckdns.org
 ErrorLog "/var/log/httpd/nextcloud-myweb-error_log"
 CustomLog "/var/log/httpd/nextcloud-myweb-access_log" common

<Directory "/srv/http/nextcloud">
 Options +FollowSymlinks
 AllowOverride All
 <IfModule mod_dav.c>
 Dav off
 </IfModule>

SetEnv HOME /srv/http/nextcloud
 SetEnv HTTP_HOME /srv/http/nextcloud
 Satisfy Any
 </Directory>
</VirtualHost>

 

Nous allons maintenant adapter le serveur Apache à notre configuration de Nextcloud :

$ sudo nano /etc/httpd/conf/httpd.conf

Décommenter la ligne suivante :

LoadModule rewrite_module modules/mod_rewrite.so

Et ajouter à la fin du fichier :

#Enabled Vhosts:
Include conf/vhosts/nextcloud

 

Réinitialiser et vérifier Apache et php-fpm :

$ sudo systemctl restart httpd php-fpm
$ sudo systemctl status httpd php-fpm

Installation de Nextcloud

 

Arch Linux propose un paquet Nextcloud. Je préfère utiliser directement le paquet téléchargé depuis le site de Nextcloud.

$ mkdir download
$ cd download/

On installe les applications nécessaires pour télécharger Nextcloud, le dézipper et le copier :

$ sudo pacman -S wget unzip rsync

On télécharge Nextcloud ainsi que le fichier sha256 correspondant afin de vérifier son intégrité :

$ wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip

$ wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip.sha256

$ sha256sum -c nextcloud-12.0.0.zip.sha256
 nextcloud-12.0.0.zip: Réussi

 

Nous allons maintenant décompresser puis copier Nextcloud dans son répertoire définitif  et rendre le serveur apache propriétaire de l'installation :

$ unzip nextcloud-12.0.0.zip
$ sudo rsync -avP nextcloud/ /srv/http/nextcloud/
$ sudo chown http:http /srv/http/nextcloud/ -Rv

 

Selon les conseils du site Nextcloud, nous mettrons les données de notre nuage privé dans un répertoire séparé :

$ sudo mkdir /srv/http/data
$ sudo chown http:http /srv/http/data

 

Création de la base de données pour Nextcloud

$ mysql -u root -p
Enter password:

Donner le mot de passe root de MariaDb défini lors de l'installation du serveur LAMP.

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.1.21-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Taper les instructions suivantes en remplaçant les données en rouge par vos propres choix :

MariaDB [(none)]> create database nextcloud;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create user adminmyweb@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all privileges on nextcloud.* to adminmyweb@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit;
Bye

 

Nous devons ajouter des instructions à MariaDb pour qu'il accepte le format de langage UTF-8 ;

$ sudo nano /etc/mysql/my.cnf

 

Dans la section commençant par [mysqld], rajouter les lignes suivantes :

# ajouté pour utiliser UTF-8
init_connect = 'SET collation_connection = utf8_general_ci,NAMES utf8'
collation_server = utf8_general_ci
character_set_client = utf8
character_set_server = utf8

 

On redémarre et on vérifie MariaDb :

$ sudo systemctl restart mysqld

$ sudo systemctl status mysqld

Installation d'un certificat de confiance Let's Encrypt (certbot)

 

Nextcloud est d'ores et déjà fonctionnel avec les instructions précédentes.

Cependant, notre nuage personnel contenant des données privées, nous allons maintenant le sécuriser en utilisant le protocole https qui va chiffrer les échanges.

 

Configuration de Apache pour le HTTPS

$ sudo nano /etc/httpd/conf/httpd.conf

Vers le début du fichier, sous Listen 80 pour le port http, nous ajoutons le port https :

Listen 443

Dans la liste des modules, décommenter les deux suivants :

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

 

Réinitialiser et vérifier Apache et php-fpm :

$ sudo systemctl restart httpd php-fpm
$ sudo systemctl status httpd php-fpm

Installation de l'application certbot

Certbot est le robot d'installation de certificat de confiance Let's Encrypt.

$ sudo pacman -S certbot

 

Nous allons maintenant générer le certificat pour notre site Nextcloud :

$ sudo certbot certonly --webroot -w /srv/http/nextcloud

 

Rentrer une adresse mail au prompt :

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):contact@soozx.fr

 

Accepter les termes du service :

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

 

Accepter ou non de recevoir des mails d'information de Let's Encrypt :

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y

 

Entrer l'adresse web choisie antérieurement pour votre instance Nextcloud :

Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel):nextcloud-myweb.duckdns.org

 

La certification est lancée. Repérer le chemin du certificat, nous devrons le recopier plus tard :

Using the webroot path /srv/http/nextcloud for all unmatched domains.
Waiting for verification...
Cleaning up challenges


IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/nextcloud-myweb.duckdns.org/fullchain.pem.
 Your cert will expire on 2017-08-21. To obtain a new or tweaked
 version of this certificate in the future, simply run certbot
 again. To non-interactively renew *all* of your certificates, run
 "certbot renew"
 - Your account credentials have been saved in your Certbot
 configuration directory at /etc/letsencrypt. You should make a
 secure backup of this folder now. This configuration directory will
 also contain certificates and private keys obtained by Certbot so
 making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
 Donating to EFF: https://eff.org/donate-le

 

Le certificat est valable pour 3 mois. Pour installer un renouvellement automatique, nous allons utiliser des instructions pour systemd :

$ sudo nano /etc/systemd/system/certbot.service
[Unit]
Description=Renouvellement certificat Let's Encrypt

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
ExecStartPost=/bin/systemctl reload httpd.service
$ sudo nano /etc/systemd/system/certbot.timer
[Unit]
Description=Renouvellement quotidien du certificat Let's Encrypt

[Timer]
OnCalendar=daily
RandomizedDelaySec=1day
Persistent=true

[Install]
WantedBy=timers.target
$ sudo systemctl enable certbot.timer
$ sudo systemctl start certbot.timer
$ sudo systemctl status certbot.timer

Configuration de Nextcloud pour le HTTPS

Il faut maintenant indiquer à Nextcloud la configuration pour le HTTPS dans le Virtual Host que nous avons créé à l'étape précédente :

$ sudo nano /etc/httpd/conf/vhosts/nextcloud

On rajoute une ligne dans le <VirtualHost *:80> après la ligne ServerAlias :

ServerAlias nextcloud-myweb.duckdns.org
 Redirect 301 / https://nextcloud-myweb.duckdns.org
 ErrorLog "/var/log/httpd/nextcloud-myweb-error_log"

 

Et à la fin du fichier on rajoute un nouveau Virtual Host en faisant attention de bien indiquer le bon chemin pour le certificat Let's Encrypt :

<VirtualHost *:443>
 ServerAdmin webmaster@nextcloud-myweb.duckdns.org
 DocumentRoot "/srv/http/nextcloud"
 ServerName nextcloud-myweb.duckdns.org:443
 ServerAlias nextcloud-myweb.duckdns.org:443
 ErrorLog "/var/log/httpd/nextcloud-myweb-error_log"
 CustomLog "/var/log/httpd/nextcloud-myweb-access_log" common

<Directory "/srv/http/nextcloud">
 Options +FollowSymlinks
 AllowOverride All
 <IfModule mod_dav.c>
 Dav off
 </IfModule>

SetEnv HOME /srv/http/nextcloud
 SetEnv HTTP_HOME /srv/http/nextcloud
 Satisfy Any
 </Directory>

SSLEngine on
 SSLCertificateFile "/etc/letsencrypt/live/nextcloud-myweb.duckdns.org/fullchain.pem"
 SSLCertificateKeyFile "/etc/letsencrypt/live/nextcloud-myweb.duckdns.org/privkey.pem"

Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

</VirtualHost>

 

On redémarre Apache et on vérifie le fonctionnement :

$ sudo systemctl restart httpd php-fpm
$ sudo systemctl status httpd php-fpm

 

Avant de lancer la première ouverture de Nextcloud, nous configurons aussi php pour qu'il fonctionne avec un cache apcu (cela permet d'améliorer les performances) :

$ sudo nano /etc/php/conf.d/apcu.ini

On décommente (en enlevant le ";") la 1ère ligne :

extension=apcu.so
 ; install php-apcu-bc and enable apc.so for APC compatibility
 ;extension=apc.so
et on rajoute à la fin les deux lignes suivantes :
 apc.ttl=7200
 apc.enable_cli=1
$ sudo systemctl restart httpd php-fpm

$ sudo systemctl status httpd php-fpm

Premier lancement de Nextcloud

 

Tout est maintenant prêt pour effectuer le premier lancement de Nextcloud.

Pour l'étape suivante, nous aurons besoin de nous munir des identifiants créés avec la base de données MariaDb pour Nextcloud (dans cet exemple : base de données nextcloud, utilisateur adminmyweb, mot de passe password).

Dans un navigateur, on se connecte sur notre serveur nextcloud :

http://nextcloud-myweb.duckdns.org

 

Cela va lancer l'installation complète de Nextcloud sur le serveur. On en profite pour vérifier que la connexion a bien été redirigée en https.

 

Nous arrivons sur la page suivante :

 

page web installation nextcloud

 

Dans la partie Create an admin account en haut, nous choisissons un nom d'utilisateur (qui sera administrateur) et un mot de passe fort. C'est avec cet identifiant que nous nous connecterons ensuite à notre nuage personnel. Il faut donc bien le mémoriser.

 

Dans la cartouche suivante (Data folder), modifier

/srv/http/nextcloud/data

par

/srv/http/data

(puisque nous avons changé le répertoire par défaut précédemment).

 

Puis dans les cartouches en bas, donner le nom d'utilisateur de la base de données MariaDb (ici adminmyweb), son mot de passe et enfin le nom de la base de données (ici nextcloud).

On laisse localhost et on clique sur Finish setup.

 

L'installation va se poursuivre jusqu'à l'ouverture de l'instance de Nextcloud. Si jamais Nextcloud vous affiche une page d'erreur, recharger la page une fois que le Pi ne sera plus actif.

Fin de l'installation de Nextcloud.

Après l'installation, Nextcloud s'ouvre sur la page d'accueil.

En haut à droite de la fenêtre, cliquer sur la roue dentée des paramètres puis sur Admin.

nextcloud 12 administration

Sur la page qui s'ouvre, vérifier qu'il n'y a pas d'alertes de sécurité. Nextcloud devrait uniquement afficher qu'il n'y a ni cache mémoire configuré, ni cache PHP (OPcache).

Nous remédierons à ces anomalies après.

nextcloud 12 avertissements

Cliquer de nouveau sur la roue dentée des paramètres et choisir l'option Personal.

nextcloud 12 onglet personal

Entrer une adresse mail valide (le mot de passe de l'utilisateur principal de nextcloud va nous être demandé). Cette adresse mail servira pour ré-initialiser le mot de passe de nextcloud si nous l'avons perdu.

On change ensuite la langue de l'interface.

nextcloud adresse mail

 

 

Sur le Pi, nous achevons la configuration de Nextcloud :

$ sudo nano /srv/http/nextcloud/config/config.php

 

À la fin du fichier, sous la ligne

'installed' => true,

on ajoute :

'installed' => true,
'logtimezone' => 'Europe/Paris',
'logfile' => '/var/www/data/nextcloud.log',
'loglevel' => 2,
'log_authfailip' => true,
'memcache.local' => '\OC\Memcache\APCu',
'auth.bruteforce.protection.enabled' => true,
);

Ctrl-o, Ctrl-x pour fermer et enregistrer.

Après avoir enregistré les modifications :

root@myweb:~ # exit

 

Configuration du cache php (OPcache)

On va modifier le fichier php.ini pour cette configuration (après en avoir fait une copie de sauvegarde)

$ sudo nano /etc/php/php.ini

 

Décommenter (enlever le ";" en début de ligne) :

extension=apcu.so

 

Aller ensuite à la section concernant [opcache] (on peut utiliser Ctrl-w pour faire une recherche sur le terme opcache) et modifier ou décommenter selon le modèle suivant :

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; The OPcache shared memory storage size.
opcache.memory_consumption=128

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=8

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 100000 are allowed.
opcache.max_accelerated_files=10000


(...)


; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=1

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
opcache.save_comments=1

 

Ctrl-o, Ctrl-x pour enregistrer et quitter.

 

$ sudo systemctl restart httpd php-fpm
$ sudo systemctl status httpd php-fpm

 

Si on rafraîchit dans la console d'administration dans le navigateur, le message d'avertissement concernant le cache devrait avoir disparu.

 

Bravo, vous avez mené à bien l'installation de Nextcloud 12 sur Arch Linux (ARM).

Pour toute question, suggestion ou commentaire, merci d'utiliser le formulaire de contact.

2 réponses

  1. misterhur dit :

    Bonjour,
    je viens de réinstaller nextcloud sur mon raspberry sur la base d’une configuration arch linux.
    le site fonctionne mais j’ai une erreur récurrente avec APCU.
    Module ‘apcu’ already loaded at Unknown#0
    j’ai vérifié mon php.ini
    la ligne extension=apcu est bien dé-commentée avec l’absence d’extension .so comme ils le préconisent maintenant.

    mon fichier apcu.ini semble correct…

    extension=apcu.so
    ; install php-apcu-bc and enable apc.so for APC compatibility
    ;extension=apc.so
    apc.ttl=7200
    apc.enable=1
    apc.enable_cli=1

    et bien sur j’ai vérifier que Php-apcu était bien installé !

    si tu avais des pistes pour me permettre de régler mon problème se serait génial.
    merci d’avance…

  2. misterhur dit :

    Bonjour, après de nombreuses recherche j’ai trouvé une solution qui fonctionne chez moi.
    j’ai dé commenté la ligne extension=apcu.so du fichier apcu.ini et je n’ai plus aucun message d’erreur.

    Je suppose que le fait d’avoir ajouté extension=apcu au fichier php.ini suffit pour lancé l’extension.

Laisser un commentaire

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