Cloud personnel la meilleure solution pour gérer ses données à la maison

nextcloud_raspberry

Les plates-formes de stockage cloud et les divers NAS se sont imposés dans les foyers, on l’utilise tous les jours sans s’en apercevoir, il peut être intéressant de déployer son propre cloud personnel pour conserver certains fichiers sous la main en tout sécurité. L’avantage principal du Cloud personnel est de reprendre le contrôle de ses données personnelles.

Il existe une grande variété de modèles de NAS à tous les prix. Voilà quelques exemples:

Mais, vous avez la possibilité de fabriquer votre cloud DIY à la base de Raspberry Pi et un disque USB. Le boitier peux être imprimer sur une imprimante 3D de style Anet A8.

Matériels:

1 – Installation de Rasbian

Pour commencer vous devez installer rasbian sur une carte SD ou une clef USB. Pour installation sur une clef USB consultez mon précédant article.

  • Installer Rasbian Stretch Lite
  • dans la consol:
    1
    
    sudo raspi-config
    sudo raspi-config
  • activation ssh
  • changer password
  • changer hostname dans Network Options
  • paramétrer clavier wifi et heure en français

2 – Rendre votre pi sécurisé

  • Premièrement, ajouter l’utilisateur principal
    1
    
    sudo adduser rems
    sudo adduser rems
  • Puis ajouter utilisateur au group “sudo”
    1
    
    sudo adduser rems sudo
    sudo adduser rems sudo

3 – Installation LAMP

  • avant tout préparer un nom de domaine et son certificat
  • ensuite installer la base de donnée maria bd
    1
    2
    
    sudo apt install mariadb-server
    sudo mysql_secure_installation
    sudo apt install mariadb-server
    sudo mysql_secure_installation
  • puis installer Apache:
    1
    2
    
    sudo apt install apache2
    sudo systemctl status apache2
    sudo apt install apache2
    sudo systemctl status apache2
  • ainsi que php7 et php-fpm 
    1
    2
    3
    4
    5
    
    sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli
    sudo apt install php7.0-curl libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-zip
    sudo apt install php-apcu
    sudo a2enmod proxy_fcgi setenvif
    sudo a2enconf php7.0-fpm
    sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli
    sudo apt install php7.0-curl libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-zip
    sudo apt install php-apcu
    sudo a2enmod proxy_fcgi setenvif
    sudo a2enconf php7.0-fpm
  • enfin éditer le fichier
    1
    
    sudo nano /etc/apache2/sites-available/000-default.conf
    sudo nano /etc/apache2/sites-available/000-default.conf
  • pour ajouter la ligne après
    1
    2
    3
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/
  • Enfin Relancer Apache
    1
    
    sudo systemctl reload apache2
    sudo systemctl reload apache2

Par défaut Apache peut transférer des fichiers de 2Mo maximum, pour cette raison nous allons le modifier pour 20Mo
Editer le php.ini

1
sudo nano /etc/php/7.0/apache2/php.ini
sudo nano /etc/php/7.0/apache2/php.ini

puis chercher la ligne

1
upload_max_filesize = 2M
upload_max_filesize = 2M

pour cette raison modifier la en

1
upload_max_filesize = 20M
upload_max_filesize = 20M

puis chercher la ligne

1
;allow_url_fopen = On
;allow_url_fopen = On

enfin modifier la en

1
allow_url_fopen = Off
allow_url_fopen = Off

4 – Installation de NextCloud

 

Nous allons créer et ce placer dans le dossier download

1
2
mkdir -p download
cd download
mkdir -p download
cd download

Choisissez bien la dernière version de NextCloud et la télécharger.

1
2
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip.sha256
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip.sha256

Décompressez le fichier téléchargé puis l’installer NextCloud:

1
2
3
4
unzip nextcloud-13.0.0.zip
sudo cp -rv nextcloud /var/www/
sudo cp -rv nextcloud /var/www/
sudo mkdir /var/www/data
unzip nextcloud-13.0.0.zip
sudo cp -rv nextcloud /var/www/
sudo cp -rv nextcloud /var/www/
sudo mkdir /var/www/data

Nous allons créer la base de donnée pour notre NC

1
2
cd
mysql -u root -p
cd
mysql -u root -p

taper votre password

1
create database nextcloud;
create database nextcloud;

ici user rems et mot de passe password

1
2
3
4
5
create user rems@localhost identified by 'password';
grant all privileges on nextcloud.* to rems@localhost identified by 'password';
flush privileges;
exit
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
create user rems@localhost identified by 'password';
grant all privileges on nextcloud.* to rems@localhost identified by 'password';
flush privileges;
exit
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Nous allons ajouter les lignes suivantes après

1
2
3
4
5
# this is only for the mysqld standalone daemon
[mysqld]
log-bin = /var/log/mysql/mariadb-bin
log-bin-index = /var/log/mysql/mariadb-bin.index
binlog_format = mixed
# this is only for the mysqld standalone daemon
[mysqld]
log-bin = /var/log/mysql/mariadb-bin
log-bin-index = /var/log/mysql/mariadb-bin.index
binlog_format = mixed

Maintenant redémarrer MySql

1
sudo systemctl restart mysql
sudo systemctl restart mysql

Il nous reste d’ajouter hote virtuel pour notre NC

1
sudo nano /etc/apache2/sites-available/nextcloud.conf
sudo nano /etc/apache2/sites-available/nextcloud.conf

