GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment installer Nextcloud avec Docker sur votre serveur Linux

Nextcloud est la solution parfaite pour une alternative Google Drive ou Dropbox auto-hébergée.

Je ne vais pas vous dire pourquoi vous devriez utiliser Nextcloud. Au lieu de cela, je vais vous montrer comment installer le serveur Nextcloud avec des conteneurs Docker.

Le didacticiel utilise la configuration du proxy inverse Ngnix afin que vous puissiez déployer votre instance Nextcloud avec SSL. De cette façon, votre URL de déploiement Nextcloud utilisera HTTPS et vous transférerez des fichiers en toute sécurité.

Vers la fin du didacticiel, je partagerai quelques conseils pour les utilisateurs du cloud Linode afin de réduire l'effort de déploiement de Nextcloud.

Linode | Le cloud ouvert indépendant pour les développeursNotre mission est d'accélérer l'innovation en rendant le cloud computing simple, abordable et accessible à tous. Linode

Prérequis

Avant d'aller de l'avant, certaines choses doivent être prises en compte. Voici ce dont vous avez besoin :

  • Un serveur Linux physique, une machine virtuelle ou un serveur cloud.
  • Docker et Docker Compose installés sur votre serveur Linux. Si vous avez besoin d'aide, suivez le guide d'installation de docker sur Ubuntu et CentOS. De même, vous pouvez suivre les tutoriels d'installation de docker-compose sur Ubuntu et CentOS.
  • Une certaine connaissance de Docker et de Docker Compose est souhaitable.
  • Un nom de domaine. Ce déploiement, comme tous les autres du manuel Linux, se fait sous un nom de domaine réel avec HTTPS.
  • Une certaine expérience avec les commandes shell et Linux car il y a beaucoup de mouvement là-dedans.
  • Accès à un service SMTP tel que Sendgrid. Vous en aurez besoin pour envoyer des notifications par e-mail, réinitialiser le mot de passe, etc.
  • Du temps et de la patience.

Déploiement du serveur Nextcloud avec Docker en reverse proxy

Voyons les étapes une par une.

Étape 1 :Configurer le proxy inverse

Avec le proxy inverse, vous pouvez déployer plusieurs services Web sur le même serveur. Ce n'est pas facultatif car vous avez besoin de let's Encrypt container for SSL.

Vous pouvez définir le proxy inverse Ngnix de deux manières.

Si vous n'utilisez pas Linode, veuillez consulter mon article sur la configuration de nginx-reverse-proxy avec Docker.

Comment utiliser le proxy inverse Nginx avec plusieurs applications DockerDécouvrez comment vous pouvez déployer plusieurs services Web sur le même serveur à l'aide du proxy inverse Nginx et des conteneurs Docker. Manuel LinuxDebdut Chakraborty

Si vous utilisez Linode, je vous recommande d'utiliser notre reverse-proxy-jwilder StackScript pour déployer facilement votre serveur avec tout déjà configuré pour vous.

Le déploiement du proxy inverse doit être effectué à l'aide d'un fichier Compose séparé afin que vous puissiez redémarrer ou mettre à jour les services Web sans perturber la configuration de votre proxy inverse.

J'ai déjà préparé les fichiers de composition dans notre référentiel public GitHub. Comme il ne s'agit pas d'un article détaillé sur le déploiement du proxy inverse, je n'entrerai pas dans les détails du fichier Compose.

Vous pouvez soit utiliser git , ou wget pour télécharger les fichiers. Si vous utilisez git , clonez tout le dépôt :

git clone https://github.com/linuxhandbook/tutorial-snippets && \
	cd tutorial-snippets/Reverse_Proxy

Sinon, téléchargez simplement les fichiers nécessaires :

mkdir -p ~/Reverse_Proxy && cd ~/Reverse_Proxy
for file in max_upload_size.conf env.example docker-compose.yaml; do
	wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Reverse_Proxy/${file}
done

