GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Implemente Nextcloud en Docker usando Ansible

Resumen

En este artículo, vamos a seguir los pasos para implementar Nextcloud en Docker usando Ansible. El propósito de este procedimiento es automatizar el proceso de implementación de Nextcloud en Docker con el libro de jugadas de Ansible.

Para implementar nextcloud en docker usando ansible con éxito, primero hay que configurar algunos requisitos (enumerados a continuación en los requisitos previos)

Requisitos previos

  • Docker instalado y ejecutándose en la máquina host de destino (la instalación de Docker también se puede automatizar con Ansible:enlace al POST)
  • Acceso SSH habilitado en los hosts remotos con los parámetros de inicio de sesión preestablecidos en el archivo de hosts de Ansible
  • Ansible instalado en la máquina cliente (su máquina)
  • Python instalado y módulo docker de Python para Ansible en la máquina de destino
  • Python instalado en su máquina local

Instalar el módulo Python Docker para Ansible

La mayoría de las distribuciones de Linux tienen Python3 preinstalado, pero para otras puede faltar el módulo Python Docker que usa Ansible. Sabrá que es así si recibe un error que menciona que el módulo falta o no se encuentra. Imagen de ejemplo del siguiente error:

El módulo mencionado es en realidad el SDK de Docker que utiliza Python para trabajar con Docker. La forma más fácil de instalar el módulo Python Docker es con la herramienta "pip". Si falta la herramienta "pip", puede instalarla fácilmente y luego con ella instalar el módulo acoplable de python:

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

Después de instalar el pip, ejecute el comando para instalar el módulo docker:

instalación acoplable de pip3

Si por casualidad, encuentra un error en Ansible que no puede encontrar el módulo de Python, agregue una variable de intérprete de Python en su archivo de hosts. En la mayoría de los casos, se encuentra en “/usr/bin/python3”“/usr/lib/python3” .

El error se parece a esto:

La variable del intérprete en el archivo de hosts se parece a esto:

ansible_python_interpreter=/usr/bin/python3

Anote los hosts en el archivo de hosts con los parámetros de inicio de sesión

Primer paso:agregar los parámetros necesarios en el archivo de hosts para que Ansible pueda acceder, iniciar sesión e interactuar con nuestra máquina:

sudo nano /etc/ansible/hosts

En el archivo de hosts, agregue los parámetros para que se vean así:

Después de agregar los parámetros necesarios para nuestro host remoto, guarde el archivo y salga.

Libro de jugadas de Ansible para la implementación de Nextcloud en Docker

Para esta implementación, usaremos el siguiente libro de jugadas:

---- hosts:docker vars:db_volume:mariadb nextcloud:nextcloud tareas:- nombre:Implementar servidor MariaDB docker_container:imagen:mariadb nombre:mariadb volúmenes:- "{{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" links:- "{{db_volume}}:/ var/lib/mysql" volúmenes:- "{{nextcloud}}:/var/www/html" env:MYSQL_PASSWORD:somemysqlpassword MYSQL_DATABASE:db MYSQL_USER:mysqluser MYSQL_HOST:mariadb

Siéntete libre de simplemente copiarlo.

Desglose del libro de jugadas:

hosts:ventana acoplable // variable para apuntar solo a hosts de máquinas que están en el grupo docker
vars: volumen_db:mariadb nextcloud:nextcloud  // [OPCIONAL]  variables definidas para cada contenedor. Estos se utilizan para configurar volúmenes en el host y coinciden con los nombres de los contenedores.
tareas://  Definió una tarea que implementará un contenedor MariaDB (servidor de base de datos MariaDB en forma de contenedor). La tarea extraerá la imagen oficial de Docker de MariaDB del concentrador de Docker, establecerá un nombre de contenedor con el nombre "mariadb" y establecerá un volumen persistente en la máquina host para el almacenamiento de la base de datos.- nombre:Implementar el servidor de MariaDB //  Nombre de la tareadocker_container://  Función Docker que utilizará Ansibleimage:mariadb //  Imagen acoplable para desplegar nombre:mariadb //  Especifique el nombre del contenedorvolúmenes:- "{{db_volume}}:/var/lib/mysql" //  Especifique un volumen en la máquina host para almacenamiento persistente
env://  Variables de entorno para definir parámetros para la base de datos, como la contraseña raíz, la contraseña del usuario administrador, el nombre de la base de datos y el nombre de usuario del nuevo usuario en el servidor MariaDBMYSQL_ROOT_PASSWORD:somerootpassword // MySQL root password MYSQL_PASSWORD:alguna contraseña mysql //  Contraseña de administrador/usuario estándar de MySQL que utilizará NextcloudMYSQL_DATABASE:db //  Nombre de la base de datos MySQLMYSQL_USER:mysqluser //  Nombre de usuario administrador/usuario estándar para que lo use Nextcloud
// Esta es la tarea que implementará el contenedor Nextcloud Docker. Al igual que para el contenedor de MariaDB, Ansible desplegará la imagen oficial de Nextcloud desde el centro de Docker. Aquí también especificamos la política de reinicio del contenedor (cuándo reiniciar el contenedor) y también establecimos la cantidad de puertos para exponer en el contenedor y enlazar con el host, de modo que se pueda acceder al contenedor a través del navegador y el protocolo http.- nombre :Implementar Nextcloud //  Nombre de la tareadocker_container://  Función Docker que utilizará Ansibleimage:nextcloud //  Imagen acoplable para desplegar nombre:nextcloud //  Especifique el nombre del contenedor restart_policy:always //  Establecer atributo para el reinicio del contenedorpuertos:- "8080:80" //  Especifique los puertos para exponer en el contenedor para que sean accesibles a través del navegador webenlaces:- "{{db_volume}}:/var/lib/mysql //  Variable para especificar el enlace al servidor MySQL para que Nextcloud pueda conectarse a los volúmenes de la base de datos:- "{{nextcloud}}:/var/www/html" //  Especifique un volumen en la máquina host para almacenamiento persistente
// Variables de entorno para la base de datos MariaDB, para que Nextcloud las use para conectarse a la base de datos y usar la base de datos para el almacenamiento de datos.env:MYSQL_PASSWORD:somemysqlpassword //  Variable para especificar MySQL para que Nextcloud use MYSQL_DATABASE:db //  Nombre de la base de datos MySQL que conectará Nextcloud a MYSQL_USER:mysqluser //  Usuario de MySQL para que Nextcloud use MYSQL_HOST:mariadb //  Servidor de base de datos MySQL para conectarse (nombre del contenedor acoplable que establecimos previamente)

Implemente Nextcloud en Docker usando Ansible

Ahora que tenemos nuestro libro de jugadas, podemos ejecutarlo:

ansible-playbook nextcloud-ansible -l ventana acoplable

Resultado esperado y compruebe si los contenedores están desplegados y en ejecución:

Compruebe si se puede acceder a Nextcloud a través del navegador:

Pequeña nota sobre el posible problema con la base de datos:

Es posible que reciba el siguiente error en la página de configuración final al intentar crear una cuenta para Nextcloud:

“InnoDB se niega a escribir tablas con ROW_FORMAT=COMPRESSED o KEY_BLOCK_SIZE”

Esto comenzó a suceder en la versión 21 de Nextcloud y posteriores. Esencialmente, Nextcloud no admite la compresión InnoDB en las bases de datos. La solución para esto es simplemente deshabilitar la compresión InnoDB y, para hacerlo, agregue la siguiente configuración en el archivo .yaml de Ansible en la configuración de MariaDB y vuelva a ejecutar la implementación:

“comando:–transaction-isolation=READ-COMMITTED –binlog-format=ROW –innodb-file-per-table=1 –skip-innodb-read-only-compressed”

La configuración completa de MariaDB debería verse así:

tareas:- nombre:implementar el servidor MariaDB   docker_container:    imagen:mariadb     nombre:mariadb     comando:--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      > MYqlus_er:myqlus_er 

Después de ejecutar esta configuración nuevamente, el problema debería resolverse.

Resumen

Para resumir el artículo, logramos implementar con éxito Nextcloud en Docker usando Ansible y con eso hemos automatizado el proceso de implementación de Nextcloud en Docker. Aunque se requería que el entorno de Ansible se configurara con el módulo Python y Python Docker para que este proceso fuera exitoso. Luego, escribimos y ejecutamos el libro de jugadas de Ansible que implementa Nextcloud con la base de datos y también tiene persistencia de datos para que los datos y los archivos no se almacenen en el contenedor de Docker.

Gracias por su tiempo…


Docker
  1. Configurar Nextcloud con Redis usando Docker

  2. Implemente WordPress en Docker usando Ansible

  3. Cómo instalar Docker usando Ansible [Debian/Ubuntu]

  4. Cómo instalar WordPress usando Docker

  5. Cómo implementar PostgreSQL como un contenedor Docker

Cómo instalar Ansible en Ubuntu 20.04

Cómo implementar Pi-Hole en Debian 11

Instalar Navidrome usando Docker

Cómo instalar Gitea en Ubuntu usando Docker

Implementar una instalación de MariaDB de Docker de producción

Uso de Docker Desktop para administrar un contenedor