Configuración de NextCloud + ONLYOFFICE en un solo servidor usando Docker

¡Hola, Habr! Les presento la traducción del artículo «Configurando NextCloud y ONLYOFFICE en un solo servidor con Docker».

Es difícil subestimar el valor de los paquetes de aplicaciones de oficina en línea como Google Docs y los almacenes en la nube en la vida de las personas con orientación técnica. Las tecnologías se han difundido tanto que incluso Microsoft, que ha dominado el mercado de aplicaciones de oficina durante mucho tiempo, se ha centrado recientemente en el desarrollo de la aplicación web Office 365 y en convencer a los usuarios de que cambien a un modelo de suscripción para utilizar sus propios servicios. Aquellos que estén interesados en el proceso de instalación y configuración de su propio almacén están invitados a continuar leyendo.

Hace un tiempo, exploramos soluciones para el almacenamiento en la nube y paquetes de aplicaciones web de oficina de código abierto que podrían implementarse fácilmente para su uso en microempresas. La principal motivación para almacenar toda la documentación en línea es minimizar la cantidad de documentos en papel y adoptar prácticas comerciales positivas, a pesar del bajo volumen de operaciones. La otra cara de la moneda es que alquilar un servidor en la nube para proporcionar este servicio es menos seguro que almacenar directamente en las instalaciones, ya que no tiene medios para auditar el acceso físico a su servidor o el tráfico. Por lo tanto, también se requiere cifrado de extremo a extremo y software de código abierto.

Teniendo en cuenta toda la información disponible sobre soluciones de código abierto, encontramos dos proyectos activos (con commits en repositorios Git en los últimos 12 meses), diseñados para almacenamiento en la nube: NextCloud y OwnCloud, y el único paquete de aplicaciones de oficina activo, ONLYOFFICE. Ambas herramientas para almacenamiento en la nube tienen características similares, y la elección de NextCloud se basó en la existencia de pruebas de que se puede integrar con ONLYOFFICE para una interacción cómoda del usuario con el software. Sin embargo, cuando comenzamos a desplegar los servicios, la falta de información sobre la integración de los servicios mencionados se hizo evidente. Encontramos 3 videos tutoriales sobre cómo realizar la integración:

Ninguno de los tres videos respondió a la pregunta sobre la instalación del servicio de documentos ONLYOFFICE en el mismo servidor físico que NextCloud con un nginx compartido. En cambio, utilizaron tecnologías de separación como el uso de puertos separados para el servicio de API de documentos. Otra opción propuesta fue desplegar un servidor separado para el servicio de documentos con la configuración manual del nginx integrado en la instancia del servicio de documentos para la instalación de la clave de acceso (una clave de acceso conocida previamente que certifica el derecho de acceso a la nube de datos) y certificados TLS. Los enfoques mencionados anteriormente fueron considerados inseguros e ineficaces, por lo que realizamos la integración de NextCloud, ONLYOFFICE y el nginx compartido, que separa las solicitudes por nombres de dominio, utilizando docker-compose. Aquí se proporciona información paso a paso sobre cómo hacerlo.

Paso 1: contenedor nginx

Esta es una instalación muy simple, pero este paso requiere la mayor cantidad de trabajo para configurar el servidor proxy inverso. Primero, creamos la configuración de docker-compose para la imagen nginx:stable.

version: '2'
services:
  nginx:
    image : nginx:stable
    restart: always
    volumes:
      - ./nginx/nginx-vhost.conf:/etc/nginx/conf.d/default.conf:ro
      - ./nginx/certificates:/mycerts 
    ports:
      - 443:443
      - 80:80

Esto crea un contenedor con los puertos 80 y 443 abiertos para acceso público, mapea la configuración en nginx/nginx-vhost.conf y define el almacenamiento para los certificados generados como certificados autofirmados o utilizando Certbot de Let’s Encrypt en /nginx/certificates. En este punto, deben existir las carpetas para office.yourdomain.com y cloud.yourdomain.com con los archivos fullchain1.pem y privkey1.pem en cada una para la cadena de certificados y la clave privada del servidor, respectivamente. Puedes leer más sobre cómo generar un certificado autofirmado aquí. www.akadia.com/services/ssh_test_certificate.html (renombrar .key y .crt a .pem funciona sin convertir la estructura del archivo para nginx).

Después de esto, definimos el archivo vhost. Primero definimos el comportamiento del puerto 80 como una simple redirección a https, ya que no queremos permitir tráfico http.

server {
    listen 80;
    location / {
        return 301
            https://$host$request_uri;
    }
}

Luego creamos dos servidores virtuales en el puerto 443 para nuestros servicios:

servidor {
    escuchar 443 ssl;
    server_name cloud.tudominio.com;
    root /var/www/html;

    ssl_certificate     /miscerts/cloud.tudominio.com/fullchain1.pem;
    ssl_certificate_key /miscerts/cloud.tudominio.com/privkey1.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app:80;
    }
}
servidor {
    escuchar 443 ssl;
    server_name office.tudominio.com;
    root /var/www/html;

    ssl_certificate     /miscerts/office.tudominio.com/fullchain1.pem;
    ssl_certificate_key /miscerts/office.tudominio.com/privkey1.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://onlyoffice:80;
    }
}

Paso 2: servicio de documentos

Ahora necesitamos agregar el contenedor del servicio de documentos a nuestro docker-compose.yml. Aquí no hay mucho que configurar.

servicios:
...
  onlyoffice:
    image: onlyoffice/documentserver
    restart: always

Pero no olvides vincular el contenedor nginx con el servicio de documentos:

servicios:
...
  nginx:
    ...
    depends_on:
      - onlyoffice

Paso 3: NextCloud

Primero, agregamos nuevos servicios:

servicios:
...
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - /data/nextcloud_db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=#pon aquí alguna contraseña
      - MYSQL_PASSWORD=#pon aquí otra contraseña
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  app:
    image: nextcloud
    depends_on:
      - db
      - onlyoffice
    restart: always

y agregamos un enlace a nginx:

servicios:
...
  nginx:
    ...
    depends_on:
      - app 

Ahora es el momento de cargar los contenedores.

docker-compose up -d  

Después de un tiempo, nginx comenzará a redirigirte a la interfaz externa de NextCloud, que por defecto es la página de configuración. Necesitarás ingresar el nombre de usuario y la contraseña para tu primer usuario administrador, así como las credenciales de la base de datos que especificaste en docker-compose.yml. Una vez finalizada la configuración, podrás iniciar sesión. En nuestro caso, la espera tomó casi un minuto y requirió una actualización adicional de la página de inicio de sesión antes de que pudiéramos acceder al servicio en la nube.

Ventana de configuración del servicio NextCloudConfiguración de NextCloud + ONLYOFFICE en un solo servidor usando Docker

Paso 4: conexión entre NextCloud y ONLYOFFICE

En este paso, necesitarás instalar la aplicación para NextCloud que conecta la funcionalidad de ONLYOFFICE. Comencemos desde el panel de control de aplicaciones en la esquina superior derecha del menú. Busca la aplicación ONLYOFFICE (en la sección “Oficina y texto” (Office & text) o usando la búsqueda), instálala y actívala.

Después de esto, dirígete a Configuraciones (Settings) a través del menú en la esquina superior derecha, y deberías encontrar el elemento ONLYOFFICE en el menú de la izquierda. Entra en él. Necesitarás ingresar las direcciones como se indica a continuación.

Configuraciones de la aplicación de integraciónConfiguración de NextCloud + ONLYOFFICE en un solo servidor usando Docker

La primera dirección se utiliza para enlazar algunos archivos js y css directamente desde la aplicación ejecutada en el navegador (esto es lo que necesitamos para abrir el acceso al servicio ONLYOFFICE a través de nginx). La clave secreta no se utiliza, ya que confiamos más en la capa de aislamiento de Docker que en una clave de autenticación permanente. La tercera dirección es utilizada por el contenedor de NextCloud para conectarse directamente a la API de ONLYOFFICE y utiliza el nombre de host interno por defecto de Docker. Finalmente, el último campo se utiliza para que ONLYOFFICE pueda hacer solicitudes de vuelta a la API de NextCloud, utilizando una dirección IP externa o una dirección interna de Docker si estás usando redes de Docker, pero en nuestro caso no se utiliza. Asegúrate de que las configuraciones de tu firewall permiten este tipo de interacciones.

Después de guardar, NextCloud probará la conexión y, si todo es correcto, te mostrará las configuraciones relacionadas con la integración — por ejemplo, qué tipos de archivos se pueden editar con esta integración. Configúralo como consideres necesario.

Paso final: dónde buscar el editor

Si vuelves a las carpetas de tu almacenamiento en la nube y presionas “+” para crear un nuevo archivo, tendrás disponible una nueva opción para crear un documento, hoja de cálculo o presentación. Con ellas podrás crear y editar de inmediato estos tipos de archivos, utilizando ONLYOFFICE.

Menú de creación de archivosConfiguración de NextCloud + ONLYOFFICE en un solo servidor usando Docker

Complemento 1

El contenido completo de docker-compose.yml se puede encontrar aquí: https://pastebin.com/z1Ti1fTZ

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster