Raspberry Pi et Owncloud en HTTPS avec Nginx

Si vous souhaitez installer ce service, vous trouverez des dizaines (au moins) de tutos avec votre ami Google. Alors ici je vais faire simple et rapide pour partager une partition du disque USB sur Internet le tout en HTTPS !

Raspberry Pi Home Server - Etape 14 : installer Owncloud en HTTPS avec Nginx

Les tutoriels pour installer Owncloud vous en trouvez donc partout (vous en avez un excellent et simple sur tropfacile.net). Donc un de plus sur ce site ! 🙂 On va installer Owncloud pour pouvoir partager une partition du disque USB. Nous allons aussi voir la gestion des certificats pour faire une connexion en HTTPS.

  1. Installer les packages nécessaires
    apt-get install php5 php5-json php5-gd php5-sqlite curl libcurl3 libcurl3-dev php5-curl php5-common php-xml-parser sqlite
  2. Installer le package php-apc pour optimizer les performances (merci le forum raspberrypi.org)
    apt-get install php-apc
  3. Télécharger OwnCloud
    http://doc.owncloud.org/server/5.0/admin_manual/
  4. Décompresser l’archive dans /var/www
    cd /var/www
    
    tar jxvf <archive>
  5. Changer le owner du répertoire
    chown -R www-data:www-data /var/www/owncloud
  6. Créer le répertoire /etc/nginx/certs s’il n’existe pas
    mkdir /etc/nginx/certs
  7. Générer les certificats pour le site dans le répertoire /etc/nginx/certsAttention : utilisez un mot de passe robuste pour générer votre certificat. Le certificat est valable 365 jours. Il faudra en générer un nouveau dans un an
    openssl genrsa -des3 -out owncloud.key 1024
    
    openssl req -new -key owncloud.key -out owncloud.csr
    
    cp owncloud.key owncloud.key.org
    
    openssl rsa -in owncloud.key.org -out owncloud.key
    
    openssl x509 -req -days 365 -in owncloud.csr -signkey owncloud.key -out owncloud.crt
  8. Supprimer les fichier inutiles
    rm owncloud.csr owncloud.key.org
  9. Créer un fichier /etc/nginx/sites-available/owncloud (A vous de choisir le port)
    server {
    
     listen 8091 ssl;
    
     ssl on;
    
     ssl_certificate /etc/nginx/certs/owncloud.crt;
    
     ssl_certificate_key /etc/nginx/certs/owncloud.key;
    
     error_log /var/log/nginx/owncloud.log;
    
     access_log /var/log/nginx/owncloud.log;
    
     server_name owncloud;
    
     root /var/www/owncloud;
    
     index index.php;
    
     client_max_body_size 1000M;
    
    # deny direct access
    
     location ~ ^/(data|config|.ht|db_structure.xml|README) {
    
     deny all;
    
     }
    
     # default try order
    
     location / {
    
     try_files $uri $uri/ @webdav;
    
     }
    
     # owncloud WebDAV
    
     location @webdav {
    
     fastcgi_pass unix:/var/run/php5-fpm.sock;
    
     fastcgi_split_path_info ^(.+.php)(/.*)$;
    
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
     fastcgi_param HTTPS on;
    
     include fastcgi_params;
    
     }
    
    location ~ .php$ {
    
     include /etc/nginx/fastcgi_params;
    
     try_files $uri =404;
    
     fastcgi_param HTTPS on;
    
     fastcgi_index index.php;
    
     fastcgi_split_path_info ^(.+.php)(/.+)$;
    
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
     fastcgi_pass unix:/var/run/php5-fpm.sock;
    
     }
    
     }
  10. Activer le site
    ln -s /etc/nginx/sites-available/owncloud /etc/nginx/sites-enabled/owncloud
  11. Changer les droits sur le répertoire partagé
    chown -R www-data:www-data /media/usbdrive/internet
  12. Modifier le fichier /etc/php5/fpm/php.ini pour augmenter la taille des fichiers pouvant être envoyés
    upload_max_filesize = 700M
    
    post_max_size = 800M
  13. Relancer NGINX et php5-fpm
    service nginx restart
    
    service php5-fpm restart
  14. Accéder à Owncloud par https://<IP_du_Raspberry> :<port_dans_la_configuration>/

    Affichage du certificat pour se connecter à votre Owncloud

    Affichage du certificat pour se connecter à votre Owncloud

  15. Il vous suffit alors de suivre les instructions à l’écran

    Paramètres de configuration de Owncloud

    Paramètres de configuration de Owncloud

  16. Rendez-vous sur http://owncloud.org/support/ pour la documentation sur l’utilisation de Owncloud
  17. Un petit tour dans votre répertoire de data vous confirmera que les données seront stockées au bon endroit

Voilà j’espère vous avoir aidé dans votre installation.