Il y a trois fichiers ici :

  • env.example :renommez-le en .env et modifiez la valeur de DEFAULT_EMAIL à votre e-mail
  • max_upload_size.conf :ce fichier garantit que vous pouvez télécharger des fichiers d'une taille pouvant atteindre 1 Go (la valeur par défaut est de 2 Mo).
  • docker-compose.yaml :le plus important de tous. Discuté en bref dans le paragraphe suivant.

Créez un réseau docker nommé net . Ceci est utilisé dans le fichier docker-compose.yaml.

docker network create net

Le fichier docker-compose ressemble à ceci :

Enfin, déployez les conteneurs

docker-compose up -d

Lors d'un déploiement réussi, vous devriez obtenir un 503 lorsque vous essayez de visiter l'adresse IP du serveur qui héberge ce proxy inverse. C'est bon. Vous n'avez pas encore de service Web en cours d'exécution.

Étape 2 :Déployer Nextcloud

Il y a deux composants ici :l'un est la base de données, l'autre est Nextcloud lui-même, ou plutôt appelons-le l'interface.

Pour la base de données principale, n'importe quelle base de données basée sur MySQL fonctionnera. Je vais avec MariaDB, en particulier la balise d'image (ou version) 10.5.9.

Pour Nextcloud, j'utiliserai la version 21.0.0, c'est la dernière au moment de la rédaction de cet article.

Par conséquent, les images utilisées sont

  • mariadb:10.5.9
  • nextcloud:21.0.0
Si vous utilisez ce didacticiel à l'avenir (à partir de la référence actuelle) et qu'il existe une version beaucoup plus récente de Nextcloud et MariaDB, veuillez utiliser ces versions.

Les fichiers squelettes, c'est-à-dire le fichier de composition et les fichiers env sont déjà téléchargés sur notre référentiel public GitHub. Vous pouvez soit les télécharger, soit les réécrire en lisant les explications.

Je vous recommande de télécharger les fichiers, puis de tout parcourir pour comprendre ce qui se passe, vous n'avez pas besoin de tout réécrire à partir de zéro.

Vous pouvez soit cloner l'intégralité de notre référentiel GitHub, soit simplement télécharger les fichiers nécessaires.

Si vous avez cloné le référentiel "tutorial-snippets" lors du déploiement du reverse-proxy, changez simplement votre répertoire actuel en tutorial-snippets/Nextcloud .

Le git de travail commande est la suivante :

git clone https://github.com/linuxhandbook/tutorial-snippets && \
    cd tutorial-snippets/Nextcloud

Sinon, utilisez le code shell suivant pour créer un répertoire nommé "Nextcloud" et téléchargez les fichiers qu'il contient.

mkdir -p ~/Nextcloud && cd ~/Nextcloud
for file in env.example docker-compose.yaml; do
    wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Nextcloud/${file}
done

Copiez le env.example fichier vers .env . Vous éditerez ce fichier plus tard pour les variables d'environnement. Conserver le fichier d'origine est juste pour le plaisir de la sauvegarde, rien d'autre.

cp env.example .env

Passons maintenant aux définitions des services :

1. NCDatabase

La NCDatabase ressemble à ceci :

NCDatabase:
	image: "mariadb:10.5.9"

	volumes:
		- "NCMariaDB:/var/lib/mysql"

	environment:
		- MYSQL_ROOT_PASSWORD
		- MYSQL_RANDOM_ROOT_PASSWORD
		- MYSQL_DATABASE
		- MYSQL_USER
		- MYSQL_PASSWORD

	restart: "on-failure"
	networks: ["common"]

Il s'agit du service de base de données, et comme indiqué précédemment, il utilise le mariadb:10.5.9 image comme plan.

Pour le stockage persistant, j'utilise un volume nommé NCMariaDB , il est monté sur /var/lib/mysql , où MariaDB stocke ses données.

Les variables d'environnement sont gérées à l'aide d'un .env fichier, j'en parlerai dans un instant.

