Posséder un NAS est toujours bien utile : Centraliser le stockage de tous ses fichiers en un lieu, amoindrir le risque de pertes de données en cas de crash de disque (grâce au RAID) ou encore accéder à ses fichiers depuis l’extérieur (via un VPN par exemple).
J’ai opté pour FREENAS, fonctionnant sous Freebsd, pour diverses raisons : système Opensource, mises à jour régulières, grosse communauté (principalement en anglais), fiabilité, utilisation avancée (possibilité de faire des snapshots, de la réplication, de la synchronisation…). FREENAS gère également plutôt bien le RAID.
Si vous êtes intéressé par son installation, je vous conseille le site de Durindel. Tout est en français, le tuto est clair et bien expliqué.
Un des avantages de FREENAS est la possibilité de mettre en place des jails (prison en français). C’est une particularité de FreeBsd : vous pouvez créer une machine virtuelle dans votre NAS : on peut lui attribuer une IP différente, installer les dépendances que l’on souhaite… comme si c’était une machine à part entière. Intéressant en termes de sécurité (environnement isolé) et en termes de possibilités. Il faut toutefois veiller à ne pas créer trop de jails : ce sont bien les ressources de votre machine hôte qui seront utilisées, notamment la RAM et le processeur. Attention à la saturation car FREENAS est déjà gourmand en ressources pour faire fonctionner son softraid (dans l’idéal, 1GO de RAM par TO de disque dur).
Il existe déjà nativement dans le système des « modules » : ce sont des jails toutes prêtes à installer, avec des contenus variés (un serveur multimédia Plex, ou bien encore un serveur pour minecraft). En quelques clics, ça fonctionne.
J’ai souhaité installer Nextcloud dans mon NAS, bien que son module existe (Il existe toujours un décalage de versions, et il n’est pas possible de faire de customisations pendant l’installation).
Nextcloud est un logiciel OpenSource de site d’hébergements de fichiers et un fork de Owncloud. Son avantage est que vous pouvez partager toutes sortes de fichiers et y accéder via n’importe quel navigateur web (attention, il y a évidemment des prérequis en terme d’ouvertures de ports, de Dyndns et de routage si vous souhaitez le faire depuis chez-vous). Je vous laisse visiter leur page Wikipédia française pour plus de détails. J’ai donc créé un tuto complet pour vous guider pas à pas et intaller Nextcloud.
Ci-dessous un aperçu du document, vous pouvez également télécharger le PDF (plus pratique pour le copier/coller des commandes)
C’est parti !
Ce tuto a été créé grâce à l’aide de plusieurs autres tutos (en anglais) et notamment celui de de John Ramsden à l’adresse suivante : https://ramsdenj.com/2017/06/05/nextcloud-in-a-jail-on-freebsd.html
Prérequis :
==> Une jail avec un point de montage
==> Se loguer directement dans le Shell de Freenas, ou via open SSH (il faut avoir créé un utilisateur auparavant pour se connecter via SSH). Cette dernière option est plus pratique, notamment pour faire des copier/coller
Installation d’Apache 2.4 :
# pkg install apache24
# sysrc apache24_enable=YES (pour que le service s’initialise au démarrage)
# service apache24 start
Vérifier que le service fonctionne en tapant l’IP de la machine dans votre navigateur favori. On est gratifié d’un « It Works ! »
Installation d’un certificat SSL Let’s Encrypt :
Attention, il faut être propriétaire d’un nom de domaine (.com, .fr,…) pour que obtenir le sésame.
Let’s Encrypt est une autorité de certification gratuite, ouverte et automatisée qui fournit des SSL approuvés par les navigateurs (notamment Chrome et Firefox, qui font partie des financeurs le projet). Ceci est très intéressant, car Let’s Encrypt permet d’avoir le fameux cadenas vert dans la barre d’adresse (au lieu d’un message qui explique que les concepteurs du site l’ont mal configuré…). Si cette option n’est pas nécessaire (cloud interne uniquement, il y a toujours la possibilité de se créer un certificat autosigné avec OpenSSL).
Il existe cependant des moyens de contournement, notamment via Cloudflare.com, mais ce n’est pas l’objet de ce tuto.
(On peut créer un répertoire « nextcloud » dans /usr/local/www/apache24/data/ qui servira plus tard à installer les fichiers des Nextcloud.)
On installe le bot de demande de certificats :
# pkg install -y py27-certbot
On demande au programme de créer un nouveau certificat :
# certbot certonly
Sélectionner l’option « webroot », puis répondre aux différentes questions posées par le script. Si le nom de domaine est bien valide, un message de succès apparait, avec l’emplacement où les précieux certificats ont été mis. Il est important de bien le noter pour créer les Virtual Hosts.
Ne reste ensuite plus qu’à créer 2 Virtual Hosts (soit directement dans Httpd.conf, soit dans le fichier « httpd-vhosts.conf » dans le répertoire /usr/local/etc/apache24/extras qui aura été copié dans le répertoire /usr/local/etc/apache24/Includes. Ces deux virtual hosts indiquent à Apache quoi répondre lorsqu’il reçoit une requête sur le port 80 ou 443.
Voici le fichier que j’ai créé pour ma part :

On redémarre Apache :
# service apache24 restart
(Ne pas oublier d’indiquer le nom du site dans httpd.conf, pour éviter le warning qui apparait à chaque redémarrage du service.)
Il faut savoir que les certificats Let’s Encrypt ne sont valables que 90 jours. Il ne faut pas oublier d’utiliser la commande suivante :
# certbot renew
Celle-ci peut être automatisée via un script et une tâche cron pour l’exécuter.
Enfin, attention à mettre les bons droits d’accès aux différents dossiers (certificats, configuration d’Apache…)
Installation d’un serveur de base de données : Mariadb
# pkg install mariadb102-server
On le met dans le fichier de démarrage :
# sysrc mysql_enable=YES
On édite le fichier de configuration (/usr/local/etc/my.cnf) pour mettre la valeur 32M à cette ligne :
. max_allowed_packet = 32M
Enfin, on démarre le service avec le script de configuration pour sécuriser le serveur SQL (il faut répondre aux différentes questions posées) :
# service mysql-server start && /usr/local/bin/mysql_secure
Préparation de la base de données :
# mysql -u root -p VotreMotDePasse
On crée une base « nextcloud » et un utilisateur « nextcloud_admin » :
CREATE DATABASE nextcloud; CREATE USER 'nextcloud_admin'@'localhost' IDENTIFIED BY '<your password here>' GRANT ALL ON nextcloud.* TO 'nextcloud_admin'@'localhost'; FLUSH PRIVILEGES; exit
On redémarre le service :
# service mysql-server restart
Installation de PHP et des modules requis + optionnels:
# pkg install php71-ctype php71-dom php71-gd php71-iconv php71-json php71-mbstring php71-posix php71-simplexml php71-xmlreader php71-xmlwriter php71-zip php71-zlib php71-pdo_mysql php71-curl php71-fileinfo php71-bz2 php71-intl php71-mcrypt php71-openssl php71-exif pecl-redis pecl-imagick php71-pcntl ffmpeg libreoffice php71-hash php71-xml php71-session php71-mysqli php71-wddx php71-xsl php71-filter php71-opcache
Configuration d’Apache et PHP
Apache :
Aller dans /usr/local/etc/apache24/httpd.conf et décommenter les lignes suivantes :
. rewrite_module . ssl_module
Bien décommenter les lignes suivantes :
.LoadModule ssl_module libexec/apache24/mod_ssl.so
.LoadModule rewrite_module libexec/apache24/mod_rewrite.so
.LoadModule php7_module libexec/apache24/libphp7.so
Après cette dernière ligne (libphp7.so), ajouter le code suivant :
<IfModule php7_module> <FilesMatch "\.(php|phps|php7|phtml)$"> SetHandler php7-script </FilesMatch> DirectoryIndex index.php </IfModule>
Dans le bloc « IFModule mime_module », ajouter le code suivant :
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php
Enregistrer et quitter.
Aller dans /usr/local/etc/apache24/modules.d/001_mod_php.conf et ajouter le code suivant :
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch>
<FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
Redémarrer Apache :
# service apache24 restart
PHP :
Copier un fichier php.ini à partir d’un fichier de configuration type :
#cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini && rehash
(le rehash permet d’appliquer directement des ajouts, modifications ou corrections sans devoir quitter et relancer le terminal)
Aller dans le fichier php. Ini (dans le répertoire /usr/local/etc/php.ini) pour l’éditer avec les valeurs suivantes :
• cgi.fix_pathinfo=0
• date.timezone = UTC (A adapter selon votre fuseau horaire)
• post_max_size = 10240M (Cette variable définit la taille maximum qu’on pourra uploader sur le cloud. Ici on a défini 10GO, la valeur maximum acceptée par PHP. On peut bien évidemment mettre moins (par exemple 4096MO) ou bien 0 pour ne pas mettre de limite)
• memory_limit = 512M (Ceci permet d’ajuster l’utilisation de la mémoire. Cela dépend de la configuration de la machine hôte)
Il faut également décommenter les lignes suivantes (Ces paramètres sont recommandés par Nexctloud, et apparaissent en haut de la page d’administration s’ils ne sont pas activés)
• opcache.enable=1
• opcache.enable_cli=1
• opcache.interned_strings_buffer=8
• opcache.max_accelerated_files=10000
• opcache.memory_consumption=128
• opcache.save_comments=1
• opcache.revalidate_freq=1
Sauvegarder et quitter
Redémarrer Apache
# service apache24 restart
Nous allons maintenant Vérifier la Version de php grâce à une simple page « phpinfo.php » qui va afficher tous les paramètres.
Créer un fichier info.php dans le répertoire suivant : /usr/local/www/apache24/data/nextcloud/info.php et y ajouter simplement ce petit bout de code :
<?php phpinfo(); ?>
Après l’avoir enregistré, y accéder via l’URL suivante : http:///info.php
Une page comme celle-ci-dessous doit s’afficher. Celle-ci contient toutes les caractéristiques et modules activés sur notre serveur PHP.

Installation de redis :
« Redis (de l’anglais REmote DIctionary Server qui peut être traduit par « serveur de dictionnaire distant » et jeu de mot avec Redistribute1) est un système de gestion de base de données clef-valeur scalable, très hautes performances, écrit en C ANSI et distribué sous licence BSD. Il fait partie de la mouvance NoSQL et vise à fournir les performances les plus élevées possibles. (…) Une des principales caractéristiques de Redis est de conserver l’intégralité des données en RAM. Cela permet d’obtenir d’excellentes performances en évitant les accès disques, particulièrement coûteux sur ce plan. Quand la taille des données est trop importante pour tenir en mémoire, Redis peut également utiliser de la mémoire virtuelle. »
Source : https://fr.wikipedia.org/wiki/Redis
Installation du paquet :
# pkg install redis
On demande à ce que le service s’initialise au démarrage :
# sysrc redis_enable=YES
On configure le tout :
# /usr/local/etc/redis.conf
On change le port à 0 pour que Redis n’écoute pas un Socket TCP
• port 0
On configure un socket UNIX à la place :
unixsocket /tmp/redis.sock
unixsocketperm 777
On sauvegarde puis redémarre le service :
# service redis start
Puis on exécute :
#ls -al /tmp
On vérifie que les modifications précédemment réalisées ont été prise en compte :
srwxrwxrwx 1 mysql wheel 0 May 31 09:29 mysql.sock srwxrwxrwx 1 redis wheel 0 May 31 09:30 redis.sock
Maintenant que tout est prêt, il ne nous reste plus qu’à installer Nextcloud.
Mise en place de Nextcloud :
On se rend dans le répertoire où l’on va mettre en place les fichiers :
# cd /usr/local/www/apache24/data/
Puis on télécharge le package de nextcloud (vérifier sur le site officiel si de nouveaux n’ont pas été proposés depuis)
# fetch https://download.nextcloud.com/server/releases/nextcloud-12.0.3.tar.bz2
# fetch https://download.nextcloud.com/server/releases/nextcloud-12.0.3.tar.bz2.md5
# md5 nextcloud-12.0.3.tar.bz2
# cat nextcloud-12.0.3.tar.bz2.md5
Si le hash correspond bien, l’archive peut être extraite sans problème :
# tar -xjf nextcloud-12.0.3.tar.bz2
Bien penser à supprimer les archives décompressées :
# rm -rf nextcloud-12.0.3.tar.bz2
# rm -rf nextcloud-12.0.3.tar.bz2.md5
Point Important : Il s’agit d’un cloud privé, donc nous n’avons pas d’intérêt à ce que celui-ci soit référencé par les moteurs de recherche (Google, Bing, Yahoo…) :
# ln -s /usr/local/www/apache24/data/nextcloud/robots.txt /usr/local/www
Bien vérifier que le fichier robots.txt contient les lignes suivantes :
User-agent: * Disallow: /
Ceci demande aux bots des différents moteurs de recherche de ne pas référencer le site.
On définit les droits des dossiers :
# chown -R www:www /usr/local/www/apache24/data/nextcloud /mnt/data
# find /usr/local/www/apache24/data/nextcloud/ -type d -exec chmod 750 {} \;
# find /usr/local/www/apache24/data/nextcloud/ -type f -exec chmod 640 {} \;
On redémarre à nouveau Apache
# service apache24 restart
Il faut maintenant se rendre sur la page d’accueil du site nouvellement installé. Différents paramètres pour finaliser la mise en place :
Option Valeur
Data folder /mnt/data
Database user nextcloud_admin
Database password
Database name nextcloud
Database host localhost: /tmp/mysql.sock
Le cloud est maintenant fonctionnel et prêt à être configuré dans la partie « Administration ».