Ubuntu – Installation de ownCloud 8 avec Nginx, PHP-FPM, MySQL et SSL/TLS

ownCloud est la solution vous permettant de stocker et synchroniser vos fichiers, vos contacts, votre agenda et vos contenus multimédias directement sur votre serveur. Vous pourrez alors accéder à toutes ces informations directement depuis votre navigateur web ou votre mobile.

ownCloud peut être installé sur n’importe quel serveur supportant une version récente de PHP et supportant SQLite (base de données par défaut), MySQL ou PostgreSQL.

Les principales fonctionnalités de ownCloud sont :

  • Synchronisation de fichiers entre différents ordinateurs
  • Stockage sécurisé (chiffrage des fichiers)
  • Partage de fichiers entre utilisateurs ou publiquement
  • Lecteur de musique en ligne
  • Serveur de fichiers WebDAV
  • Calendrier (permettant la synchronisation CalDAV)
  • Gestionnaire de contacts (CardDAV)
  • Éditeur de texte en ligne (proposant la coloration syntaxique)
  • Visionneuse de documents en ligne (PDF, Open document)
  • Galerie d’images, qui permet de visualiser ses photos et de les classer en albums.
  • Gestionnaire de favoris…

1 – Prérequis

Notre choix se portera sur le serveur HTTP Nginx pour une question de performances. Nginx est reconnu pour ses hautes performances, sa stabilité, son ensemble de fonctionnalités, sa configuration simple ainsi que sa faible consommation de ressources.

Le module PHP-FPM permettra la communication entre le serveur Nginx et PHP, basée sur le protocole FastCGI. Ce module, écoutant sur le port 9000 par défaut ou sur un socket UNIX, permet notamment l’exécution de scripts PHP dans un processus indépendant de Nginx avec des UID et GID différents. Il sera alors possible, dans le cas de la gestion de plusieurs sites sur un même serveur, de créer et configurer un groupe (appelé aussi pool) de processus par site.

Lors de l’installation de MySQL 5.5, il vous sera demandé de définir un mot de passe pour l’utilisateur root ainsi que la confirmation de ce mot de passe.

Installez tout d’abord les paquets suivants :

Vous devez disposer d’une version de PHP égale ou supérieure à 5.4.
Pour connaître la version installée sur votre système, tapez la commande suivante :

2 – Installation et téléchargement de ownCloud

  • Téléchargez la dernière version de ownCloud :
  • Décompressez l’archive ownCloud :
  • Supprimez l’archive ownCloud téléchargée :

3 – Droits Unix

Lors du déploiement basique d’un serveur HTTP, l’utilisateur sous lequel fonctionne ce serveur (Apache, Nginx…) est la plupart du temps « www-data », « nobody » ou « apache ». Cela signifie que si plusieurs sites existent sous la même instance d’Apache, tous utilisent le même utilisateur. Or si l’un des sites s’avère corrompu par un utilisateur malveillant alors l’assaillant peut profiter pleinement de tous les droits de l’utilisateur sous lequel tourne le serveur web. Tous les sites s’avèrent donc vulnérables.

Pour des raisons évidentes de sécurité, il est donc recommandé de cloisonner ces utilisateurs et d’avoir un utilisateur dédié à la gestion du dossier owncloud. Cet utilisateur aura des droits aussi restreints que possible à ce répertoire.

Commencez par créer un utilisateur owncloud.

L’utilisateur owncloud sera le propriétaire du dossier /var/www/owncloud. Ce dossier appartiendra au groupe www-data pour que Nginx puisse y avoir accès.

4 – Sécuriser ownCloud avec SSL

Avec un service tel que ownCloud, où des données confidentielles peuvent être stockées, il est important de sécuriser vos flux d’informations grâce au protocole SSL. Nous allons mettre en place un certificat serveur grâce à StartSSL. L’avantage de StartSSL est que cette autorité de certification est reconnue par la majorité des navigateurs et, contrairement à un certificat auto-signé, l’accès à votre cloud ne provoquera pas une alerte dans le navigateur de vos visiteurs et ne nécessitera pas une acceptation du dit certificat de leur part. De plus, le certificat de classe 1 est gratuit.

4.1 – Inscription sur StartSSL

Rendez-vous à cette adresse : https://www.startssl.com/ pour vous enregistrer et remplissez les informations demandées par le site. Vous allez recevoir un code par mail qu’il faudra entrer dans le champs prévu à cet effet dans la page web qui vient de s’afficher.

Vous allez arriver sur une page vous demandant le niveau d’authentification que vous souhaitez. Choisissez « High Grade ».


1
2
1

Sélectionnez High Grade

2

Cliquez sur Continuez


Pour vous authentifier, StartSSL utilise un certificat qui sera intégré à votre navigateur internet. Cette étape permet donc de générer ce certificat. Cliquez sur « Install » pour l’ajouter à votre navigateur.


1
1

Cliquez sur Install


