Nota:

Despliegue Nextcloud en Ampere A1 en Oracle Cloud Infrastructure

En este tutorial, instalará Nextcloud, la popular plataforma de colaboración de código abierto en Oracle Cloud Infrastructure (OCI). Utilizará una única instancia informática de Ampere A1 para el servidor de Nextcloud. También ejecutará Nextcloud como un conjunto de contenedores, mediante Podman. Podman es un motor de contenedor para gestionar y ejecutar contenedores mediante los estándares de Open Container Initiative. Ofrece compatibilidad total con la API con Docker y actúa como una lista desplegable para sustituir el comando docker. Sin embargo, ofrece algunas ventajas en comparación con Docker, que incluye una arquitectura sin daemon, compatibilidad con contenedores sin raíz y soporte cgroupsv2.

Nextcloud ofrece imágenes de contenedores docker que soportan la arquitectura del brazo. Nextcloud también requiere una base de datos para la que podemos utilizar MySQL o MariaDB. Para despliegues más escalables, puede utilizar el servicio de base de datos MySQL en OCI, lo que facilita la ampliación, la realización de copias de seguridad y la gestión de su base de datos MySQL.

Los datos creados dentro de un contenedor no se mantienen, y Nextcloud requiere un almacenamiento persistente para almacenar los archivos que cargamos, así como para el estado interno. Para mantener los datos, podemos utilizar volúmenes mediante el servicio OCI Block Storage. Un volumen es un dispositivo de almacenamiento creado y gestionado por Podman. Los volúmenes se crean directamente mediante el comando podman volume o durante la creación del contenedor.

Para activar la interfaz de usuario y los servicios basados en web de Nextcloud, debemos realizar los cambios necesarios en la lista de seguridad de red de OCI para permitir el tráfico.

Con estos componentes, tenemos una topología básica para nuestro despliegue.

Arquitectura

Descripción de la ilustración arch.png

Introducción

Objetivos

En este tutorial:

Requisitos

  1. Cuenta gratuita de Oracle (Trial), pagada o LiveLabs Cloud
  2. Familiaridad con la consola de OCI
  3. Visión general de Networking
  4. Conocimientos de los compartimentos
  5. Conocimiento básico conceptual de contenedores y Podman

Configurar el entorno

Empezará por iniciar el entorno en la nube de Oracle que se utilizará para crear y desplegar la aplicación Java EE. Este entorno se incluirá en un compartimento en la nube y la comunicación dentro del compartimento se realizará a través de una red virtual en la nube (VCN). El compartimento y la VCN aislarán y protegerán el entorno general. Desplegará la instancia informática de Ampere A1 para alojar el servidor de Nextcloud. Una vez creada la instancia informática, configurará las políticas de acceso para exponer la aplicación e instalar Nextcloud en la instancia.

Configuración básica de la infraestructura de OCI

  1. Abra el menú de navegación. En Gobernanza y administración, vaya a Identidad y haga clic en Compartimentos. En esta pantalla, verá una lista de compartimentos, haga clic en Crear compartimento.

  2. Introduzca lo siguiente:

    • Nombre: introduzca "AppDev".
    • Descripción: introduzca una descripción (necesaria), como "AppDev compartimento para el tutorial de introducción". Evite introducir información confidencial.
    • Compartimento principal: seleccione el compartimento en el que desea que resida este compartimento. Se define por defecto en el compartimento raíz (o arrendamiento).
    • Haga clic en Crear compartimento.
    • El compartimento se muestra en la lista.

