owncloud-raspberry-pi-technews-une

Bonjour à tous, comme promis voici un tutoriel complet sur la mise en place d’un serveur de stockage cloud grâce au couplage d’un Raspberry Pi et du logiciel Owncloud. Ce type d’installation peut tout à fait remplacer Dropbox ou Google Drive pour un usage personnel. La limite vient votre connexion internet notamment à l’upload mais aussi votre propre capacité de stockage ou encore la limite matériel venant de la puissance du raspi. D’où la partie optionnelle concernant l’overclocking du petit bonhomme. Owncloud est assez complet et propose un système d’extensions à rajouter ce qui donne accès à pas mal de chose comme la lecture des vidéos ou de la musique directement depuis la page web ou l’édition de documents. Sans plus tarder, lançons nous dans l’aventure du serveur Web !

Plan

  1. Installer Raspbian (distribution Debian adaptée au Raspberry Pi)
  2. Overclocker le Pi (optionnel)
  3. Installer PHP, Apache ou Nginx et SQlite3
  4. Configurer le serveur
  5. Installer Owncloud
  6. Connecter son Disque Dur à Owncloud
  7. Configurer le routeur (la box) pour le réseaux local et pour un accès extérieur
  8. Configurer son nom de domaine pour accéder à sa box depuis l’extérieur (optionnel)
  9. Différents problèmes rencontrés
    1. Certains dossiers du disque dur externe n’apparaissent pas dans l’arborescence d’Owncloud.
  10. Conclusion

1. Installer Raspbian

Raspbian c’est la distribution de base pour les Raspberry Pi et elle est accessible via le package NOOBS (New Out Of the Box Software). Vous pouvez télécharger NOOBS ici raspberrypi.org/downloads.

Il faut préparer votre carte SD avant de copier les fichiers, vous pouvez formater votre carte avec le logiciel SD Formatter disponible ici : sdcard.org/downloads/formatter_4 (utiliser gparted pour linux).

Une fois votre carte formatée et le téléchargement de la distribution terminé il ne vous reste plus qu’à dé-zipper l’archive de la distribution et à copier les fichiers sur la carte SD.

Résumons :

  1. Télécharger NOOBS : raspberrypi.org/downloads
  2. Télécharger SD Formatter: sdcard.org/downloads/formatter_4
  3. Installer SD Formatter
  4. Formater votre carte SD avec SD Formatter (utiliser gparted pour linux)
  5. Extraire les fichiers de la distribution
  6. Copier les fichiers de NOOBS sur la carte SD

Votre distribution est prête, il ne vous reste plus qu’à insérer votre carte dans le raspberry pi et à l’allumer.

Quelques rappels pour le premier démarrage du raspberry pi :

  • login: pi , mdp: raspberry
  • Attention au clavier en qwerty
  • lancer l’environnement graphique :
    startx
  • Et enfin une citation d’un précédent article (le « / » en qwerty c’est la touche « ! ») :

Pour mettre le clavier en français, ouvrez le terminal, entrezsudo nano /etc/default/keyboard“, remplacez “en” ou “gb” par “fr” puis CTRL+O pour sauvegarder et CTRL+X pour quitter.

Redémarrage nécessaire.

Se connecter en ssh à votre raspberry pi

Pour vous connecter au raspberry pi de votre ordinateur et donc faire les prochaines configurations de votre pc il faut vous connecter en ssh. Pour ce faire vous devez être connecté au même réseaux et connaître l’adresse ip locale de votre raspberry pi. Depuis votre machine, dans un terminal écrivez :

sudo ssh <login_de_votre_pi>@192.168.1.37

Ici <login_de_votre_pi> correspond au login du compte sur votre raspberry pi. Si vous ne l’avez pas modifié il s’agit de « pi ».

raspberry-pi-ssh-mode

192.168.1.37 est l’adresse ip du raspberry pi. Bien sûr la votre risque d’être différente mais je garderai cet exemple pour le reste du tutoriel. Pour connaître votre adresse ip locale, dans un terminal tapez :

ifconfig

2. Overclocker le Pi (optionnel)

L’overclocking du raspi est ici optionnel. En effet il s’agit d’un confort d’utilisation  puisque le serveur va demander des ressources et le processeur risque de vite vous limiter. Il est toujours temps de le faire après l’installation donc ne vous précipitez pas.

Pour procéder à l’overclocking, entrez la commande :

sudo raspi-config

config-raspberry-pi-technews

Sélectionnez ensuite Overclock et 5 choix s’offrent à vous : None, Modest, Medium, High, Turbo.

overclocking-raspberry-pi-technews

Je ne sais que trop vous conseiller d’être prudent si vous effectuez un overclocking. Je vous conseil également de ne pas dépasser medium si vous n’avez pas ajouté de matériel spécifique au refroidissement de la carte (dissipateur thermique par exemple).

3. Installer PHP, Apache ou Nginx et SQlite3

Tout d’abord Mettons tout  à jour :

sudo apt-get update
sudo apt-get upgrade

