Ejemplo 3: Implantación de onlyoffice
ONLYOFFICE es una suite de productividad en la nube que incluye herramientas para la edición de documentos, hojas de cálculo y presentaciones, así como para la gestión de proyectos y colaboración en equipo. Es una alternativa a suites ofimáticas como Microsoft Office, Google Workspace (anteriormente G Suite) y LibreOffice.
Editor de Documentos
Editor de Hojas de Cálculo
Editor de Presentaciones
Gestor de Proyectos
Sistema de Colaboración en Tiempo Real
Integración con Plataformas de Almacenamiento en la Nube como Google Drive, Dropbox y OneDrive para facilitar el acceso y la colaboración.
Para esta práctica, Onlyoffice recomienda desde su documentación oficial los siguientes requerimientos de hardware:
CPU dual core 2 GHz o más
RAM 4 GB o más
HDD con al menos 40 GB de espacio libre
SWAP de al menos 4 GB, dependiendo del SO.
OS amd64 distribución de Linux con kernel version 3.10 o superior.
Cualquier versión estable de Docker
En este caso, la práctica va a ser sencilla, he usado el código directamente del github del propio onlyoffice. En él nos ofrecen el siguiente (y extenso) yaml:
version: '3'
services:
onlyoffice-mysql-server:
container_name: onlyoffice-mysql-server
image: mysql:8.0.29
environment:
- MYSQL_ROOT_PASSWORD=my-secret-pw
networks:
- onlyoffice
stdin_open: true
tty: true
restart: always
volumes:
- ./config/mysql/conf.d:/etc/mysql/conf.d
- ./config/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- mysql_data:/var/lib/mysql
onlyoffice-community-server:
container_name: onlyoffice-community-server
image: onlyoffice/communityserver:12.0.1.1748
depends_on:
- onlyoffice-mysql-server
- onlyoffice-document-server
- onlyoffice-mail-server
- onlyoffice-elasticsearch
environment:
- ONLYOFFICE_CORE_MACHINEKEY=core_secret
- CONTROL_PANEL_PORT_80_TCP=80
- CONTROL_PANEL_PORT_80_TCP_ADDR=onlyoffice-control-panel
- DOCUMENT_SERVER_PORT_80_TCP_ADDR=onlyoffice-document-server
- DOCUMENT_SERVER_JWT_ENABLED=true
- DOCUMENT_SERVER_JWT_SECRET=jwt_secret
- DOCUMENT_SERVER_JWT_HEADER=AuthorizationJwt
- MYSQL_SERVER_ROOT_PASSWORD=my-secret-pw
- MYSQL_SERVER_DB_NAME=onlyoffice
- MYSQL_SERVER_HOST=onlyoffice-mysql-server
- MYSQL_SERVER_USER=onlyoffice_user
- MYSQL_SERVER_PASS=onlyoffice_pass
- MAIL_SERVER_API_PORT=8081
- MAIL_SERVER_API_HOST=onlyoffice-mail-server
- MAIL_SERVER_DB_HOST=onlyoffice-mysql-server
- MAIL_SERVER_DB_PORT=3306
- MAIL_SERVER_DB_NAME=onlyoffice_mailserver
- MAIL_SERVER_DB_USER=mail_admin
- MAIL_SERVER_DB_PASS=Isadmin123
- ELASTICSEARCH_SERVER_HOST=onlyoffice-elasticsearch
- ELASTICSEARCH_SERVER_HTTPPORT=9200
networks:
- onlyoffice
ports:
- '80:80'
- '443:443'
- '5222:5222'
stdin_open: true
tty: true
restart: always
privileged: true
# cgroup: host
volumes:
- community_data:/var/www/onlyoffice/Data
- community_log:/var/log/onlyoffice
- community_letsencrypt:/etc/letsencrypt
- document_data:/var/www/onlyoffice/DocumentServerData
- /sys/fs/cgroup:/sys/fs/cgroup:rw
- ./certs:/var/www/onlyoffice/Data/certs
onlyoffice-elasticsearch:
image: onlyoffice/elasticsearch:7.16.3
container_name: onlyoffice-elasticsearch
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g -Dlog4j2.formatMsgNoLookups=true"
- "indices.fielddata.cache.size=30%"
- "indices.memory.index_buffer_size=30%"
- "ingest.geoip.downloader.enabled=false"
networks:
- onlyoffice
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65535
hard: 65535
volumes:
- es_data:/usr/share/elasticsearch/data
expose:
- "9200"
- "9300"
onlyoffice-document-server:
container_name: onlyoffice-document-server
image: onlyoffice/documentserver:7.1.1.23
stdin_open: true
tty: true
restart: always
environment:
- JWT_ENABLED=true
- JWT_SECRET=jwt_secret
- JWT_HEADER=AuthorizationJwt
networks:
- onlyoffice
expose:
- '80'
- '443'
volumes:
- document_data:/var/www/onlyoffice/Data
- document_log:/var/log/onlyoffice
- ./document_fonts:/usr/share/fonts/truetype/custom
- document_forgotten:/var/lib/onlyoffice/documentserver/App_Data/cache/files/forgotten
onlyoffice-mail-server:
container_name: onlyoffice-mail-server
image: onlyoffice/mailserver:1.6.75
depends_on:
- onlyoffice-mysql-server
hostname: ${MAIL_SERVER_HOSTNAME}
environment:
- MYSQL_SERVER=onlyoffice-mysql-server
- MYSQL_SERVER_PORT=3306
- MYSQL_ROOT_USER=mail_admin
- MYSQL_ROOT_PASSWD=Isadmin123
- MYSQL_SERVER_DB_NAME=onlyoffice_mailserver
networks:
- onlyoffice
restart: always
privileged: true
ports: ['25:25','143:143','587:587']
stdin_open: true
tty: true
expose:
- '8081'
- '3306'
volumes:
- mail_data:/var/vmail
- mail_certs:/etc/pki/tls/mailserver
- mail_log:/var/log
onlyoffice-control-panel:
container_name: onlyoffice-control-panel
depends_on:
- onlyoffice-document-server
- onlyoffice-mail-server
- onlyoffice-community-server
image: onlyoffice/controlpanel:3.1.1.467
environment:
- ONLYOFFICE_CORE_MACHINEKEY=core_secret
expose:
- '80'
- '443'
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- controlpanel_data:/var/www/onlyoffice/Data
- controlpanel_log:/var/log/onlyoffice
networks:
- onlyoffice
stdin_open: true
tty: true
networks:
onlyoffice:
driver: 'bridge'
volumes:
mail_data:
mail_certs:
mail_log:
mail_mysql:
document_data:
document_log:
document_forgotten:
community_mysql:
community_data:
community_log:
community_letsencrypt:
controlpanel_data:
controlpanel_log:
mysql_data:
es_data:
Alguna de la información que extraemos de esto:
Se utilizan una serie de imágenes de docker que son:
onlyoffice-mysql-server
onlyoffice-community-server
onlyoffice/elasticsearch:7.16.3
onlyoffice-document-server
onlyoffice-mail-server
onlyoffice-control-panel
Los puertos configurados son los siguientes:
Para conexiones externas, deben estar abiertos:
80 para HTTP
443 para HTTPS
Para que funcione el servidor de correos:
25 para SMTP
465 para SMTPS
143 para IMAP
993 para IMAPS
110 para POP3
995 para POP3S
Vamos a descargar directamente el docker-compose
del github con git:
git clone https://github.com/ONLYOFFICE/Docker-DocumentServer.git
Una vez descargado el repositorio, vamos al directorio de Docker-DocumentServer
:
cd Docker-DocumentServer
Por último, iniciaremos los servicios.
Iniciar servicios
Vamos a ejecutar esta aplicación, para ello primero hay que arrancar la aplicación con Compose:
docker-compose up -d
Cuando arrancamos la aplicación, Compose nos informa de los servicios que ha ido levantando. Recuerda que el parámetro -d
sirve para levantar el servicio en segundo plano.
Ahora podemos comprobar que funciona:
Si listamos los contenedores:
docker container ls
Si listamos el compose:
docker-compose ps
Lo que tenemos que tener en cuenta es lo siguiente:
docker-compose ps
solo muestra información de los servicios que se define endocker-compose.yaml
, mientras quedocker
muestra todos.Cuando creamos contenedores con
docker
sin indicar un nombre, por defecto asigna uno aleatorio; mientras que en Compose el prefijo es el nombre del directorio y el sufijo el nombre del servicio: wordpress_db_1. El número indica el número de instancia. Es posible levantar más de una instancia de un mismo servicio.
Al terminar, ya podemos entrar a navegador con el puerto 5432 para hacerlo funcionar:
localhost:5432
0.0.0.0:5432

Ahora tocara testearlo, para ello al entrar en la pagina ya te indica que ejecutes los comandos que aparecen y podrás entrar a la interfaz:

Ahora puedes usar la demo de la aplicación, para revisar bien su funcionamiento e integración accede a su documentación oficial.
Última actualización