Creación de una instancia informática A1 de Ampere

  1. Para crear una instancia informática de Ampere A1, utilice el menú de navegación situado en la esquina superior izquierda de la consola y vaya a Recursos informáticos > Instancias.

  2. Abra el flujo de creación de instancias.

    1. Verifique que está en el compartimento AppDev
    2. Haga clic en Crear instancia.
  3. En la página de creación de instancia, creará la nueva instancia junto con los nuevos recursos de red, como la red virtual en la nube (VCN), el gateway de Internet (IG) y mucho más.

    1. Asignar un nombre a la instancia a Nextcloud
    2. Actualice la selección de imagen para utilizar Oracle Linux 8 o posterior
    3. Haga clic en el botón Cambiar unidad para ver las unidades de computación disponibles.

    Crear Instancia

    Descripción de la ilustración 03_create_instance02.png

  4. Configure la imagen para la instancia.

    1. Haga clic en el botón Cambiar imagen para ver las imágenes de sistema operativo disponibles.
    2. Elija Oracle Linux 8 o posterior.

    Elija Oracle Linux 8

    Descripción de la ilustración 03_create_instance02_1.png

  5. Configure los recursos para la instancia.

    1. Elija el procesador basado en Ampere Arm en la elección para series de formas.
    2. Seleccione la unidad VM.Standard.A1.Flex de la lista de unidades con procesadores basados en Ampere Arm. Las unidades Ampere A1 son flexibles y puede modificar el número de núcleos y la cantidad de memoria. Seleccione 1 núcleo y 6 GB de memoria para la VM.

    Elegir unidad

    Descripción de la ilustración 04_create_instance03.png

  6. Seleccione las opciones de red. Cree una nueva VCN y subred para su próximo despliegue en la nube. Asegúrese de asignar una dirección IP pública para su instancia.

  7. Genere y descargue el par de claves SSH. Este paso es opcional, pero se recomienda realizar tareas de mantenimiento y actualizaciones posteriores. También puede traer su clave pública si ya tiene un par de claves que desea utilizar. Si desea saber cómo generar claves SSH, siga las instrucciones del tutorial Generar claves SSH.

    Opciones de Red

    Descripción de la ilustración 06_create_instance05.png

  8. Haga clic en Crear para crear los recursos de red e iniciar la instancia informática. iniciar instancia

    Descripción de la ilustración 07_create_instance06.png

Exponer puertos de aplicación a usuarios

Para que se pueda acceder a las aplicaciones desde Internet, debe abrir los puertos que utilizará nuestra aplicación. En esta sección, configurará listas de seguridad en la red en la nube y reglas de firewall en la instancia informática para que las aplicaciones puedan enviar y recibir tráfico.

Configuración de la red virtual en la nube (VCN)

Una lista de seguridad actúa como un firewall virtual para una instancia, con reglas de entrada y salida que especifican los tipos de tráfico permitidos que entran en la instancia y salen de esta. Listas de seguridad configuradas en el nivel de subred, que aplican las reglas de seguridad a todos los elementos de red de esa subred. La red incluye una lista de seguridad predeterminada, que contiene un conjunto inicial de reglas. La lista de seguridad por defecto permite conectarse a su instancia mediante SSH y, para que su instancia realice llamadas de red salientes a cualquier destino.

  1. Navegue a la página de detalles de la instancia que ha creado. Recursos informáticos > Instancias > Haga clic en la instancia que ha creado
  2. Navegue a la subred a la que está asociada la instancia haciendo clic en la subred. seleccionar subred

    Descripción de la ilustración 01_setup_network_01.png

  3. En la subred, seleccione la lista de seguridad por defecto
  4. Haga clic en "Agregar regla de entrada" para agregar una nueva regla que permita el tráfico entrante que coincida con las reglas.
  5. Agregar una regla de entrada para permitir el tráfico entrante en el puerto 8080
    1. Defina el CIDR de origen en 0.0.0.0/0. Esto permite el tráfico entrante de todos los orígenes.
    2. Establezca Destination Port Range (Rango de puertos de destino) en 8080. De esta forma, el destino solo se define en el puerto 8080. La regla ahora permite que el tráfico de todos los orígenes utilice el puerto 8080. Esto es lo que necesitamos, para que se pueda acceder a nuestra aplicación desde cualquier lugar.
    3. Proporcione una descripción. configurar regla de entrada

      Descripción de la ilustración 01_setup_network_04.png

Configure la instancia

Las reglas del firewall controlan el tráfico de nivel de paquetes de entrada y salida de una instancia. Las reglas de firewall se configuran directamente en la propia instancia y proporcionan un nivel adicional de seguridad.

  1. Navegue a la página de detalles de la instancia que ha creado. Recursos informáticos > Instancias > Haga clic en la instancia que ha creado
  2. Copie la dirección IP pública de la instancia.
  3. Inicie sesión en la instancia con SSH. Utilice la clave que ha generado o proporcionado durante el paso de creación de la instancia. El nombre de usuario por defecto para las instancias que utilizan el sistema operativo Oracle Linux es opc.
  4. Ejecute los comandos de configuración del firewall. Esto modifica el firewall en la propia instancia para exponer el puerto 8080 y aceptar el tráfico entrante.

    sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

Despliegue Nextcloud en Ampere A1

