docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署OnlyOffice

使用Docker Compose一键部署OnlyOffice的完整指南与配置解析

作者:东方佑

OnlyOffice作为一款强大的开源办公套件,不仅提供与Microsoft Office高度兼容的在线编辑体验,还支持实时协作编辑,成为许多企业和团队的首选解决方案,下面就将详细介绍如何使用Docker Compose快速部署功能完整的OnlyOffice服务栈

在现代办公环境中,高效的文档协作工具已成为团队生产力的核心。OnlyOffice作为一款强大的开源办公套件,不仅提供与Microsoft Office高度兼容的在线编辑体验,还支持实时协作编辑,成为许多企业和团队的首选解决方案。本文将详细介绍如何使用Docker Compose快速部署功能完整的OnlyOffice服务栈。

为什么选择Docker部署OnlyOffice

传统软件安装方式往往需要复杂的依赖配置和环境调整,而Docker容器化部署则具有显著优势:环境一致性确保在不同系统中运行效果相同;快速部署大幅缩短安装时间;资源隔离避免服务间相互干扰;易于维护简化升级和备份流程。

特别是使用Docker Compose,可以通过简单的YAML文件定义多服务应用栈,实现一键启动所有相关服务,极大简化了部署流程。

Docker Compose配置文件全面解析

下面我们深入分析一个生产环境级别的OnlyOffice部署配置:

1. 网络与存储规划

配置文件中首先定义了一个独立的Docker网络,这对于多容器应用至关重要:

networks:
  onlyoffice-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

使用独立网络确保容器间通信安全高效,同时避免端口冲突。所有服务都连接到同一网络,形成封闭的内部通信环境。

数据持久化是通过卷映射实现的,关键数据目录如MySQL数据、Redis缓存和OnlyOffice文档数据都映射到宿主机相应目录,防止容器重建时数据丢失。

2. 数据库服务配置

MySQL服务作为Community Server的主数据库:

onlyoffice-mysql:
  image: mysql:8.0
  environment:
    MYSQL_ROOT_PASSWORD: onlyoffice
    MYSQL_DATABASE: onlyoffice
  volumes:
    - ./data/mysql:/var/lib/mysql
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]

同时配置了PostgreSQL作为Document Server的专用数据库。双数据库设计符合OnlyOffice的架构要求,确保各组件性能最优。

3. 核心服务组件

部署包含三个核心服务:

每个服务都配置了健康检查机制,确保容器启动顺序正确,避免依赖问题。

关键配置参数详解

安全设置

JWT(JSON Web Token)认证是保障OnlyOffice安全的关键:

environment:
  - JWT_ENABLED=true
  - JWT_SECRET=your-secret-key-here-change-me

务必修改默认JWT密钥,并使用强密码策略,这是防止未授权访问的第一道防线。

性能优化建议

根据实际使用场景,可调整以下参数优化性能:

部署与运维指南

启动服务

在包含docker-compose.yml的目录中执行:

docker-compose up -d

此命令将后台启动所有服务。首次运行会下载镜像,可能需要较长时间。

服务验证

启动后,通过以下方式验证服务状态:

常见问题排查

备份与升级策略

数据备份

定期备份以下目录:

服务升级

注意:升级前务必测试新版本兼容性,特别是大版本更新时。

完整代码

version: '3.8'

