晨之光 發表於 2026-1-9 08:27:16

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">为什么选择Docker部署OnlyOffice</a></li><li><a href="#_label1">Docker Compose配置文件全面解析</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">1. 网络与存储规划</a></li><li><a href="#_lab2_1_1">2. 数据库服务配置</a></li><li><a href="#_lab2_1_2">3. 核心服务组件</a></li></ul><li><a href="#_label2">关键配置参数详解</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_3">安全设置</a></li><li><a href="#_lab2_2_4">性能优化建议</a></li></ul><li><a href="#_label3">部署与运维指南</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_5">启动服务</a></li><li><a href="#_lab2_3_6">服务验证</a></li><li><a href="#_lab2_3_7">常见问题排查</a></li></ul><li><a href="#_label4">备份与升级策略</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_8">数据备份</a></li><li><a href="#_lab2_4_9">服务升级</a></li></ul><li><a href="#_label5">完整代码</a></li><ul class="second_class_ul"></ul><li><a href="#_label6">总结</a></li><ul class="second_class_ul"></ul></ul></div><p>在现代办公环境中,高效的文档协作工具已成为团队生产力的核心。OnlyOffice作为一款强大的开源办公套件,不仅提供与Microsoft Office高度兼容的在线编辑体验,还支持实时协作编辑,成为许多企业和团队的首选解决方案。本文将详细介绍如何使用Docker Compose快速部署功能完整的OnlyOffice服务栈。</p>
<p class="maodian"><a name="_label0"></a></p><h2>为什么选择Docker部署OnlyOffice</h2>
<p>传统软件安装方式往往需要复杂的依赖配置和环境调整,而Docker容器化部署则具有显著优势:<strong>环境一致性</strong>确保在不同系统中运行效果相同;<strong>快速部署</strong>大幅缩短安装时间;<strong>资源隔离</strong>避免服务间相互干扰;<strong>易于维护</strong>简化升级和备份流程。</p>
<p>特别是使用Docker Compose,可以通过简单的YAML文件定义多服务应用栈,实现一键启动所有相关服务,极大简化了部署流程。</p>
<p class="maodian"><a name="_label1"></a></p><h2>Docker Compose配置文件全面解析</h2>
<p>下面我们深入分析一个生产环境级别的OnlyOffice部署配置:</p>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>1. 网络与存储规划</h3>
<p>配置文件中首先定义了一个独立的Docker网络,这对于多容器应用至关重要:</p>
<div class="jb51code"><pre class="brush:yaml;">networks:
onlyoffice-network:
    driver: bridge
    ipam:
      config:
      - subnet: 172.20.0.0/16
</pre></div>
<p>使用独立网络<strong>确保容器间通信安全高效</strong>,同时避免端口冲突。所有服务都连接到同一网络,形成封闭的内部通信环境。</p>
<p>数据持久化是通过卷映射实现的,关键数据目录如MySQL数据、Redis缓存和OnlyOffice文档数据都映射到宿主机相应目录,防止容器重建时数据丢失。</p>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>2. 数据库服务配置</h3>
<p>MySQL服务作为Community Server的主数据库:</p>
<div class="jb51code"><pre class="brush:yaml;">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"]
</pre></div>
<p>同时配置了PostgreSQL作为Document Server的专用数据库。<strong>双数据库设计</strong>符合OnlyOffice的架构要求,确保各组件性能最优。</p>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>3. 核心服务组件</h3>
<p>部署包含三个核心服务:</p>
<ul><li><strong>Redis缓存服务</strong>:提升系统响应速度,减少数据库压力</li><li><strong>Document Server</strong>:文档处理核心,提供文档编辑和转换功能</li><li><strong>Community Server</strong>:社区功能核心,提供用户管理和协作界面</li></ul>
<p>每个服务都配置了<strong>健康检查机制</strong>,确保容器启动顺序正确,避免依赖问题。</p>
<p class="maodian"><a name="_label2"></a></p><h2>关键配置参数详解</h2>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>安全设置</h3>
<p>JWT(JSON Web Token)认证是保障OnlyOffice安全的关键:</p>
<div class="jb51code"><pre class="brush:yaml;">environment:
- JWT_ENABLED=true
- JWT_SECRET=your-secret-key-here-change-me
</pre></div>
<p><strong>务必修改默认JWT密钥</strong>,并使用强密码策略,这是防止未授权访问的第一道防线。</p>
<p class="maodian"><a name="_lab2_2_4"></a></p><h3>性能优化建议</h3>
<p>根据实际使用场景,可调整以下参数优化性能:</p>
<ul><li><strong>资源限制</strong>:对于内存有限的NAS环境,可添加内存限制(如&ndash;memory=&ldquo;2g&rdquo;)</li><li><strong>端口配置</strong>:生产环境建议使用非标准端口(如8080)增强安全性</li><li><strong>日志管理</strong>:定期清理日志文件,防止磁盘空间耗尽</li></ul>
<p class="maodian"><a name="_label3"></a></p><h2>部署与运维指南</h2>
<p class="maodian"><a name="_lab2_3_5"></a></p><h3>启动服务</h3>
<p>在包含docker-compose.yml的目录中执行:</p>
<div class="jb51code"><pre class="brush:bash;">docker-compose up -d
</pre></div>
<p>此命令将<strong>后台启动所有服务</strong>。首次运行会下载镜像,可能需要较长时间。</p>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>服务验证</h3>
<p>启动后,通过以下方式验证服务状态:</p>
<ul><li>检查容器运行状态:<code>docker ps</code>应显示所有服务均为&quot;Up&quot;状态</li><li>访问Community Server:http://服务器IP:8080</li><li>访问Document Server:http://服务器IP:80/welcome/</li></ul>
<p class="maodian"><a name="_lab2_3_7"></a></p><h3>常见问题排查</h3>
<ul><li><strong>端口冲突</strong>:如果80或8080端口被占用,修改ports映射为&quot;新端口:容器端口&quot;</li><li><strong>字体显示问题</strong>:中文文档可能出现乱码,需添加中文字体支持</li><li><strong>权限错误</strong>:确保宿主机映射目录有适当写权限</li><li><strong>私有IP限制</strong>:在内网环境中,可能需要修改<code>allowPrivateIPAddress</code>为true</li></ul>
<p class="maodian"><a name="_label4"></a></p><h2>备份与升级策略</h2>
<p class="maodian"><a name="_lab2_4_8"></a></p><h3>数据备份</h3>
<p>定期备份以下目录:</p>
<ul><li><code>./data/mysql</code>:MySQL数据库文件</li><li><code>./data/redis</code>:Redis持久化数据</li><li><code>./data/ds</code>和<code>./data/cs</code>:OnlyOffice文档数据</li></ul>
<p class="maodian"><a name="_lab2_4_9"></a></p><h3>服务升级</h3>
<ul><li>停止现有服务:<code>docker-compose down</code></li><li>备份数据目录</li><li>拉取最新镜像:<code>docker-compose pull</code></li><li>重新启动服务:<code>docker-compose up -d</code></li></ul>
<p><strong>注意</strong>:升级前务必测试新版本兼容性,特别是大版本更新时。</p>
<p class="maodian"><a name="_label5"></a></p><h2>完整代码</h2>
<div class="jb51code"><pre class="brush:yaml;">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
</pre></div>
<p class="maodian"><a name="_label6"></a></p><h2>总结</h2>
<p>通过本文介绍的Docker Compose配置,您可以快速部署一个功能完整、安全可靠的OnlyOffice协作平台。这种容器化部署方案不仅简化了安装流程,还为企业提供了易于维护和扩展的文档协作解决方案。</p>
<p>无论是小型团队还是大型企业,OnlyOffice都能满足日常办公需求,而Docker化部署则确保了服务的稳定性和可维护性。现在就开始使用这个配置,构建您团队的专属协作平台吧!</p>
<p>提示:本文配置适用于测试和生产环境,实际部署时请根据硬件资源调整参数,并加强安全设置。</p>
<p>到此这篇关于使用Docker Compose一键部署OnlyOffice的完整指南与配置解析的文章就介绍到这了,更多相关Docker部署OnlyOffice内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
頁: [1]
查看完整版本: 使用Docker Compose一键部署OnlyOffice的完整指南与配置解析