Ahora puede ejecutar Nextcloud en la plataforma informática Ampere A1 como despliegue de contenedores. También utilizará las nuevas herramientas de contenedor, como Podman, incluidas en Oracle Linux 8. Podman proporciona una utilidad ligera para ejecutar y gestionar contenedores compatibles con Open Container Initiative (OCI). Un despliegue de Podman puede reutilizar imágenes de contenedor existentes. Podman no necesita un daemon en ejecución y permite que los contenedores se inicien y ejecuten sin permisos root. Para obtener más información sobre Podman en Oracle Linux, visite la documentación oficial

Instalación de las herramientas de contenedor

Una vez creada la instancia con Oracle Linux 8.x, podemos instalar el paquete container-tools para preparar nuestra instancia con las herramientas necesarias para desplegar cargas de trabajo en contenedores.

  1. Inicie sesión en la instancia con SSH. Utilice la clave que ha generado o proporcionado durante el paso de creación de la instancia. El nombre de usuario por defecto para las instancias que se ejecutan en el sistema operativo Oracle Linux es opc.

  2. Instale el módulo container-tools que extrae todas las herramientas necesarias para trabajar con contenedores.

    sudo dnf module install container-tools:ol8
    
    sudo dnf install git
    

Creación de una definición de pod

Podman puede gestionar grupos de contenedores denominados Pods. Formalmente, los pods son un grupo de uno o más contenedores que comparten los mismos espacios de nombres de red, pid e ipc. Este concepto fue introducido inicialmente por el proyecto de Kubernetes y los podman son muy similares a los pods de Kubernetes.

En muchos aspectos, un pod se comporta como un host virtual en el que se ejecutan los servicios de cada contenedor. Esto significa que cada contenedor puede acceder a los servicios del otro contenedor como si se estuvieran ejecutando en el mismo host. La ejecución de contenedores de esta forma puede eliminar mucha complejidad en torno a la red y puede facilitar la limitación de la exposición pública de los puertos que solo están destinados a ser utilizados por los servicios de la propia aplicación.

Los pods son una gran forma de gestionar contenedores relacionados, como cuando una aplicación está formada por varios contenedores. En este tutorial, desplegará Nextcloud como Pod. Los contenedores necesarios para NextCloud están incluidos en nuestro pod, y se inician y paran juntos. El primer paso para gestionar nuestra aplicación como pod es crear una definición de pod vacía.

Crear un pod con el siguiente comando

podman pod create --hostname nextcloud --name nextcloud --publish 8080:80 --infra-image k8s.gcr.io/pause:3.1
  1. podman pod create: crea un pod.
  2. --hostname nextcloud: define el nombre de host para el pod como nextcloud
  3. --name nextcloud: define el nombre del pod como nextcloud
  4. --publish 8080:80: publica el puerto 80 en el pod en el puerto 8080 en el host.

Definir volúmenes de almacenamiento

Ahora que el pod está definido, debemos definir algunas opciones de almacenamiento, así como antes de rellenar el pod con nuestros contenedores. Los contenedores utilizan capas de contenedores editables por defecto para todos los archivos creados dentro de un contenedor. Esto significa que los archivos y datos creados por los procesos de un contenedor no se mantienen y se pierden cuando se elimina o termina el contenedor. También dificulta el uso compartido de los datos entre contenedores. Los volúmenes son la forma preferida de mantener los datos creados por los contenedores. Se pueden considerar abstracciones de almacenamiento para ubicaciones de almacenamiento en la máquina host, pero gestionadas independientemente del ciclo de vida del contenedor. También facilitan el uso compartido de datos entre contenedores al montarlos simultáneamente en varios contenedores.

Basándose en las recomendaciones de Nextcloud, utilizamos 3 volúmenes para gestionar los datos.

  1. El volumen denominado nextcloud-appdata almacenará el estado de la aplicación principal para la siguiente nube

  2. El volumen denominado nextcloud-files almacenará los archivos cargados y creados por los usos.

  3. El volumen denominado nextcloud-db almacenará los archivos de base de datos para la base de datos MySQL.

    podman volume create nextcloud-appdata 
    podman volume create nextcloud-files
    podman volume create nextcloud-db
    

Ejecutar MySQL Database

Ahora puede iniciar la base de datos para Nextcloud con el volumen asociado. El contenedor de base de datos se inicia en el pod que ya se ha creado. La base de datos utilizada por Nextcloud es MySQL, y aquí la estamos ejecutando como un contenedor en el pod. Para un despliegue más sólido y totalmente gestionado, puede sustituir este contenedor por el servicio de base de datos MySQL de OCI.