De mon côté j’ai choisi Nginx donc c’est celui que je vais utiliser ici mais si vous désirez utiliser Apache seulement quelques étapes de configurations devraient différer. La commande suivante va se charger d’installer le serveur Nginx, openssl, php5 et sqlite.

sudo apt-get install nginx openssl ssl-cert php5-cli php5-sqlite php5-gd php5-common php5-cgi sqlite3 php-pear php-apc curl libapr1 libtool curl libcurl4-openssl-dev php-xml-parser php5 php5-dev php5-gd php5-fpm memcached php5-memcache varnish

Modifiez le fichier sites-available:

sudo nano /etc/nginx/sites-available/default

Pour y mettre ce contenu :

 
upstream php-handler {
        server 127.0.0.1:9000;
        # server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        # server_name_in_redirect on;
        # server_name 192.168.1.37;

        return 301 https://$server_name$request_uri;  # enforce https

        # rewrite ^ https://$server_name$request_uri? permanent;
}

server {
        listen 443 ssl;
        # server_name_in_redirect on;
        # server_name 192.168.1.37;

        ssl_certificate /etc/nginx/cert.pem;
        ssl_certificate_key /etc/nginx/cert.key;

        # Path to the root of your installation
        root /var/www/owncloud;

        client_max_body_size 2000M; # set max upload size
        fastcgi_buffers 64 4K;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        index index.php;
        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
                deny all;
        }

        location / {
                # The following 2 rules are only needed with webfinger
 		rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

                rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

                try_files $uri $uri/ index.php;
        }

        location ~ \.php(?:$|/) {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param HTTPS on;
                fastcgi_pass php-handler;
        }

        # Optional: set long EXPIRES header on static assets
 	location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires 30d;
                # Optional: Don't log access to assets
                access_log off;
        }

}

4. Configurer le serveur

Nous avons besoin de certificats SSL que nous pouvons créer comme ceci :

sudo openssl req $@ -new -x509 -days 730 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key

sudo chmod 600 /etc/nginx/cert.pem
sudo chmod 600 /etc/nginx/cert.key

Il faut changer la limite max en upload de php. Pour cela :

sudo nano /etc/php5/fpm/php.ini

Puis changez la valeur de upload_max_filesize et post_max_size. Personnellement j’ai mis les deux valeurs à 2000M comme ceci  (Ctrl + w pour rechercher dans nano):

upload_max_filesize = 2000M
post_max_size = 2000M

Maintenant nous allons éditer www.conf :

sudo nano /etc/php5/fpm/pool.d/www.conf

Changez le listen qui doit valoir /var/run/php5-fpm.sock en :

listen = 127.0.0.1:9000

Pour terminer la configuration nous allons changer la valeur du swap pour la mettre à 512 :

sudo nano /etc/dphys-swapfile

Changez donc CONF_SWAPSIZE :

CONF_SWAPSIZE=512

Et enfin, il nous faut redémarrer le serveur et Php :

sudo /etc/init.d/php5-fpm restart
sudo /etc/init.d/nginx restart

Sur votre pc, vérifiez qu’en vous rendant à l’adresse http://192.168.1.37 vous avez bien « Welcome to nginx ! ».

5. Installer Owncloud

Nous allons tout d’abord télécharger l’archive d’Owncloud ici : owncloud.org/install. Pour un téléchargement en ligne de commande (attention le numéro de version d’owncloud n’est peut être plus d’actualité dans cette commande) :

sudo wget https://download.owncloud.org/community/owncloud-7.0.3.tar.bz2

Nous allons extraire les fichiers et  les mettre dans /var/www/ :

sudo tar xvf owncloud-7.0.3.tar.bz2 
sudo mv owncloud/ /var/www/

Pour être sûr de pouvoir accéder via le serveur web à notre dossier owncloud, il va falloir donner les droits du dossier à www-data. En effet cet utilisateur est celui par lequel est lancé le serveur sous raspbian. L’utilisateur existe déjà normalement.

sudo chown -R www-data:www-data /var/www

Désormais vous pouvez vous rendre à l’adresse : https://192.168.1.37

owncloud-premier-demarrage

Et oh miracle, owncloud apparaît ! (normalement ^^). À ce stade, Owncloud devrait être accessible depuis n’importe quel ordinateur connecté au même réseau via son adresse locale.

(Pensez à « forcer https » dans les paramètres owncloud)

6. Connecter son Disque Dur à Owncloud

Le principe ici est de donner accès à son disque dur externe grâce à Owncloud vers l’extérieur. Nous allons donc pouvoir connecter notre disque dur en USB sur notre raspi… mais tout n’est pas si simple malheureusement. En effet, par défaut les disques dur branchés ne sont pas montés au démarrage. Nous allons devoir configurer le système pour qu’il monte le disque dur à chaque démarrage. Premièrement il nous faut quelques informations. Récupérez l’UUID et le type du disque dur en tapant la commande suivante  :

sudo blkid

Nous aurons aussi besoin de l’uid et du gid de l’utilisateur www-data (l’utilisateur qui possède le serveur). Pour cela nous tapons :

id www-data

Nous pouvons maintenant éditer le fichier /etc/fstab et y ajouter les informations nécessaires au montage. Pour éditer le fichier :

sudo nano /etc/fstab

ajouter la ligne suivante au fichier :

UUID=0000000000000000 /var/www/owncloud/data/EKO ntfs uid=33,gid=33,file_mode=0770,dir_mode=0770,username=pi,password=myPassword 0 3

Remplacez évidemment la valeur de UUID par l’UUID de votre disque dur. Même chose pour le chemin où vous voulez que votre DD soit monté ainsi que pour le type (ici ntfs)uid, gid, username et password.

Redémarrez.

Si après le démarrage, le disque dur n’est pas monté, essayez de remplacer votre ligne dans fstab par ce modèle, cela pourrait vous aider à voir si cela vient des paramètres :

UUID=0000000000000000 /var/www/owncloud/data/EKO ntfs defaults 0 3

Une fois notre disque dur monté, pour qu’owncloud le prenne en compte il nous faut installer/activer l’extension « Stockage externe » (Menu « Applications »).

7. Configurer le routeur pour le réseaux local et pour un accès extérieur

Pour commencer la configuration de la box il faut vous rendre dans la page administrateur de votre box. Rendez-vous à l’adresse 192.168.1.1 (pour la plupart des box) ou 192.168.1.254 (pour la Bbox par exemple).

Fixer une ip pour le raspberry pi avec DHCP

Il va falloir dans un premier temps donner une ip locale fixe pour notre raspberry pi. En effet, lorsqu’un appareil se connecte à la box, le service DHCP (Dynamic Host Configuration Protocol) se charge de lui attribuer une ip locale. Cette ip peut donc changer à chaque démarrage. Pour éviter cela, nous allons rajouter une exception dans la configuration de la box. Le principe est de dire au service DHCP : « Pour cette adresse MAC (adresse unique identifiant une carte réseaux) tu donne toujours cette adresse ip :… ». Rendez-vous donc dans la configuration du routeur, onglet DHCP. Vous devriez avoir une partie nommée : « Attribution d’une adresse IP privée fixe à un ordinateur du réseau local » ou quelque chose du même genre. 2 champs vous sont demandés, l’adresse ip locale que vous voulez donner à votre raspi (on utilisera ici 192.168.1.37 mais c’est à vous de choisir) et l’adresse MAC de l’appareil ciblé (votre appareil devrait apparaître dans la liste).

adresse-ip-fixe-dhcp-technews

Accéder au serveur depuis l’extérieur

Pour accéder à Owncloud depuis l’extérieur cela revient à pouvoir accéder à une machine locale à travers la box. Pour commencer il va falloir ouvrir des ports de votre box et les rediriger vers les ports de votre raspberry pi. Il faut se rendre dans la page administrateur de la box encore une fois et aller dans l’onglet NAT/PAT.

3 ports sont à configurer : 443, 22 et 80. Cf image ci-dessous.

bbox-config-raspberry-pi-technews-fr

Désormais en tapant votre ip publique dans la barre d’adresse vous devriez pouvoir accéder à votre serveur qui est en local. Si c’est le cas alors voilà qui est fait. Votre serveur est accessible depuis partout dans le monde ! Pour trouver votre ip publiquevpnmentor.com/outils/ipinfo (Merci à Jackie pour ce conseil de site simple et sans pub pour connaître votre IP).

8. Configurer son nom de domaine pour accéder à sa box depuis l’extérieur (optionnel)

À ce stade votre serveur est accessible via l’adresse ip publique de votre box. Mettre un nom sur cette ip revient à configurer les DNS (Domain Name System) du nom de domaine que vous possédez. Pour cela rendez-vous sur le site de votre hébergeur. Dans la zone DNS, ajoutez une nouvelle entrée, un champ de pointage de type A qui pointe du domaine ou sous domaine voulu vers votre adresse ip publique. Lorsque vous accédez à cette adresse, pensez au httpS.

9. Différents problèmes rencontrés

J’ai rencontré plusieurs problèmes pendant l’installation et la configuration du serveur avant qu’il puisse être fonctionnel (et ce sera sûrement pareil pour vous). Alors voici quelques solutions à des problèmes rencontrés :

  1.  Certains dossiers du disque dur externe n’apparaissent pas dans l’arborescence d’Owncloud.

    Pour régler ce problème il faut supprimer l’indexation qu’a fait Owncloud pour qu’il recommence le travail. Tout d’abord passez en super-utilisateur:

    sudo -s

    Ensuite rendez-vous dans le dossier data contenu dans le dossier owncloud:

    cd /var/www/owncloud/data

    puis il faut ouvrir la base de donnée avec sqlite :

    sqlite3 owncloud.db

    Et enfin supprimer le contenu de la table oc_filecache :

    delete from oc_filecache where 1=1;

    Pour quitter sqlite3 écrivez :

    .quit

    L’arborescence devrait se recréer correctement.

Conclusion

Oui ce tutoriel est loooong je vous l’accorde, enfin je dirais plutôt : complet. Evidemment si vous avez des questions, les commentaires sont là pour ça. Je pense que vous allez en avoir car peu de chances que tout fonctionne à merveille du premier coup ! 

À bientôt pour un prochain article ;)