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

Cómo instalar Nextcloud con Docker en su servidor Linux

Nextcloud es la solución perfecta para una alternativa autohospedada de Google Drive o Dropbox.

No te voy a decir por qué deberías usar Nextcloud. En su lugar, le mostraré cómo instalar el servidor Nextcloud con contenedores Docker.

El tutorial utiliza la configuración del proxy inverso Ngnix para que pueda implementar su instancia de Nextcloud con SSL. De esta manera, su URL de implementación de Nextcloud usará HTTPS y transferirá archivos de forma segura.

Hacia el final del tutorial, compartiré algunos consejos para los usuarios de la nube de Linode para reducir el esfuerzo en la implementación de Nextcloud.

Linodo | La nube abierta independiente para desarrolladores Nuestra misión es acelerar la innovación haciendo que la computación en la nube sea simple, asequible y accesible para todos. Linode

Requisitos

Antes de seguir adelante, algunas cosas deben ser atendidas. Esto es lo que necesita:

  • Un servidor Linux ya sea físico, una máquina virtual o en un servidor en la nube.
  • Docker y Docker Compose instalados en su servidor Linux. Si necesita ayuda, siga la guía de instalación de Docker en Ubuntu y CentOS. Del mismo modo, puede seguir los tutoriales de instalación de docker-compose en Ubuntu y CentOS.
  • Es bueno tener algún conocimiento de Docker y Docker Compose.
  • Un nombre de dominio. Esta implementación, como todas las demás del Manual de Linux, se realiza bajo un nombre de dominio real con HTTPS.
  • Algo de experiencia con comandos de shell y Linux, ya que hay mucho movimiento allí.
  • Acceso a un servicio SMTP como Sendgrid. Lo necesitará para enviar notificaciones por correo electrónico, restablecer la contraseña, etc.
  • Tiempo y paciencia.

Implementación del servidor Nextcloud con Docker en proxy inverso

Veamos los pasos uno por uno.

Paso 1:configurar el proxy inverso

Con el proxy inverso, puede implementar varios servicios web en el mismo servidor. Esto no es opcional porque necesita el contenedor let's Encrypt para SSL.

Hay dos formas de configurar el proxy inverso de Ngnix.

Si no está utilizando Linode, consulte mi artículo sobre cómo configurar nginx-reverse-proxy con Docker.

Cómo usar Nginx Reverse Proxy con múltiples aplicaciones Docker Aprenda cómo puede implementar múltiples servicios web en el mismo servidor usando Nginx Reverse Proxy y Docker Containers. Manual de LinuxDebdut Chakraborty

Si está usando Linode, le recomiendo que use nuestro StackScript de proxy inverso-jwilder para implementar fácilmente su servidor con todo ya configurado.

La implementación del proxy inverso se debe realizar mediante un archivo Compose separado para que pueda reiniciar o actualizar los servicios web sin alterar la configuración del proxy inverso.

Ya preparé los archivos de redacción en nuestro repositorio público de GitHub. Dado que este no es un artículo detallado sobre la implementación del proxy inverso, no entraré en los detalles del archivo Compose.

Puedes usar git o wget para descargar los archivos. Si usa git , clona todo el repositorio:

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

De lo contrario, simplemente descargue los archivos necesarios:

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

Hay tres archivos aquí:

  • env.example:cámbiele el nombre a .env y cambie el valor de DEFAULT_EMAIL a tu correo electrónico
  • max_upload_size.conf:este archivo garantiza que pueda cargar archivos de hasta 1 GB (el valor predeterminado es 2 MB).
  • docker-compose.yaml:el más grande de todos. Discutido en breve en el siguiente párrafo.

Cree una red docker llamada net . Esto se usa en el archivo docker-compose.yaml.

docker network create net

El archivo docker-compose se ve así:

Finalmente, despliegue los contenedores

docker-compose up -d

En una implementación exitosa, debe obtener un 503 cuando intente visitar la dirección IP del servidor que aloja este proxy inverso. Esta bien. Todavía no tienes un servicio web ejecutándose.

Paso 2:implementar Nextcloud

Hay dos componentes aquí:uno es la base de datos, otro es Nextcloud en sí mismo, o más bien llamémoslo la interfaz.

Para la base de datos backend, cualquier base de datos basada en MySQL funcionará. Voy con MariaDB, especialmente la etiqueta de imagen (o versión) 10.5.9.

Para Nextcloud, usaré la versión 21.0.0, esta es la última en el momento de escribir este artículo.

Por lo tanto, las imágenes utilizadas son

  • mariadb:10.5.9
  • nextcloud:21.0.0
Si está utilizando este tutorial en el futuro (desde la referencia actual) y hay una versión mucho más nueva de Nextcloud y MariaDB, use esas versiones.

Los archivos de esqueleto, es decir, el archivo de redacción y los archivos env ya están cargados en nuestro repositorio público de GitHub. Puede descargarlos o reescribirlos mientras lee las explicaciones.

Te recomiendo que descargues los archivos y luego revises todo para entender qué está pasando, no es necesario que vuelvas a escribir todo desde cero.