Le certificat est désormais lié à votre navigateur. Je vous recommande donc fortement de sauvegarder ce certificat pour pouvoir l’utiliser sur une autre machine. Pour cela, rendez-vous dans Options > Avancé > Certificats > Afficher les certificats > Vos certificats puis sélectionnez le certificat et sauvegardez-le.

Vous pouvez ensuite cliquer sur « Finish » et commencer à utiliser les services StartSSL.

4.2 – Validation du nom de domaine

Pour créer un certificat de classe 1, il vous faut tout d’abord valider votre domaine.

Rendez-vous à l’adresse suivante : https://www.startssl.com/?app=12 puis dans l’onglet « Validations Wizard ». Sélectionnez « Domain Name Validation » dans le menu déroulant et cliquez sur « Continue ».


1
2
3
1

Cliquez sur l’onglet Validations Wizard

2

Sélectionnez Domain Name Validation

3

Cliquez sur Continue


Entrez alors votre nom de domaine puis validez.


1
2
1

Entrez votre nom de domaine

2

Cliquez sur Continue


Choisissez sur l’adresse mail où vous souhaitez recevoir le mail de validation (en général [email protected] ou [email protected]). Bien-entendu vous devez pouvoir consulter les mails à destination de cette adresse.

Saisissez le code de vérification et cliquez sur « Finish ».

4.3 – Génération d’un certificat pour votre domaine

Rendez-vous à l’adresse suivante : https://www.startssl.com/?app=12 puis dans l’onglet « Certificates Wizard ». Sélectionner « Web Server SSL/TLS Certificate » dans le menu déroulant et cliquez sur « Continue ».


1
2
3
1

Cliquez sur l’onglet Certificates Wizard

2

Sélectionnez Web Server SSL/TLS Certificate

3

Cliquez sur Continue


Sur la page suivante, cliquez sur « Skip ».


1
1

Cliquez sur Skip


Vous allez maintenant générer une clé privée encryptée pour votre serveur. On va se placer dans le dossier /etc/ssl/nginx qui nous servira à stocker nos clés et certificats.

Nous allons maintenant générer la clé RSA privée pour le serveur ainsi que le .csr que nous allons fournir à StartSSL

Différentes informations vous seront demandés lors de la génération du certificat. J’attire votre attention sur le champ « Common name » dans lequel vous devez mettre le domaine/sous-domaine pour lequel vous allez générer votre certificat.

Protégez votre clé privée des regards indiscrets :

Vous disposez désormais de 2 fichiers :

  • la clé privée : owncloud-ssl-private.key
  • le certificat : owncloud-ssl-certificate.csr

Ouvrez le fichier owncloud-ssl-certificate.csr et copiez le contenu de votre CSR (Certificate Signing Request) dans StartSSL :


1
2
1

Copiez le contenu de votre CSR ici

2

Cliquez sur Continue


Sélectionnez votre domaine pour lequel vous souhaitez générer votre certificat.


1
2
1

Sélectionnez votre nom de domaine

2

Cliquez sur Continue


Entrez votre sous-domaine pour lequel vous souhaitez générer votre certificat.


1
2
1

Entrez votre sous-domaine

2

Cliquez sur Continue


Vous arrivez alors sur une page résumant les informations relatives à votre certificat. Continuez et vous devriez obtenir un message comme quoi votre demande doit être vérifiée par les équipes de StartSSL.



4.4 – Mise en place du certificat sur votre serveur

Une fois le mail reçu, vous pouvez récupérer votre certificat signé à cette adresse : https://www.startssl.com/?app=12 puis dans « Toolbox > Retrieve Certificat ».

Copiez le certificat signé sur votre serveur dans un fichier :

Récupérez maintenant le certificat racine de StartSSL (Root CA) et le certificat intermédiaire de classe 1 :

Créez un certificat unifié à partir des certificats racine et intermédiaire :

Ajoutez une ligne à la fin du certificat signé si celle-ci n’est pas présente grâce à la commande sed et, enfin, créez un certificat unifié à partir des certificats signé, racine et intermédiaire :

Si vous souhaitez créer un certificat pour un autre sous-domaine, vous pouvez reprendre directement à l’étape 4.3.

5 – Nginx

Modifiez les directives suivantes du fichier de configuration Nginx /etc/nginx/nginx.conf :

  • worker_processes 8; : l’un des paramètres à ajuster immédiatement est le worker_processes. Pour profiter pleinement de la puissance de votre serveur, il est recommandé de mettre autant de worker_processes que de cœurs disponibles sur votre serveur.Pour connaître le nombre de cœurs sur votre serveur, il suffit de lancer la commande :
  • server_tokens off; : pour des raisons de sécurité, il est recommandé de désactiver l’envoi d’informations telles que le numéro de version de votre Nginx. Pour cela, décommentez cette ligne.

6 – PHP-FPM

Créez le fichier de configuration suivant : /etc/php5/fpm/pool.d/owncloud.conf

Certaines valeurs sont très arbitraires et seront différentes d’un serveur à l’autre et surtout du nombre d’utilisateurs simultanés sur votre ownCloud… Cependant ces différentes directives respectent certaines conditions :

  • [owncloud] : nom du pool. Il est possible de créer plusieurs pools par fichier. Chaque pool doit commencer par cette directive.
  • listen : interface d’écoute des requêtes. Les syntaxes acceptées sont ADRESSE_IP:PORT (ex: listen = 127.0.0.1:9000) et /path/to/unix/socket (ex: listen = /var/run/owncloud.sock).Le socket est représenté comme un simple fichier sur le système et permet d’interfacer des processus entre eux sans passer par la couche réseau du système, ce qui est inutile lorsque Nginx et PHP-FPM sont hébergés sur le même serveur. Je vous conseillerais donc d’utiliser un socket.
  • listen.owner & listen.group : affecte l’utilisateur et le groupe au socket Unix si utilisé. Ces deux paramètres peuvent être associés au paramètre listen.mode qui définit les permissions du socket (660 par défaut). Il est important que Nginx ait les doits de lecture sur le socket Unix.
  • user & group : utilisateur et groupe sous lesquels le pool de processus sera exécuté. Cet utilisateur et ce groupe doivent bien sûr exister sur votre système et surtout accéder aux fichiers php de votre cloud. Cela veut dire aussi que chaque fichier/répertoire créé dans ownCloud appartiendra à cet utilisateur et à ce groupe.
  • pm : directive acceptant les 3 valeurs suivantes : static, dynamic et ondemand.
    • static : les processus, au nombre de pm.max_children, sont continuellement actifs (quelle que soit la charge) et sont susceptibles de consommer de la mémoire inutilement. Cette directive est recommandée si vous avez un seul blog, donc un seul pool.
    • dynamic : le nombre de processus fils pourra varier suivant la charge. Cependant, nous gardons le contrôle sur le nombre de processus fils à créer au démarrage du serveur, le nombre de processus maximum, en attente de requêtes, etc. Les directives suivantes deviennent obligatoires : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. Cette directive est recommandée si vous avez plusieurs pools avec un fort trafic (plus de 10 000 requêtes/jour).
    • ondemand : aucun processus fils n’est lancé au démarrage du serveur, les processus s’activent à la demande et auront une durée de vie définie par la directive pm.process_idle_timeout. L’intérêt de cette directive est de libérer de la mémoire en cas de faible charge mais celle-ci peut légèrement augmenter le temps de réponse de votre blog. Cette directive est recommandée si vous avez plusieurs pools avec potentiellement une faible affluence.

    Sachant que l’utilisation de ownCloud est personnelle et souvent limitée à quelques utilisateurs, nous choisirons et détaillerons ici la directive ondemand.

  • pm.max_children : nombre maximum de processus fils.
  • pm.process_idle_timeout : durée en secondes avant qu’un processus fils inactif soit détruit.
  • pm.max_requests : nombre de requêtes que chaque processus fils devra exécuter avant d’être détruit. Cette valeur ne doit pas être trop élevée afin de contourner d’éventuelles fuites mémoires, ni trop faible pour ne pas solliciter régulièrement le CPU à chaque création de processus fils. 500 reste une valeur recommandée.

7 – Virtual host

Créez le fichier suivant /etc/nginx/sites-available/owncloud :

Activez le virtual host :

La nouvelle configuration sera prise en compte après redémarrage des services Nginx et PHP-FPM :

8 – Création de la base de données MySQL

Tout d’abord, connectez-vous sur l’interface MySQL avec l’utilisateur root et grâce au mot de passe saisi lors de l’installation du paquet mysql-server-5.5 :

Créez la base de données owncloud :

Tout comme pour la gestion du répertoire owncloud et pour plus de sécurité, vous allez tout d’abord créer un utilisateur MySQL owncloud dédié à la base de données owncloud, renseigner un mot de passe et ensuite lui donner les droits sur cette base de données :

9 – ownCloud

Lancez votre navigateur et rendez-vous à l’adresse suivante : http://cloud.mondomaine.fr/.
Configurez votre compte administrateur et les informations de votre base de données nécessaires à ownCloud :

Vérifiez la force de votre protocole SSL/TLS en vérifiant votre ownCloud sur :

Avec une telle configuration, vous devriez obtenir un A.

ownCloud sur Android…

ownCloud

Découvrez l’excellente application officielle ownCloud sur Android qui vous permettra de synchroniser vos contacts, agendas et documents sur votre mobile android.

ownCloudownCloud, Inc.Disponible sur Google Play


Ubuntu 14.04.3 Server LTS (64bits)Nginx 1.4.6
PHP5-FPM 5.5.9
MySQL Server 5.5.46
Owncloud 8.2

Auteur
AuteurEdouard WATTECAMPS

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

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