ajouter les lignes suivantes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<VirtualHost *:80>
DocumentRoot "/var/www/nextcloud"
ServerName VotreNomDeDomaine.fr
 
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
 
<IfModule mod_dav.c>
Dav off
</IfModule>
 
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
 
</Directory>
 
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/nextcloud"
ServerName VotreNomDeDomaine.fr

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

<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All

<IfModule mod_dav.c>
Dav off
</IfModule>

SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud

</Directory>

</VirtualHost>

Maintenant il faut l’activer notre hote virtuel

1
2
3
4
5
sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf
sudo a2enmod rewrite headers env dir mime ssl
sudo a2ensite default-ssl
sudo systemctl reload apache2
sudo systemctl daemon-reload
sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf
sudo a2enmod rewrite headers env dir mime ssl
sudo a2ensite default-ssl
sudo systemctl reload apache2
sudo systemctl daemon-reload

5 – Installation du certificat

Télécharger et installer letsencypt

1
2
cd /etc
sudo wget https://dl.eff.org/certbot-auto
cd /etc
sudo wget https://dl.eff.org/certbot-auto

Modifier les droits

1
sudo chmod a+x ./certbot-auto
sudo chmod a+x ./certbot-auto

Lancez la génération du nouveau certificat

1
./certbot-auto --apache -d www.votre-domaine.com
./certbot-auto --apache -d www.votre-domaine.com

accepter les condition puis sélectionner 2

Editer et modifier le fichier nextcloud-le-ssl.conf

1
sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf

ajouter après SSLCertificateKeyFile

1
2
3
4
5
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always set Referrer-Policy "no-referrer"
</IfModule>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always set Referrer-Policy "no-referrer"
</IfModule>

relancer apache

1
2
sudo systemctl reload apache2
sudo systemctl daemon-reload
sudo systemctl reload apache2
sudo systemctl daemon-reload

6 – Réglage de NextCloud

Nous allons configurer le cache de nextcloud opcache

editer php.ini

1
sudo nano /etc/php/7.0/apache2/php.ini
sudo nano /etc/php/7.0/apache2/php.ini

dans la section opcache ajouter/modifier les lignes suivantes:

1
2
3
4
5
6
7
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1

7 – Déplacer les données NextCloud vers un disque externe

Dans mon cas je veux garder le format de fichier ntfs pour pouvoir lire en cas ou avec windows, libre a vous de choisir un autre format selon vos besoins.

En premier lieu: Montage de partition:

1
2
sudo apt install ntfs-3g
sudo mount -t ntfs-3g /dev/sdb1 /mnt/ncdata
sudo apt install ntfs-3g
sudo mount -t ntfs-3g /dev/sdb1 /mnt/ncdata

Ensuite création d’un point de montage automatique

1
sudo nano /etc/fstab
sudo nano /etc/fstab

Enfin ajouter la ligne suivante:

1
/dev/sdb1 /mnt/ncdata ntfs-3g rw,auto,users,exec,nofail,nls=utf8,umask=007,uid=33,gid=33 0 0
/dev/sdb1 /mnt/ncdata ntfs-3g rw,auto,users,exec,nofail,nls=utf8,umask=007,uid=33,gid=33 0 0

redémarrer

Copie du répertoire data sur la nouvelle partition

1
2
sudo systemctl stop apache2
sudo rsync -avx /var/www/data/ /mnt/ncdata/data
sudo systemctl stop apache2
sudo rsync -avx /var/www/data/ /mnt/ncdata/data

Nous allons modifier legerement la configuration Nextcloud

1
sudo nano /var/www/nextcloud/config/config.php
sudo nano /var/www/nextcloud/config/config.php

puis changer

1
'datadirectory' => '/var/www/data', -> 'datadirectory' => '/mnt/ncdata/data',
'datadirectory' => '/var/www/data', -> 'datadirectory' => '/mnt/ncdata/data',

enfin relancer apache

1
sudo systemctl start apache2
sudo systemctl start apache2

C’est presque terminé executer les commandes suivantes:

1
2
3
cd /var/www/nextcloud
sudo -u www-data php console.php files:scan --all
sudo -u www-data php occ maintenance:repair
cd /var/www/nextcloud
sudo -u www-data php console.php files:scan --all
sudo -u www-data php occ maintenance:repair

pour finir supprimer le dossier initial de nextcloud

1
sudo rm -rf /var/www/data
sudo rm -rf /var/www/data

Conclusion

Tout bien pesé nous avons terminé, votre cloud personnel est sécurisé et opérationnel 😉

nextcloud_rpi

Quoi qu’il en soit, si vous voulez pousser un peu plus loin votre installation je vous conseil de consulter le site de soozx.fr qui donne beaucoup d’astuces sur NC et Raspberry Pi.

Renouvellement du certificat

Etant donné que le certificat que nous avons utilisé est valide 90 jours, n’oublier pas de renouveler régulièrement avec la commande:

1
sudo ./certbotc -auto renew
sudo ./certbotc -auto renew

En effet vous pouvez également l’automatiser la tache avec le crontab, pour cela editer le fichier crontab

1
sudo nano crontab -e
sudo nano crontab -e

pour cette raison ajouter la ligne suivante:

1
0 1 89 * * /etc/certbot-auto renew  >> /var/log/ssl-renew.log
0 1 89 * * /etc/certbot-auto renew  >> /var/log/ssl-renew.log

 

 

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.