Docker – Installation d’un serveur OwnCloud

 

Le but de cet article est de décrire comment installer un serveur OwnCloud via les conteneurs de Docker.

1 – Installation Via un conteneur Docker déjà existant

Dans un premier temps, je vais simplement récupérer le conteneur sur le site : registry hub docker

Parmi toutes les images disponibles, j’ai choisi celle de « l3iggs » : « l3iggs/owncloud » car c’est l’image avec le plus d’étoiles et celle-ci comprend la dernière version de OwnCloud.

Capture2

Depuis ma machine hôte, je vais chercher l’image et la lancer :


docker run --name OwnCloud --link db:mysql -p 8001:80 -p 8005:443 -d l3iggs/owncloud

Pour le détail de la commande :

« docker run » : pour lancer un conteneur

« –name OwnCloud » : permet de nommer le conteneur

« –link db:mysql » : permet de lier ce nouveau conteneur à mon conteneur nommé « db » qui contient le serveur MySQL hébergeant mes bases de données Docker. Ainsi la base de données ne sera pas stockée dans ce même conteneur.

« -p 8001:80 -p 8005:443 » : Ici je lie les ports de mon serveur hôte à ceux de mon nouveau conteneur : 8001 pour le http(80) et 8005 pour le https(443). J’obtiens donc 2 méthodes de connexion à mon serveur OwnCloud HTTP et HTTPS. Par la suite, on forcera le HTTPS.

« -d l3iggs/owncloud » : permet de spécifier le nom de l’image à récupérer, image sur laquelle notre nouveau conteneur sera basé.

Après le téléchargement de l’image par Docker, celui-ci lancera le conteneur en arrière-plan (comprendre que l’on ne rentrera pas directement dans le conteneur lui-même) avec les options spécifiées ci-dessus.

Pour vérifier les conteneurs actifs :


docker ps
 

Le conteneur devrait apparaitre si tout c’est bien passé

Capture3

Pour se connecter sur le serveur OwnCloud, il faut ouvrir un navigateur et entrer l’URL du serveur hôte ainsi que le port attribué à notre conteneur OwnCloud plus tôt (ici 8001 ou 8005)

http://<ip du serveur hôte>:8001/owncloud
https://<ip du serveur hôte>:8005/owncloud

Capture3

Pour terminer cette première partie, il reste à configurer la base de données ainsi que les droits d’écriture sur les répertoires d’OwnCloud.

Pour donner les droits d’écriture sur les répertoires de notre serveur OwnCloud, on va entrer directement dans le conteneur. On commence par vérifier l’ID de notre container OwnCloud


docker ps

Mon container possède un ID commençant par « df8 ». Ces premières lettres suffiront à Docker pour retrouver mon container.

Sans titre

Je rentre dans le conteneur :


docker exec -it df8 bash
 

Puis je modifie les droits sur les répertoires


 

chown -R http:http /usr/share/webapps/owncloud/

Il me reste maintenant à configurer la base de données de mon container « db ». Dans ce container, la base de données est un serveur MySQL avec PHPMyAdmin d’installer. Il est donc possible de configurer la base de données directement depuis le serveur hôte, depuis l’intérieur du conteneur ou encore depuis l’interface de PHPMyAdmin. Ici j’utilise PHPMyAdmin mais les commandes SQL reste les mêmes peut importe la méthode de configuration :


create database owncloud;
grant all privileges on owncloud.* to "owncloud"@"%" identified by 'XXXX';
flush privileges;

Maintenant on revient sur notre page OwnCloud et on renseigne les paramètres de connexion login/mdp et ceux de notre base de données (sur ma capture « root » est a remplacé par « owncloud »).

Capture

Et voilà …. Le serveur OwnCloud est opérationnel

Sans titre

 

2 – Sécurisation avec SSL (HTTPS)

Maintenant pour augmenter la sécurité de mon serveur, je vais chiffrer les échanges en ajoutant un certificat.

À cette étape, je n’avais pas encore mon propre certificat signé par une autorité de certification. Je commence donc par généré ma clé privée ainsi que la demande de certificat associée a cette clé (cette demande est sous forme de fichier CSR contenant les informations de ma demande ainsi que ma clé publique).

Génération de la demande de certificat :

openssl req -nodes -newkey rsa:2048 -sha1 -keyout monserveur.key -out serveur.csr

cert2

Cette étape crée 2 fichiers : ma demande de certificat (fichier .csr) et ma clé privée (fichier .key)

Il faut ensuite récupérer la demande de certificat pour la faire valider par une autorité de certification :

cat serveur.csr

La demande ressemble a quelque chose comme ça :

-----BEGIN CERTIFICATE REQUEST-----
...encrypted text...
-----END CERTIFICATE REQUEST-----

L’étape de validation et création du certificat n’est pas détaillé ici. L’idéal est de regarder sur le site de l’autorité de certification pour savoir comment la réaliser.

De retour sur le serveur,je me retrouve avec ma clé privée (fichier .key) ainsi qu’avec mon certificat (fichier .crt) stockés sur mon serveur hôte dans le répertoire ~/sslcert

Je commence par faire une image de mon serveur OwnCloud actuel :

commit

Maintenant je stop le container actif de OwnCloud

docker stop df8

Puis je relance l’image avec uniquement le port 443 de naté sur mon serveur hôte

<a suivre, quelques problèmes a partir d’ici>