services:
  # MySQL 数据库服务(独立容器,提高稳定性)
  onlyoffice-mysql:
    image: mysql:8.0
    pull_policy: missing
    container_name: onlyoffice-mysql
    restart: unless-stopped
    command: 
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --innodb_force_recovery=0
    environment:
      MYSQL_ROOT_PASSWORD: onlyoffice
      MYSQL_DATABASE: onlyoffice
      MYSQL_USER: onlyoffice
      MYSQL_PASSWORD: onlyoffice
      TZ: Asia/Shanghai
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./config/mysql:/etc/mysql/conf.d
    ports:
      - "3306:3306"
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-ponlyoffice"]
      timeout: 20s
      retries: 10

  # Redis 缓存服务
  onlyoffice-redis:
    image: redis:7.2-alpine
    pull_policy: missing
    container_name: onlyoffice-redis
    restart: unless-stopped
    command: redis-server --appendonly yes --requirepass onlyoffice
    volumes:
      - ./data/redis:/data
    ports:
      - "6379:6379"
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      timeout: 10s
      retries: 5

  # OnlyOffice Document Server
  onlyoffice-document-server:
    image: onlyoffice/documentserver:7.4
    container_name: onlyoffice-document-server
    restart: unless-stopped
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=your-secret-key-here-change-me
      - DB_TYPE=postgres
      - DB_HOST=onlyoffice-document-db
      - DB_NAME=onlyoffice
      - DB_USER=onlyoffice
      - DB_PASS=onlyoffice
      - TZ=Asia/Shanghai
    volumes:
      - ./data/ds:/var/www/onlyoffice/Data
      - ./data/ds/logs:/var/log/onlyoffice
      - ./data/ds/lib:/var/lib/onlyoffice
      - ./data/ds/db:/var/lib/postgresql
      - ./data/ds/certs:/var/www/onlyoffice/Data/certs
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      onlyoffice-document-db:
        condition: service_healthy
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 10

  # Document Server 数据库
  onlyoffice-document-db:
    image: postgres:13
    pull_policy: missing
    container_name: onlyoffice-document-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: onlyoffice
      POSTGRES_USER: onlyoffice
      POSTGRES_PASSWORD: onlyoffice
      POSTGRES_HOST_AUTH_METHOD: md5
    volumes:
      - ./data/ds-db:/var/lib/postgresql/data
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U onlyoffice -d onlyoffice"]
      interval: 30s
      timeout: 10s
      retries: 5

  # OnlyOffice Community Server(主要服务)
  onlyoffice-community-server:
    image: onlyoffice/communityserver:latest
    container_name: onlyoffice-community-server
    restart: unless-stopped
    environment:
      # MySQL 配置
      MYSQL_SERVER_HOST: onlyoffice-mysql
      MYSQL_SERVER_PORT: 3306
      MYSQL_SERVER_DB_NAME: onlyoffice
      MYSQL_ROOT_USER: root
      MYSQL_ROOT_PASSWORD: onlyoffice
      MYSQL_SERVER_USER: onlyoffice
      MYSQL_SERVER_PASS: onlyoffice
      
      # Redis 配置
      REDIS_SERVER_HOST: onlyoffice-redis
      REDIS_SERVER_PORT: 6379
      REDIS_SERVER_PASSWORD: onlyoffice
      
      # Document Server 配置
      DOCUMENT_SERVER_ENABLED: "true"
      DOCUMENT_SERVER_URL: "http://onlyoffice-document-server/"
      DOCUMENT_SERVER_JWT_ENABLED: "true"
      DOCUMENT_SERVER_JWT_SECRET: "your-secret-key-here-change-me"
      DOCUMENT_SERVER_JWT_HEADER: "Authorization"
      
      # 基础配置
      SERVER_HOST: localhost
      CONTROL_PANEL_ENABLED: "true"
      CORE_BASE_DOMAIN: localhost
      
      # 安全配置
      MYSQL_USER: mysql
      MYSQL_GROUP: mysql
      USER: "999:999"
      
      # 时区
      TZ: Asia/Shanghai
      
    volumes:
      - ./data/cs:/var/www/onlyoffice/Data
      - ./data/cs/logs:/var/log/onlyoffice
      - ./data/cs/fonts:/usr/share/fonts/truetype/custom
      - ./data/cs/letsencrypt:/etc/letsencrypt
      - ./config/cs:/etc/onlyoffice/communityserver
    ports:
      - "8080:80"
      - "8443:443"
      - "5222:5222"  # XMPP
      - "9866:9866"  # 服务端口
    depends_on:
      onlyoffice-mysql:
        condition: service_healthy
      onlyoffice-redis:
        condition: service_healthy
      onlyoffice-document-server:
        condition: service_healthy
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9866/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5

networks:
  onlyoffice-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

总结

通过本文介绍的Docker Compose配置,您可以快速部署一个功能完整、安全可靠的OnlyOffice协作平台。这种容器化部署方案不仅简化了安装流程,还为企业提供了易于维护和扩展的文档协作解决方案。

无论是小型团队还是大型企业,OnlyOffice都能满足日常办公需求,而Docker化部署则确保了服务的稳定性和可维护性。现在就开始使用这个配置,构建您团队的专属协作平台吧!

提示:本文配置适用于测试和生产环境,实际部署时请根据硬件资源调整参数,并加强安全设置。

到此这篇关于使用Docker Compose一键部署OnlyOffice的完整指南与配置解析的文章就介绍到这了,更多相关Docker部署OnlyOffice内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文