🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  1. Sistemas y Servidores
  2. Docker
  3. Docker Compose

Ejemplo 3: Implantación de onlyoffice

AnteriorEjemplo 2: Implementación de servidor con Nginx, Flask y mySQLSiguienteEjemplo 4: Passbolt

Última actualización hace 4 meses

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.

  1. Editor de Documentos

  2. Editor de Hojas de Cálculo

  3. Editor de Presentaciones

  4. Gestor de Proyectos

  5. Sistema de Colaboración en Tiempo Real

  6. 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 . En él nos ofrecen el siguiente (y extenso) yaml:

docker-compose.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 en docker-compose.yaml, mientras que docker 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.

📊
github del propio onlyoffice