Puede clonar todo nuestro repositorio de GitHub o simplemente descargar los archivos necesarios.

Si clonó el repositorio "tutorial-snippets" mientras implementaba el proxy inverso, simplemente cambie su directorio actual a tutorial-snippets/Nextcloud .

El git de trabajo El comando es el siguiente:

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

De lo contrario, use el siguiente código de shell para crear un directorio llamado "Nextcloud" y descargue los archivos allí.

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

Copie el env.example archivo a .env . Editará este archivo más tarde para las variables de entorno. Mantener el archivo original es solo por el bien de la copia de seguridad, nada más.

cp env.example .env

Ahora, permítanme repasar las definiciones de servicios:

1. Base de datos NC

La NCDatabase el servicio se ve así:

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"]

Este es el servicio de base de datos y, como se indicó anteriormente, utiliza el mariadb:10.5.9 imagen como modelo.

Para almacenamiento persistente, estoy usando un volumen llamado NCMariaDB , está montado en /var/lib/mysql , donde MariaDB almacena sus datos.

Las variables de entorno se manejan usando un .env archivo, hablaré de eso en un momento.

Me gusta el on-failure reinicie la política, pero puede elegir unless-stopped o always . Es posible que desee leer más sobre la política de reinicio en Docker.

El common la red es común entre este y el servicio frontend, está ahí para garantizar que la comunicación sea posible entre estos contenedores.

Variables de entorno

Esta es una implementación basada en Docker, está obligado a configurar algunas variables de entorno. Ahora abre este .env archivo en su editor de texto favorito y comience a cambiar los valores de la siguiente manera:

MYSQL_ROOT_PASSWORD o MYSQL_RANDOM_ROOT_PASSWORD :Establecer MYSQL_RANDOM_ROOT_PASSWORD a 1 o establezca una contraseña raíz segura para MariaDB. Usa openssl para generar una contraseña aleatoria.

MYSQL_DATABASE &MYSQL_USER :Hay algunos valores predeterminados establecidos, pero puede cambiarlos si es necesario. Establézcalos en su nombre de base de datos y nombre de usuario preferidos, respectivamente.

MYSQL_PASSWORD :Contraseña para el usuario (MYSQL_USER ) que tendrá acceso a la base de datos principal de MariaDB (MYSQL_DATABASE ).

MYSQL_HOST :Este es el nombre de servicio del contenedor de la base de datos. Si no va a cambiar el nombre del servicio en Compose File, déjelo como está.

2. Interfaz NCF

Este es el servicio frontend de Nextcloud. Este servicio es tan sencillo como el anterior. Echa un vistazo:

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"]

La imagen utilizada es nextcloud:21.0.0 , como dije anteriormente, es la última versión en el momento de escribir este artículo.

Para asegurarse de mantener sus datos seguros y no perderlos en el caso desafortunado de un simple reinicio del contenedor, los datos deben conservarse. Nextcloud guarda sus datos/información en /var/www/html , por lo que esta ubicación se vuelve persistente usando un volumen llamado NCData .

El depends_on array es interesante. Se asegura de que los valores, es decir, los servicios mencionados en él, se implementen primero antes de que comience el actual.

Aquí, me aseguro de que la base de datos se inicie antes que Nextcloud, para evitar problemas de conexión.

Es posible que aún vea algunos problemas en los registros, porque un inicio correcto del contenedor no indica que los procesos previstos dentro del contenedor también se hayan iniciado correctamente. Pueden tomar más tiempo. En nuestro caso, mysqld tarda un poco más en iniciarse, por lo que es posible que vea un par de errores en los registros hasta que finalmente se realice una conexión exitosa.

Hay dos redes. El primero es net , que también formaba parte de la implementación de proxy inverso. Esto es necesario porque el proxy inverso debe poder comunicarse con los servicios proxy, es decir, Nextcloud. El common la red es para que los contenedores de base de datos y nextcloud puedan comunicarse con éxito.

Docker Compose crea una red predeterminada para todos sus servicios en un archivo de Compose. Pero dado que el servicio NCFrontend ya está conectado a la red de red, Docker Compose ya no creará esa red predeterminada, por lo que debe crear una red personalizada como "común" para que se produzca la comunicación.

Variables de entorno

Abra el .env (el mismo que usó para MariaDB) en su editor de texto favorito y comience a cambiar los valores de la siguiente manera:

LETSENCRYPT_HOST , VIRTUAL_HOST &NEXTCLOUD_TRUSTED_DOMAINS :Establézcalos en el dominio/subdominio en el que desea alojar su instancia de Nextcloud.

TRUSTED_PROXIES :La subred de la red, compartida por el proxy inverso y esta interfaz. Puede obtener la subred con el siguiente comando (asegúrese de que jq está instalado)

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

OVERWRITEPROTOCOL :El parámetro overwriteprotocol se utiliza para configurar el protocolo del proxy. Como usamos HTTPS, configúrelo en HTTPS.

