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

Déployer Nextcloud sur Docker avec Ansible

Aperçu

Dans cet article, nous allons passer en revue les étapes de déploiement de Nextcloud sur Docker à l'aide d'Ansible. Le but de cette procédure est d'automatiser le processus de déploiement de Nextcloud sur Docker avec le playbook Ansible.

Afin de déployer nextcloud sur docker avec succès en utilisant ansible, il y a d'abord quelques exigences à configurer (énumérées ci-dessous dans les prérequis)

Prérequis

  • Docker installé et en cours d'exécution sur la machine hôte cible (l'installation de Docker peut également être automatisée avec Ansible - lien vers le POST)
  • Accès SSH activé sur les hôtes distants avec les paramètres de connexion prédéfinis dans le fichier d'hôtes Ansible
  • Ansible installé sur la machine cliente (votre machine)
  • Installation du module Docker Python et Python pour Ansible sur la machine cible
  • Python installé sur votre ordinateur local

Installer le module Python Docker pour Ansible

La plupart des distributions Linux ont Python3 préinstallé, mais pour d'autres, le module Python Docker utilisé par Ansible peut être manquant. Vous saurez que c'est si vous obtenez une erreur mentionnant que le module est manquant ou introuvable. Exemple d'image de l'erreur ci-dessous :

Le module mentionné est en fait le SDK Docker que Python utilise pour travailler avec Docker. Le moyen le plus simple d'installer le module Python Docker est d'utiliser l'outil "pip". Si l'outil "pip" est manquant, vous pouvez facilement installer puis avec lui installer le module python docker :

Debian/Ubuntusudo apt install python3-pipFedorasudo dnf install python3-pipCentOS/RedHatsudo yum python3-pip

Après avoir installé le pip, exécutez la commande pour installer le module docker :

menu fixe d'installation pip3

Si par hasard, vous rencontrez une erreur dans Ansible indiquant qu'il ne peut pas trouver le module Python, ajoutez une variable d'interpréteur python dans votre fichier hosts. Dans la plupart des cas, il se trouve soit dans "/usr/bin/python3" ou "/usr/lib/python3" .

L'erreur ressemble à ceci :

La variable d'interpréteur dans le fichier hosts ressemble à ceci :

ansible_python_interpreter=/usr/bin/python3

Écrivez les hôtes dans le fichier hosts avec les paramètres de connexion

Première étape - Ajouter les paramètres nécessaires dans le fichier hosts pour qu'Ansible puisse atteindre, se connecter et interagir avec notre machine :

sudo nano /etc/ansible/hosts

Dans le fichier hosts, ajoutez les paramètres pour ressembler à ceci :

Une fois les paramètres nécessaires pour notre hôte distant ajoutés, enregistrez le fichier et quittez.

Playbook Ansible pour le déploiement de Nextcloud sur Docker

Pour ce déploiement, nous utiliserons le playbook suivant :

---- hosts :docker vars :db_volume :mariadb nextcloud :nextcloud tasks :- nom :déployer le serveur MariaDB docker_container :image :mariadb name :mariadb volumes :- "{{db_volume}} :/var/lib/mysql " env :MYSQL_ROOT_PASSWORD :somerootpassword MYSQL_PASSWORD :somemysqlpassword MYSQL_DATABASE :db MYSQL_USER :mysqluser - name :Deploy Nextcloud docker_container :image :nextcloud name :nextcloud restart_policy :always ports :- "8080:80" liens :- "{{db_volume}} :/ var/lib/mysql" volumes :- "{{nextcloud}}:/var/www/html" env :MYSQL_PASSWORD :un mot de passe mysql MYSQL_DATABASE :db MYSQL_USER :mysqluser MYSQL_HOST :mariadb

N'hésitez pas à le copier.

Répartition du livre :

hôtes :docker // variable pour cibler uniquement les hôtes de machine qui sont dans le groupe docker
variables : db_volume :mariadb  nextcloud :nextcloud  // [FACULTATIF]  variables définies pour chaque conteneur. Ceux-ci sont utilisés pour définir les volumes sur l'hôte et correspondent aux noms de conteneurs.
tâches ://  Définition d'une tâche qui déploiera un conteneur MariaDB (serveur de base de données MariaDB sous forme de conteneur). La tâche extraira l'image Docker officielle de MariaDB à partir du hub Docker, définira un nom de conteneur "mariadb" et définira un volume persistant sur la machine hôte pour le stockage de la base de données.- nom :Déployer le serveur MariaDB //  Nom de la tâchedocker_container ://  Fonction Docker qu'Ansible utiliseraimage :mariadb //  Image Docker à déroulernom :mariadb //  Spécifiez le nom du conteneurvolumes :- "{{db_volume}}:/var/lib/mysql" //  Spécifiez un volume sur la machine hôte pour le stockage persistant
env ://  Variables d'environnement pour définir les paramètres de la base de données tels que le mot de passe root, le mot de passe de l'utilisateur admin, le nom de la base de données et le nom d'utilisateur du nouvel utilisateur sur le serveur MariaDBMYSQL_ROOT_PASSWORD :somerootpassword // MySQL root password MYSQL_PASSWORD :un mot de passe mysql //  Mot de passe admin/utilisateur standard MySQL à utiliser par NextcloudMYSQL_DATABASE :db //  Nom de la base de données MySQLMYSQL_USER :mysqluser //  Nom d'utilisateur administrateur/utilisateur standard pour Nextcloud à utiliser
// C'est la tâche qui déploiera le conteneur Nextcloud Docker. Comme pour le conteneur MariaDB, Ansible extrait l'image officielle Nextcloud du hub Docker. Ici, nous avons également spécifié la politique de redémarrage du conteneur (quand redémarrer le conteneur) et également défini le nombre de ports à exposer sur le conteneur et à lier à l'hôte, afin que le conteneur puisse être accessible via le navigateur et le protocole http.- nom :Déployer Nextcloud //  Nom de la tâchedocker_container ://  Fonction Docker qu'Ansible utiliseraimage :nextcloud //  Image Docker à déroulernom :nextcloud //  Spécifiez le nom du conteneurrestart_policy :toujours //  Définir l'attribut pour lesports de redémarrage du conteneur :- "8080:80" //  Spécifiez les ports à exposer sur le conteneur pour qu'ils soient accessibles via les liens du navigateur Web :- "{{db_volume}} :/var/lib/mysql //  Variable permettant de préciser le lien vers le serveur MySQL afin que Nextcloud puisse se connecter aux volumes de la base de données :- "{{nextcloud}}:/var/www/html" //  Spécifiez un volume sur la machine hôte pour le stockage persistant
// Variables d'environnement pour la base de données MariaDB, que Nextcloud doit utiliser pour se connecter à la base de données et utiliser la base de données pour le stockage des données.env :MYSQL_PASSWORD :somemysqlpassword //  Variable pour spécifier MySQL pour Nextcloud à utiliserMYSQL_DATABASE :db //  Nom de la base de données MySQL qui permettra à Nextcloud de se connecter à MYSQL_USER :mysqluser //  L'utilisateur MySQL pour Nextcloud doit utiliserMYSQL_HOST :mariadb //  Serveur de base de données MySQL auquel se connecter (nom du conteneur docker que nous avons précédemment défini)

Déployer Nextcloud sur Docker à l'aide d'Ansible

Maintenant que nous avons notre playbook, nous pouvons maintenant l'exécuter :

ansible-playbook nextcloud-ansible -l docker

Résultat attendu et vérifiez si les conteneurs sont déployés et en cours d'exécution :

Vérifiez si le Nextcloud est accessible via le navigateur :

Petite note sur le problème possible avec la base de données :

Vous pouvez obtenir l'erreur suivante sur la page de configuration finale lorsque vous essayez de créer un compte pour Nextcloud :

"InnoDB refuse d'écrire des tables avec ROW_FORMAT=COMPRESSED ou KEY_BLOCK_SIZE"

Cela a commencé à se produire sur Nextcloud version 21 et ultérieure. Essentiellement, Nextcloud ne prend pas en charge la compression InnoDB sur les bases de données. La solution de contournement consiste simplement à désactiver la compression InnoDB et, pour ce faire, à ajouter la configuration suivante dans le fichier Ansible .yaml à la configuration de MariaDB et à relancer le déploiement :

« commande :–transaction-isolation=READ-COMMITTED –binlog-format=ROW –innodb-file-per-table=1 –skip-innodb-read-only-compressed »

La configuration complète de MariaDB devrait ressembler à ceci :

tâches :- nom :Déployer le serveur MariaDB   docker_container :    image :mariadb     nom :mariadb     commande :--transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 -- skip-innodb-read-only-compressed     volumes :      - "{{db_volume}}:/var/lib/mysql"     env :      MYSQL_ROOT_PASSWORD :somerootpassword       MYSQL_PASSWORD :somemysqlpassword       MYSQL_DATABASE :db       MYSQL_USER mysqluser 

Après avoir réexécuté cette configuration, le problème devrait être résolu.

Résumé

Pour résumer l'article - nous avons réussi à déployer Nextcloud sur Docker en utilisant Ansible et avec cela nous avons automatisé le processus de déploiement de Nextcloud sur Docker. Bien que l'environnement Ansible devait être configuré avec le module Python et Python Docker pour que ce processus réussisse. Ensuite, nous avons écrit et exécuté le playbook Ansible qui déploie Nextcloud avec la base de données et a également une persistance des données afin que les données et les fichiers ne soient pas stockés dans le conteneur Docker.

Merci pour votre temps…


Docker
  1. Machines virtuelles multipasses à l'aide d'Ansible

  2. Configurer Nextcloud avec Redis à l'aide de Docker

  3. Déployer WordPress sur Docker en utilisant Ansible

  4. Comment installer Docker avec Ansible [Debian/Ubuntu]

  5. Comment installer WordPress avec Docker

Comment installer Ansible sur Ubuntu 20.04

Comment déployer Pi-Hole sur Debian 11

Installer Navidrome avec Docker

Comment installer Gitea sur Ubuntu en utilisant Docker

Déployer une installation de production Docker MariaDB

Utiliser Docker Desktop pour gérer un conteneur