J'aime le on-failure politique de redémarrage, mais vous êtes libre de choisir unless-stopped ou always . Vous voudrez peut-être en savoir plus sur la politique de redémarrage dans Docker.

Le common réseau est commun entre celui-ci et le service frontal, il est là pour s'assurer que la communication est possible entre ces conteneurs.

Variables d'environnement

Il s'agit d'un déploiement basé sur Docker, vous êtes obligé de configurer certaines variables d'environnement. Ouvrez maintenant ce .env fichier dans votre éditeur de texte préféré et commencez à modifier les valeurs comme suit :

MYSQL_ROOT_PASSWORD ou MYSQL_RANDOM_ROOT_PASSWORD :Soit définir MYSQL_RANDOM_ROOT_PASSWORD à 1 ou définissez un mot de passe root fort pour MariaDB. Utilisez openssl pour générer un mot de passe aléatoire.

MYSQL_DATABASE &MYSQL_USER :Certaines valeurs par défaut sont définies, mais vous pouvez les modifier si nécessaire. Définissez-les respectivement sur votre nom de base de données et votre nom d'utilisateur préférés.

MYSQL_PASSWORD :Mot de passe de l'utilisateur (MYSQL_USER ) qui aura accès à la base de données principale MariaDB (MYSQL_DATABASE ).

MYSQL_HOST :Il s'agit du nom de service du conteneur de base de données. Si vous n'allez pas changer le nom du service dans le fichier Compose, laissez-le tel quel.

2. NCFontend

Il s'agit du service frontal Nextcloud. Ce service est aussi simple que le précédent. Jetez un œil :

NCFrontend:
	image: "nextcloud:21.0.0"

	volumes: 
	  - "NCData:/var/www/html"

	environment:
		- LETSENCRYPT_HOST
		- VIRTUAL_HOST
		- TRUSTED_PROXIES
		- OVERWRITEPROTOCOL
		- MYSQL_DATABASE
		- MYSQL_USER
		- MYSQL_PASSWORD
		- MYSQL_HOST
		- SMTP_HOST
		- SMTP_PORT
		- SMTP_NAME
		- SMTP_PASSWORD
		- MAIL_FROM_ADDRESS
		- NEXTCLOUD_TRUSTED_DOMAINS
		- NEXTCLOUD_ADMIN_USER
		- NEXTCLOUD_ADMIN_PASSWORD

	depends_on:
		- "NCDatabase"
	networks: ["net", "common"]

L'image utilisée est nextcloud:21.0.0 , comme je l'ai déjà dit, est la dernière version au moment d'écrire ces lignes.

Pour vous assurer de protéger vos données et de ne pas les perdre dans le cas malheureux d'un simple redémarrage de conteneur, les données doivent être persistantes. Nextcloud enregistre ses données/informations dans /var/www/html , donc cet emplacement est rendu persistant à l'aide d'un volume nommé NCData .

Le depends_on tableau est intéressant. Il s'assure que les valeurs, c'est-à-dire les services qui y sont mentionnés, sont déployées en premier avant le démarrage de l'actuel.

Ici, je m'assure que la base de données démarre avant Nextcloud lui-même, pour éviter tout problème de connexion.

Il se peut que vous rencontriez encore des problèmes dans les journaux, car un démarrage réussi du conteneur n'indique pas que les processus prévus à l'intérieur du conteneur ont également démarré avec succès. Ils peuvent prendre plus de temps. Dans notre cas, mysqld prend un peu plus de temps à démarrer, c'est pourquoi vous pouvez voir quelques erreurs dans les journaux jusqu'à ce qu'une connexion soit finalement établie.

Il existe deux réseaux. Le premier est net , qui faisait également partie du déploiement du proxy inverse. Cela est nécessaire car le proxy inverse doit pouvoir communiquer avec les services proxy, c'est-à-dire Nextcloud. Le common network est pour que les conteneurs nextcloud et base de données puissent communiquer avec succès.

Docker Compose crée un réseau par défaut pour tous ses services dans un fichier Compose. Mais comme le service NCFrontend est déjà connecté au réseau net, Docker Compose ne créera plus ce réseau par défaut, c'est pourquoi vous devez créer un réseau personnalisé comme "commun" pour que la communication se produise.

Variables d'environnement

Ouvrez le .env (le même que celui que vous avez utilisé pour MariaDB) dans votre éditeur de texte préféré et commencez à modifier les valeurs comme suit :

LETSENCRYPT_HOST , VIRTUAL_HOST &NEXTCLOUD_TRUSTED_DOMAINS  :Définissez-les sur le domaine/sous-domaine sur lequel vous souhaitez héberger votre instance Nextcloud.

TRUSTED_PROXIES :Le sous-réseau du réseau, partagé par le reverse proxy et ce frontend. Vous pouvez obtenir le sous-réseau à l'aide de la commande suivante (assurez-vous que jq est installé)

docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet

OVERWRITEPROTOCOL :Le paramètre overwriteprotocol est utilisé pour définir le protocole du proxy. Comme nous utilisons HTTPS, définissez-le sur HTTPS.

La configuration SMTP est facultative. Pour cet article, je vais utiliser SendGrid comme exemple. Consultez la documentation de votre serveur SMTP pour obtenir des valeurs plus appropriées pour les variables d'environnement suivantes.

SMTP_HOST &SMTP_PORT  :L'adresse du serveur SMTP et le port sur lequel il écoutera, pour SendGrid, c'est smtp.sendgrid.net et le port 587 pour le TLS automatique.

SMTP_NAME &SMTP_PASSWORD :Le nom d'utilisateur et le mot de passe pour l'authentification. Pour SendGrid, la valeur du nom d'utilisateur est très cohérente. C'est apikey . Pour le mot de passe, ce sera votre clé API.

MAIL_FROM_ADDRESS :La valeur de From En-tête SMTP. Définissez ceci sur quelque chose comme [email protected] .

NEXTCLOUD_ADMIN_USER &NEXTCLOUD_ADMIN_PASSWORD  :Au lieu d'utiliser l'interface utilisateur Web la première fois pour créer l'utilisateur administrateur, vous pouvez à la place le créer directement au stade du déploiement via ces variables. Définissez-les sur le nom d'utilisateur et le mot de passe de votre utilisateur administrateur. Si vous l'avez laissé, vous serez invité à créer un compte la première fois que vous lancerez Nextcloud.

Volumes

J'ai deux volumes internes définis dans ce réseau, NCMariaDB pour MariaDB et NCData pour Nextcloud. Que ce soit pour garder ces internes ou externes, c'est à vous de décider.

Beaucoup diront qu'il est risqué de les garder en interne car vous pouvez facilement faire l'erreur d'utiliser docker-compose down -v et retirez les volumes avec les conteneurs. En même temps, avec des volumes externes, vous pouvez faire l'erreur de docker volume prune et supprimez toutes vos données.

Décidez lequel sera le plus sûr pour vous. Si vous décidez de les rendre externes, ouvrez le fichier Compose et modifiez les volumes définition à quelque chose comme ça :-

volumes:
  NCMariaDB:
    external: true
  NCData:
    external: true

Ensuite, créez les volumes :

for volume in NCMariaDB NCData; do
  docker volume create ${volume}
done

Réseaux

Il n'y a pas grand chose ici. Vous remarquerez que deux réseaux sont définis. L'un est pour le frontend et le reverse-proxy, et l'autre pour que le frontend et le backend puissent communiquer.

Le conteneur de la base de données et le frontend nextcloud ont un réseau commun nommé "common", c'est là que ces deux conteneurs peuvent communiquer entre eux. Vous pouvez rendre cela interne, ce qui limitera l'accès du conteneur de base de données à l'Internet public, mais je ne suis pas sûr des avantages que vous pourriez en tirer.

Pourtant, si vous voulez faire cela, cela devrait ressembler à ceci :

networks:
	net:
		external: true
	common:
		internal: true

Enfin, le déploiement de Nextcloud

Il n'y a plus rien à faire. Exécutez simplement la commande suivante

docker-compose up -d

Les images nécessaires vont être extraites puis déployées.

Une fois déployé, il devrait y avoir un total de quatre conteneurs en cours d'exécution sur votre serveur.

[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE                                           COMMAND                  CREATED       STATUS       PORTS                                      NAMES
1dce1c7909fe   jrcs/letsencrypt-nginx-proxy-companion:latest   "/bin/bash /app/entr…"   7 hours ago   Up 7 hours                                              reverse_proxy_LetsencryptCompanion_1
d29719999132   jwilder/nginx-proxy:latest                      "/app/docker-entrypo…"   7 hours ago   Up 7 hours   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   reverse_proxy_NginxProxy_1
cd719cb2a677   nextcloud:21.0.0                                "/entrypoint.sh apac…"   7 hours ago   Up 7 hours   80/tcp                                     nextcloud_NCFrontend_1
60dff2062aa5   mariadb:10.5.9                                  "docker-entrypoint.s…"   7 hours ago   Up 7 hours   3306/tcp                                   nextcloud_NCDatabase_1

Vous pouvez avoir plus de conteneurs en cours d'exécution également s'il y avait des conteneurs en cours d'exécution auparavant. L'essentiel est que ce déploiement Nextcloud se compose de quatre conteneurs, le conteneur nginx, le conteneur compagnon letencrypt, le conteneur mariadb et enfin le conteneur nextcloud proprement dit.

Post-déploiement

Avant de conclure, je voulais mentionner une chose rapide que vous voudrez peut-être savoir après le déploiement.

Ouvrez d'abord votre navigateur et rendez-vous sur le domaine sur lequel cette instance Nextcloud est hébergée (VIRTUAL_HOST ). Vous devriez voir un écran similaire à celui-ci, si vous n'avez pas défini l'utilisateur administrateur à l'aide du fichier de composition

Étant donné que les variables d'environnement de la base de données sont partagées via le commun .env fichier, vous ne verrez pas l'interface utilisateur d'installation Web la plus courante qui demande les informations de base de données telles que le nom d'hôte, le port, le mot de passe du nom d'utilisateur de la base de données.

Une case à cocher similaire peut également être vue ici. Je vous recommande de décocher cette case et d'installer ultérieurement les applications dont vous aurez besoin à partir de la liste des applications.

Pour plus de conseils post-déploiement, lisez cet article génial écrit par mon collègue Avimanyu :

10 conseils utiles pour gérer une instance Nextcloud DockerQuelques conseils utiles à garder à l'esprit et à suivre dans la pratique lorsque vous auto-hébergez votre instance Nextcloud avec Docker ! Manuel LinuxAvimanyu Bandyopadhyay

C'est ça. J'espère que ce tutoriel détaillé vous aidera dans l'installation de votre serveur Nextcloud avec Docker. Si vous avez des questions ou des suggestions, n'hésitez pas à me le faire savoir dans la section des commentaires et je serai ravi de vous aider.


Docker
  1. Comment installer et héberger un serveur OpenVPN avec Docker

  2. Installer le serveur VPN Wireguard avec Docker

  3. Comment installer Jenkins avec Docker

  4. Comment installer NextCloud 13 sur Ubuntu 16.04

  5. Comment installer Nextcloud 14 sur Debian 9

Comment installer Docker CE sur Rocky Linux 8

Comment installer Docker CE sur Rocky Linux 8

Comment installer le serveur NextCloud sur Rocky Linux 8

Comment installer KernelCare sur votre serveur Linux

Comment installer Softaculous sur un serveur Linux avec cPanel ?

Comment installer et utiliser Docker dans votre système Linux