Configuración de NextCloud + ONLYOFFICE en el mismo servidor con Docker

¡Hola, Habr! Presento a su atención la traducción del artículo. "Configuración de NextCloud y ONLYOFFICE en un solo servidor con Docker".

Es difícil subestimar el valor de las suites de oficina en línea como Google Docs y el almacenamiento en la nube en la vida de las personas orientadas a la tecnología. La tecnología se ha generalizado tanto que incluso Microsoft, que durante mucho tiempo ha dominado el mercado de las aplicaciones de oficina, se ha centrado recientemente en desarrollar la aplicación web Office 365 y persuadir a los usuarios para que cambien a un modelo de suscripción para usar sus propios servicios. Invitamos a quienes estén interesados ​​en el proceso de instalación y configuración de su propio almacenamiento bajo cat.

Hace algún tiempo analizamos las soluciones de almacenamiento en la nube y las suites ofimáticas web de código abierto que podrían implementarse fácilmente para su uso en una microempresa. La principal motivación para mantener toda la documentación en línea es reducir al mínimo el papeleo e implementar buenas prácticas comerciales a pesar del bajo volumen de transacciones. La otra cara de la moneda es que alquilar un servidor en la nube para brindar este servicio es menos seguro que almacenarlo directamente en las instalaciones de la empresa, ya que no tiene ningún medio para auditar el acceso físico a su servidor o el tráfico. Por lo tanto, también se requiere encriptación 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 compromisos en el repositorio de git durante los últimos 12 meses) desarrollados para almacenamiento en la nube: NextCloud y OwnCloud, y la única suite de oficina activa ONLYOFFICE. Ambas herramientas de almacenamiento en la nube tienen aproximadamente la misma funcionalidad, y la decisión de elegir NextCloud se basó en la existencia de evidencia de que se puede integrar con ONLYOFFICE para una interacción cómoda del usuario con el software. Sin embargo, cuando comenzamos a implementar los servicios, se hizo evidente la falta de información sobre la integración de los servicios anteriores. Encontramos 3 videos tutoriales sobre cómo integrar:

Ninguno de los tres videos respondió a la pregunta de instalar el servicio de documentos ONLYOFFICE en el mismo servidor físico que NextCloud con un nginx compartido. En su lugar, utilizaron técnicas de separación, como el uso de puertos separados para la API del servicio de documentos. Otra sugerencia fue implementar un servidor separado para Document Service, configurando manualmente la instancia nginx integrada en Document Service para instalar una clave de acceso (una clave de acceso preconocida que confirma el derecho a acceder a la nube de datos) y certificados TLS. Los enfoques anteriores no se consideraron seguros ni lo suficientemente efectivos, por lo que integramos NextCloud, ONLYOFFICE y un nginx común que separa las solicitudes por nombres de dominio mediante docker-compose. Aquí hay información paso a paso sobre cómo hacerlo.

Paso 1: contenedor nginx

Esta es una configuración muy simple, pero este paso requiere más trabajo para configurar el servidor proxy inverso. Primero creamos la configuración 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 al público, asigna la configuración a nginx/nginx-vhost.conf y define un almacén para los certificados generados como certificados autofirmados o usando el certbot de Let's encrypt en /nginx/certificates. Esta ubicación debe contener carpetas para office.yourdomain.com y cloud.yourdomain.com, con archivos fullchain1.pem y privkey1.pem en cada uno para la cadena de certificados y la clave privada del servidor, respectivamente. Puede leer más sobre cómo generar un certificado autofirmado aquí. www.akadia.com/services/ssh_test_certificate.html (Cambiar el nombre de .key y .crt a .pem funciona sin convertir la estructura de archivos para nginx).

Después de eso, definimos el archivo vhost. Primero definimos el comportamiento del puerto 80 como una simple redirección a https, porque no queremos permitir ningún 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:

server {
    listen 443 ssl;
    server_name cloud.yourdomain.com ;
    root /var/www/html;

    ssl_certificate     /mycerts/cloud.yourdomain.com/fullchain1.pem;
    ssl_certificate_key /mycerts/cloud.yourdomain.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;
    }
}
server {
    listen 443 ssl;
    server_name office.yourdomain.com;
    root /var/www/html;

    ssl_certificate     /mycerts/office.yourdomain.com/fullchain1.pem;
    ssl_certificate_key /mycerts/office.yourdomain.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 de servicio de documentos a nuestro docker-compose.yml. No hay nada especial que configurar aquí.

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

Pero no olvide vincular el contenedor nginx al servicio de documentos:

services:
...
  nginx:
    ...
    depends_on:
      - onlyoffice

Paso 3: NextCloud

Primero, agregue nuevos servicios:

services:
...
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - /data/nextcloud_db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=#put some password here
      - MYSQL_PASSWORD=#put some other password here
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  app:
    image: nextcloud
    depends_on:
      - db
      - onlyoffice
    restart: always

y agregue un enlace a nginx:

services:
...
  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 de NextCloud, que es la página de configuración predeterminada. Deberá ingresar el nombre de usuario y la contraseña para su primer usuario administrativo y las credenciales de la base de datos que proporcionó en docker-compose.yml Una vez que se complete la configuración, podrá 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 iniciar sesión en el servicio en la nube.

Ventana de configuración del servicio NextCloudConfiguración de NextCloud + ONLYOFFICE en el mismo servidor con Docker

Paso 4: Conexión de NextCloud y ONLYOFFICE

En este paso, deberá instalar la aplicación para NextCloud, que conecta la funcionalidad de ONLYOFFICE. Comencemos con el panel de control de la aplicación en la esquina superior derecha del menú. Busque la aplicación ONLYOFFICE (en Office y texto o mediante la búsqueda), instálela y actívela.

Después de eso, diríjase a Configuración a través del menú en la esquina superior derecha y debería encontrar el elemento ONLYOFFICE en el menú de la izquierda. Entra en ello. Deberá registrar las direcciones como se indica a continuación.

Configuración de la aplicación de integraciónConfiguración de NextCloud + ONLYOFFICE en el mismo servidor con Docker

La primera dirección se usa para vincular algunos archivos js y css directamente desde la aplicación que se ejecuta 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 usa porque confiamos más en la capa de aislamiento de Docker que en la clave de autenticación persistente. El contenedor NextCloud utiliza la tercera dirección para conectarse directamente a la API de ONLYOFFICE y utiliza el nombre de host interno predeterminado de Docker. Bueno, el último campo se usa para que ONLYOFFICE pueda realizar solicitudes a la API de NextCloud usando una dirección IP externa o una dirección Docker interna si está usando redes Docker, pero esto no se usa en nuestro caso. Asegúrese de que la configuración de su firewall permita este tipo de interacciones.

Después de guardar, NextCloud probará la conexión y, si todo es correcto, le mostrará la configuración relacionada con la integración, por ejemplo, qué tipos de archivos se pueden editar con esta integración. Personaliza como mejor te parezca.

El paso final: dónde encontrar el editor

Si regresa a sus carpetas de almacenamiento en la nube y hace clic en "+" para crear un nuevo archivo, tendrá una nueva opción para crear un documento, una hoja de cálculo o una presentación. Con su ayuda, creará e inmediatamente podrá editar este tipo de archivos utilizando ONLYOFFICE.

Menú de creación de archivosConfiguración de NextCloud + ONLYOFFICE en el mismo servidor con Docker

Complemento 1

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

Fuente: habr.com

Añadir un comentario