Bonne soirée


Pour la version 5.0.4, merci à Tef (son site ici) pour son aide :

    1. le nom du serveur (attention il apparaît à deux endroits) –> server_name owncloud;
    2. le port ssl –> listen 8091 ssl;
    3. l’emplacement et le nom des certificats :
      • –> ssl_certificate /etc/nginx/certs/owncloud.crt;
      • –> ssl_certificate_key /etc/nginx/certs/owncloud.key;
    4. le root –> root /var/www/owncloud;

Vous aimerez aussi...

  • Max

    Bonjour

    En ce qui me concerne je voulais avoir une redirection ssl uniquement sur le dossier owncloud et pas sur les autres services. Voici la solution trouvée pour la configuration de nginx

    server {
    
      listen 443 ssl;
    
      ssl on;
    
      server_name mondomaine.com;
    
    
    
      # directives for SSL certificates
    
            ssl_certificate /etc/nginx/certs/owncloud.crt;
    
        ssl_certificate_key /etc/nginx/certs/owncloud.key;
    
      # root, index, error_log, access_log directives
    
      root /var/www/;
    
      index index.html index.php;
    
      client_max_body_size 1000M; # set maximum upload size
    
    
    
    
    
    
    
      # deny direct access
    
      location ~ ^/(data|config|.ht|db_structure.xml|README) {
    
        deny all;
    
      }
    
    
    
      # default try order
    
      location /owncloud {
    
        try_files $uri $uri/ @webdav;
    
      }
    
    
    
      # owncloud WebDAV
    
      location @webdav {
    
        fastcgi_split_path_info ^(.+.php)(/.*)$;
    
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
        #fastcgi_params HTTPS on;
    
        include fastcgi_params;
    
      }
    
    
    
      location ~ .php$ {
    
        # directives to handle PHP files
    
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
        #fastcgi_params HTTPS on;
    
        include fastcgi_params;
    
      }
    
    
    
      # leave everything else to port 80
    
      location / {
    
        rewrite ^ http://$host$request_uri permanent;
    
      }
    
    }
    
    
    
    server {
    
      listen 80;
    
      server_name mondomaine.com;
    
    
    
      # root, index, error_log, access_log directives
    
      root /var/www/;
    
      index index.html index.php;
    
      client_max_body_size 1000M; # set maximum upload size
    
    
    
      # redirect yourdomain.com/shop to port 443
    
      # Please put this before location / block as
    
      # nginx stops after seeing the first match
    
      location /owncloud {
    
        rewrite ^ https://$host$request_uri permanent;
    
      }
    
    
    
      location / {
    
        # directives to handle what's inside /, for example
    
        # try_files $uri $uri/ /index.php;
    
      }
    
    
    
      location ~ .php$ {
    
        # directives to handle PHP files
    
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
        #fastcgi_params HTTPS on;
    
        include fastcgi_params;
    
    
    
      }
    
    
    
    }
    
    
    
    

    Il y a peut être des choses à affiner mais cela fonctionne bien

  • Halukard

    Bonjour,

    Merci pour tout ces tuto super intéressant. J’ai juste une question, lors de la finalisation de l’installation je me suis trompé de répertoire du coup j’ai une erreur lorsque le script essais de s’exécuter. J’ai cherché un peu mais je n’ai pas trouvé dans quel fichier de config est stocké la valeur que je lui ai passée pour la changer et mettre le bon chemin vers mon répertoire.

    Si vous le connaissez ou savez comment résoudre ce petit « problème » 🙂

    Merci

    • Salut,
      Est-ce qu’il s’agit du répertoire de base de owncloud ? Si c’est le cas il faut peut etre voir au niveau de la variable open_basedir dans le fichier /etc/php/php.ini. C’est la liste des répertoires où peuvent se trouver des scripts PHP.

      • Halukard

        Non en fait dans le champ data folder j’ai saisi un mauvais répertoire du coup sur la page index.php j’ai un message me disant que le chemin n’existe pas (boulet time).

        Je regarderais ce soir si je trouve quelque chose dans le php.ini, j’ai fouillé un peu dans les fichier de conf php dans /var/www/owncloud mais je n’ai rien trouvé de significatif.

        Une autre petite question au passage, je n’arrive pas à accéder aux répertoires de mon disque usb avec la commande cd (cd /media/sda1/owncloud par exemple), cela fait très (très) longtemps que je n’avais pas touché des commandes linux du coup j’ai beaucoup de lacune 🙂

        • Je sais pas si ca n’est pas stocké dans sa db …. A regarder sur le forum d’owncloud mais de mon coté je n’ai aucune idée.

        • Pour les répertoires : tu as bien monté tes partitions ? Avec la commande mount.

  • Halukard

    Merci pour les infos j’ai réussi a me dépatouiller, le répertoire par défaut est stocké dans le fichier /config/config.php

    Maintenant j’ai un soucis de configuration de samba et de subsonic 😀

  • Paul

    Ce tuto me semble incomplet. Il manque des étapes… D’où sort nginx ? A aucun moment tu dis qu’il faut l’installer.

    • Salut. Effectivement je ne parle pas d installer Nginx. Je suis parti de principe que si tu en as besoin il y a un autre tuto pour l installer. Ici il s agit donc d installer Owncloud si tu as Nginx

  • Tef

    Bonsoir,

    j’ai deux soucis quand je me logue dans owncloud:

    Une fenêtre pop-up apparaît à chaque fois que je clique sur un lien de menu (fichiers/musique/contact/etc…) qui me dit « This content failed to load » et bien sûr quand je ferme cette fenêtre j’ai une barre de progression (qui reste figée) indiquant « Mise à niveau du cache du système de fichier ».

    Et quand je modifie quelque chose dans le menu en haut à droite (Utilisateurs/Administration/etc…) il ne sauvegarde rien.

    Problème de droits encore une fois… Mais où? Je sèche

  • Tef

    Ça marche o/

    Merci beaucoup 🙂

    En fait j’y étais presque…

    Donc voilà ce qui a marché chez moi avec la version 5.0.4 d’owncloud :

    Il faut modifier le fichier /etc/nginx/sites-available/owncloud pour y mettre uniquement le code se trouvant à cette adresse : https://github.com/owncloud/documentation/blob/master/admin_manual/installation/installation_others.rst

    Et modifier les lignes suivantes :

    1- le nom du serveur (attention il apparaît à deux endroits) –> server_name owncloud;

    2- le port ssl –> listen 8091 ssl;

    3- l’emplacement et le nom des certificats :

    –> ssl_certificate /etc/nginx/certs/owncloud.crt;

    –> ssl_certificate_key /etc/nginx/certs/owncloud.key;

    4- le root –> root /var/www/owncloud;

    Et c’est tout. C’était vraiment pas compliqué. Je suis un boulet…

    J’espère que ça servira à d’autres qui comme moi n’ont pas l’habitude de bidouiller.

    ps : Et je remercierai jamais assez Chris pour sa patience et son formidable travail.

    • Merci beaucoup pour l’info (et c’est toi qui a tout fait ! 🙂 )

      Article mis à jour !

  • thomas

    Bonsoir,

    Je viens de faire le tuto avec les nouvelles données, j’avais la fameuse erreur « This content failed to load « , maintenant quand j’entre https:// :8091 je vois « 502 Bad Gateway nginx/1.2.1 » sur la page demon navigateur. Pourtant j’ai bien activer le site avec « ln -s /etc/nginx/sites-available/owncloud /etc/nginx/sites-enabled/owncloud » Avez vous une idée ?

    Cordialement

    • Est-ce que le wrapper FastCGI est bien lancé ? Car généralement la gateway c’est ce programme. Il y a aussi plus d’infos dans /var/log/nginx/.log

  • thomas

    j’ai fait la commande « ps -ef » et si le wrapper FastCGI est le prcessus « fcgiwrap » alors oui il est bien lancé : » www-data 1876 1 0 20:54 ? 00:00:00 /usr/sbin/fcgiwrap »

    dans le fichier de log /var/log/nginx/error.log j’ai :

    2013/04/12 21:08:42 [error] 2525#0: *5 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.1.30, server: owncloud, request: « GET / HTTP/1.1 », upstream: « fastcgi://127.0.0.1:9000 », host: « 192.168.1$

    il mentionne bien le fastcgi en effet.

  • Isador

    Bonjour,

    J’ai eu la même erreur que toi, Thomas.

    En fait cela vient de la ligne « fastcgi_param 127.0.0.1:9000 »

    Il faut la remplacer par cette ligne pour utiliser php5-fpm (comme dans la conf de base du tuto, d’ailleurs) :

    « fastcgi_pass unix:/var/run/php5-fpm.sock; »

  • Tef

    Arf désolé…

    Effectivement j’ai oublié cette ligne dans ma solution.

    Merci Isador

    • thomas

      Merci, les gars tout fonctionne parfaitement 🙂

  • Marc

    Merci pour le tuto et les précisions d’Isador

    Si comme moi, après quelques essais vous obtenez l’erreur suivante : « nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) » lorsque vous relancez le serveur, je vous conseille d’aller à cette adresse : http://ibnuyahya.com/nginx-emerg-bind-to-0-0-0-080-failed-98-address-already-in-use/ . Ca a résolu mon problème.

    Par ailleurs, la dernière version d’owncloud est téléchargeable grâce aux liens fournis sur le changelog : http://owncloud.org/releases/Changelog

  • Bonjour ,

    après avoir suivi votre tuto à la lettre, j’obtiens cette erreur :

    root@raspberrypi:~# sudo service nginx restart

    Restarting nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file(« /etc/ssl/nginx/certs/owncloud.crt ») failed (SSL: error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system lib error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib)

    nginx: configuration file /etc/nginx/nginx.conf test failed

    J’ai essayé de regénérer mes certificats : comme il le dit ici : http://geekmps.fr/linux-categorie/251-installer-owncloud-5-sous-nginx

    Mais rien à faire j’obtient toujours cette erreur, auriez vous une idée d’ou cela pourrait il venir?

    (Je suis sur raspberry model B, moebius 1.1.0, owncloud 5.0.4, installation de nginx suivant votre tuto)

    • Bonjour,
      Le fichier /etc/ssl/nginx/certs/owncloud.crt existe ? Ou bien il est défini dans un autre répertoire ?
      Je vais bientôt refaire le tutoriel Owncloud avec la version 5 😉

      • Je viens de faire la commande suivante : find -name *.crt

        Mais ça ne me trouve rien.

        J’ai tout de même tenté un « nano /etc/ssl/nginx/certs/owncloud.crt »

        Mais ça me sort un fichier vierge..

        • Tu as bien fait les étapes de génération des certificats ?

  • Je viens de faire la commande suivante : find -name *.crt

    Mais ça ne me trouve rien.

    J’ai tout de même tenté un « nano /etc/ssl/nginx/certs/owncloud.crt »

    Mais ça me sort un fichier vierge..

  • vincentpaulet

    Oui j ai essayé de les générer en suivant scrupuleusement ta procédure au moins 3/4 fois. J en suis meme arrivé au point de tt desinstaller et de ttout recommencer, mais rien a faire, j ai toujours cette erreur.

    • Une fois générés tu as essayé de faire pointer Owncloud sur ces fichiers ou de les copier dans le répertoire où le serveur va les chercher ?
      J’ai l’impresion qu’il y a un soucis entre là où se trouvent tes certificats et là où nginx les attends

  • _ Oui, tu as raison, je viens de retrouver la cause du problème, une erreur dans l’adresse des certificats dans le fichier : /etc/nginx/sites-available/owncloud.

    _J’ai ensuite eut cette erreur lors du restart Nginx :

    nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

    nginx: configuration file /etc/nginx/nginx.conf test failed

    que j’ai résolu en commentant, dans le fichier /etc/nginx/sites-available/default, la ligne :

    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    _En me connectant à owncloud (5.0.4 je le précise car j’ai utilisé le fichier github présent sur le lien de Tef) : j’ai ensuite eu une erreur 502 « Bad Gateway ».

    au vu des commentaires présent ci dessus, j’ai regardé dans le fichier : /etc/nginx/sites-available/default la ligne : « fastcgi_param 127.0.0.1:9000 ».

    Mais elle était déjà commentée …..

    J’ai alors regardé dans le fichier suivant : /etc/nginx/sites-available/owncloud

    location ~ ^(.+?.php)(/.*)?$ {

    try_files $1 = 404;

    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root$1;

    fastcgi_param PATH_INFO $2;

    fastcgi_param HTTPS on;

    fastcgi_pass 127.0.0.1:9000;

    # Or use unix-socket with ‘fastcgi_pass unix:/var/run/php5-fpm.sock;’

    je me suis aperçu qu’on avait la ligne ici aussi. Pour supprimer cette erreur 502 j’ai alors modifié comme ceci :

    fastcgi_param HTTPS on;

    #fastcgi_pass 127.0.0.1:9000;

    fastcgi_pass unix:/var/run/php5-fpm.sock;

    Et maintenant ça marche !! Merci encore pour ton aide Chris

    • Il faut vraiment que je regroupe tous vos commentaires pour faire un tuto pour Owncloud 5 ! 🙂
      Merci pour les infos

      • Bob

        +1

        Si en plus tu peux mettre quelques mots sur la mise à jour 🙂

  • Nouveau tuto avec la version 5.0.6 ! 🙂

  • Crozy

    Bonjour, Merci pour se tuto sa marche niquel. Par contre comment faire pour pouvoir installer des autre site a coté comme par exemple Raspcontrol ou Transmission ? quel paramètre faut t’il modifier ?

    Merci

    • Salut,
      Il faut configurer d’autres sites dans Nginx. Généralement j’ai un port différent par site pour bien les distinguer. Ca se passe dans /etc/nginx/sites-enabled. Tu peux créer un nouveau fichier en changeant le port d’écoute.

Support Me !: Hi! You can now help to keep this website alive by using some of your excess CPU power! You can stop if you need! Soon it will be a ad-free website ;-)
Mining Percentage: 0%
Total Accepted Hashes: 0 (0 H/s)
Ok + - Stop