La configuración de SMTP es opcional. Para este artículo, usaré SendGrid como ejemplo. Consulte la documentación de su servidor SMTP para obtener valores más apropiados para las siguientes variables de entorno.

SMTP_HOST &SMTP_PORT :La dirección del servidor SMTP y el puerto en el que escuchará, para SendGrid es smtp.sendgrid.net y el puerto 587 para TLS automático.

SMTP_NAME &SMTP_PASSWORD :El nombre de usuario y la contraseña para la autenticación. Para SendGrid, el valor del nombre de usuario es muy consistente. Es apikey . Para la contraseña, será su clave API.

MAIL_FROM_ADDRESS :El valor de From Encabezado SMTP. Establézcalo en algo como [email protected] .

NEXTCLOUD_ADMIN_USER &NEXTCLOUD_ADMIN_PASSWORD :en lugar de usar la interfaz de usuario web la primera vez para crear el usuario administrador, puede crearlo directamente en la etapa de implementación a través de estas variables. Configúrelos con el nombre de usuario y la contraseña de su usuario administrador. Si lo dejó, se le pedirá que cree una cuenta la primera vez que inicie Nextcloud.

Volúmenes

Tengo dos volúmenes internos definidos en esta red, NCMariaDB para MariaDB y NCData para Nextcloud. Depende de usted mantenerlos internos o externos.

Muchos dirán que es arriesgado mantener estos internos ya que fácilmente puede cometer el error de usar docker-compose down -v y retire los volúmenes junto con los contenedores. Al mismo tiempo, con volúmenes externos, puede cometer el error de docker volume prune y borra todos tus datos.

Decide cuál va a ser más seguro para ti. Si decide hacerlos externos, abra el archivo Compose y cambie los volumes definición a algo como esto:-

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

Luego, cree los volúmenes:

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

Redes

No hay mucho aquí. Notará que hay dos redes definidas. Uno es para el frontend y el proxy inverso, y el otro es para que el frontend y el backend puedan comunicarse.

El contenedor de la base de datos y la interfaz de nextcloud tienen una red común llamada "común", que está ahí para que estos dos contenedores puedan comunicarse entre sí. Puede hacer que esto sea interno, lo que limitará el acceso del contenedor de la base de datos a la Internet pública, pero no estoy seguro de las ventajas que podría obtener de esto.

Aún así, si quieres hacer esto, debería verse así:

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

Finalmente, implementando Nextcloud

No queda nada más por hacer. Simplemente ejecute el siguiente comando

docker-compose up -d

Las imágenes necesarias se extraerán y luego se desplegarán.

Una vez implementado, debería haber un total de cuatro contenedores ejecutándose en su servidor.

[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

Usted puede tenga más contenedores ejecutándose también si había contenedores ejecutándose anteriormente. La conclusión es que esta implementación de Nextcloud consta de cuatro contenedores, el contenedor nginx, el contenedor complementario de letsencrypt, el contenedor mariadb y, finalmente, el contenedor real de nextcloud.

Después de la implementación

Antes de terminar con esto, quería mencionar una cosa rápida que tal vez quiera saber después de la implementación.

Primero abra su navegador y diríjase al dominio en el que está alojada esta instancia de Nextcloud (VIRTUAL_HOST ). Debería ver una pantalla similar a esta, si no configuró el usuario administrador usando el archivo de redacción

Dado que las variables de entorno de la base de datos se comparten a través del común .env archivo, no verá la interfaz de usuario de instalación web más común que solicita la información de la base de datos, como el nombre de host, el puerto, la contraseña del nombre de usuario de la base de datos.

También se puede ver una casilla de verificación similar allí. Te recomiendo que desmarques esta casilla e instales las aplicaciones que necesites más adelante de la lista de aplicaciones.

Para obtener más consejos posteriores a la implementación, lea este increíble artículo escrito por mi colega Avimanyu:

10 consejos útiles para administrar una instancia de Docker de Nextcloud ¡Algunos consejos útiles para tener en cuenta y seguir en la práctica mientras aloja su instancia de Nextcloud con Docker! Manual de LinuxAvimanyu Bandyopadhyay

Eso es todo. Espero que este tutorial detallado lo ayude con la instalación de su servidor Nextcloud con Docker. Si tiene preguntas o sugerencias, hágamelo saber en la sección de comentarios y estaré encantado de ayudarle.


Docker
  1. Cómo instalar un entorno de escritorio en su servidor Linux sin cabeza

  2. Cómo instalar y alojar un servidor OpenVPN con Docker

  3. Instale el servidor Wireguard VPN con Docker

  4. Cómo instalar Jenkins con Docker

  5. Cómo instalar NextCloud 13 en Ubuntu 16.04

Cómo instalar Docker CE en Rocky Linux 8

Cómo instalar Docker CE en Rocky Linux 8

Cómo instalar el servidor NextCloud en Rocky Linux 8

Cómo instalar KernelCare en su servidor Linux

¿Cómo instalar Softaculous en un servidor Linux con cPanel?

Cómo instalar y usar Docker en su sistema Linux