A continuación se muestra el comando para iniciar la base de datos y se explican cada una de las opciones.

Nota: asegúrese de proporcionar contraseñas seguras para las variables MYSQL_PASSWORD y MYSQL_ROOT_PASSWORD a continuación.

podman run --detach --pod=nextcloud \
--env MYSQL_DATABASE=nextcloud \
--env MYSQL_USER=nextcloud \
--env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
--env MYSQL_ROOT_PASSWORD=MYSQL_ROOT_PASSWORD \
--volume nextcloud-db:/var/lib/mysql:Z \
--restart on-failure \
--name nextcloud-db \
mysql/mysql-server:8.0 
  1. podman run: el comando run indica a podman que ejecute un comando en un contenedor con los parámetros proporcionados. El comando que se va a ejecutar se define normalmente en la propia imagen.
  2. --detach - Modo Desasociado: ejecute el contenedor en segundo plano e imprima el nuevo ID de contenedor.
  3. --pod=nextcloud: ejecuta el contenedor en un pod existente. Aquí elegimos ejecutar el contenedor en el pod que creamos anteriormente para Nextcloud
  4. --env: define variables de entorno arbitrarias. Los procesos que se ejecutan dentro del contenedor pueden acceder a estas variables de entorno.
  5. --volume nextcloud-db:/var/lib/mysql:Z: monta el volumen denominado nextcloud-db en la ubicación /var/lib/mysql, la ubicación por defecto para los archivos de datos de MySQL. La opción Z indica a Podman que etiquete el contenido con una etiqueta privada no compartida.
  6. --restart on-failure: reinicie la política que se debe seguir al salir de los contenedores. En este caso, el contenedor se reiniciará cuando falle. Un fallo es cuando el proceso del contenedor existe con un estado distinto de cero.
  7. --name nextcloud-db: asigna el nombre nextcloud-db al contenedor.
  8. mysql/mysql-server:8.0: la imagen que se va a ejecutar se utiliza para crear el contenedor

Como está ejecutando el contenedor en modo desconectado, Podman lo iniciará en segundo plano y saldrá. Para ver el estado del inicio y los logs, puede ejecutar el siguiente comando. Pulse Ctrl+C para detener la continuación de los logs.

podman logs -f nextcloud-db

Desplegar Nextcloud

Ahora puede desplegar Nextcloud como otro contenedor del mismo pod. Los parámetros son similares al comando anterior y aquí transfiere los detalles de conectividad de la base de datos sobre la base de datos que debe utilizar Nextcloud.

Nota: Asegúrese de que los valores de las variables MYSQL_DATABASE, MYSQL_USER y MYSQL_PASSWORD son los mismos que proporcionó al iniciar la base de datos. Asegúrese de actualizar los valores de NEXTCLOUD_ADMIN_USER y NEXTCLOUD_ADMIN_PASSWORD a su elección.

podman run --detach --pod=nextcloud \
  --env MYSQL_HOST=127.0.0.1 \
  --env MYSQL_DATABASE=nextcloud \
  --env MYSQL_USER=nextcloud \
  --env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
  --env NEXTCLOUD_ADMIN_USER=NC_ADMIN \
  --env NEXTCLOUD_ADMIN_PASSWORD=NC_PASSWORD \
  --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> \
  --volume nextcloud-appdata:/var/www/html:Z \
  --volume nextcloud-files:/var/www/html/data:Z \
  --restart on-failure \
  --name nextcloud-app \
  docker.io/library/nextcloud:21
  1. --env MYSQL_HOST=127.0.0.1: dado que tanto la base de datos como la aplicación están en el mismo pod, la aplicación puede acceder al contenedor de base de datos mediante 127.0.0.1, como si se estuvieran ejecutando ambos en el mismo host.
  2. --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> : los dominios de confianza son una función de seguridad que utiliza Nextcloud y debe proporcionar la lista de todos los dominios a los que se puede acceder a Nextcloud. En este caso, será la dirección IP pública de la instancia, ya que es ahí donde esperaremos que se ejecute Nextcloud.

Para ver los logs de inicio, puede utilizar:

podman logs -f nextcloud-app

Una vez que se haya completado el inicio, puede navegar a http://<your_public_ip>:8080 para acceder al servidor de Nextcloud. Utilice los valores que ha proporcionado para NEXTCLOUD_ADMIN_USER y NEXTCLOUD_ADMIN_PASSWORD para conectarse.

Más recursos de aprendizaje

Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.

Para obtener documentación sobre los productos, visite Oracle Help Center.