¡Hola, Habr! Les presento la traducción del artículo .
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í. (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 NextCloud
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ón
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 archivos
Complemento 1
El contenido completo de docker-compose.yml se puede encontrar aquí:
Fuente: habr.com
