跳到主要内容

使用 Docker 部署 unoserver 服务

简介

unoserver 是一个允许通过网络接口访问 LibreOffice 功能的服务器。将其部署为独立的 Docker 服务,可以让多个应用程序(例如 Stirling PDF、自定义脚本等)共享同一个 LibreOffice 实例来进行 Office 文档(如 .docx, .xlsx, .pptx)到 PDF 的转换,从而节省资源并简化维护。

本文档将指导您如何使用 Docker 部署 unoserver

先决条件

  • 已安装 Docker 和 Docker Compose。

推荐镜像

我们将使用 unoconv 官方提供的 unoserver Docker 镜像: ghcr.io/unoconv/unoserver-docker

使用 docker run 部署 (快速测试)

您可以使用以下命令快速启动一个 unoserver 容器:

docker run -d --name unoserver -p 127.0.0.1:2003:2003 ghcr.io/unoconv/unoserver-docker
  • -d: 在后台运行容器。
  • --name unoserver: 为容器命名,方便管理。
  • -p 127.0.0.1:2003:2003: 将容器的 2003 端口映射到主机的 2003 端口(仅限本地访问)。如果您需要从其他机器访问,请移除 127.0.0.1: 部分,但这会暴露端口,请注意安全风险。

这种方式适合快速测试,但对于多容器应用,推荐使用 Docker Compose。

使用 docker-compose 部署 (推荐)

使用 Docker Compose 可以更方便地管理 unoserver 服务以及需要连接它的其他服务(如 Stirling PDF),特别是网络配置。

  1. 创建网络 (如果还没有共享网络):

    docker network create shared-network
  2. 创建 docker-compose.yml 文件:

    创建一个 docker-compose.yml 文件,内容类似如下:

    version: '3.8'

    services:
    unoserver:
    image: ghcr.io/unoconv/unoserver-docker
    container_name: unoserver
    restart: unless-stopped
    ports:
    # 只暴露给本地网络内的其他容器,不映射到主机
    - "2003"
    # 如果需要从主机或其他网络访问,取消注释下面这行,但注意安全
    # - "127.0.0.1:2003:2003"
    networks:
    - shared-network

    # --- 示例:Stirling PDF 配置 ---
    stirling-pdf: # 这是您的 Stirling PDF 服务名
    image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
    container_name: stirling-pdf
    restart: unless-stopped
    ports:
    - '8080:8080'
    volumes:
    - ./stirling-data/trainingData:/usr/share/tessdata
    - ./stirling-data/extraConfigs:/configs
    # ... 其他卷挂载 ...
    environment:
    # 关键:告诉 Stirling PDF unoserver 在哪里
    # 需要查阅 Stirling PDF 文档确认具体环境变量名
    # 假设环境变量是 UNOSERVER_URL 或类似名称
    # UNOSERVER_URL: "http://unoserver:2003" # 使用服务名和端口
    LANGS: zh_CN,en_GB
    # ... 其他 Stirling PDF 环境变量 ...
    depends_on:
    - unoserver # 确保 unoserver 先启动
    networks:
    - shared-network

    networks:
    shared-network:
    external: true # 使用上面创建的外部网络
  3. 启动服务:

    docker-compose.yml 文件所在的目录运行:

    docker-compose up -d

配置客户端连接 (以 Stirling PDF 为例)

要让 Stirling PDF 或其他应用连接到独立的 unoserver 容器:

  1. 网络: 确保客户端容器(如 Stirling PDF)和 unoserver 容器在同一个 Docker 网络中(如上例中的 shared-network)。
  2. 地址: 在客户端容器的配置中,使用 unoserver 容器的服务名(在 docker-compose.yml 中定义的名字,例如 unoserver)作为主机名,端口通常是 2003
  3. 环境变量: 查找客户端应用(如 Stirling PDF)用于配置 unoserver 连接地址的环境变量。这通常需要查阅该应用的官方文档。 在上面的 docker-compose.yml 示例中,我们假设存在一个类似 UNOSERVER_URL 的环境变量,并将其值设置为 http://unoserver:2003

注意事项

  • 安全性: unoconv/unoserver-docker 默认监听的接口可能不包含任何认证机制。建议不要将 unoserver 的端口直接暴露到公网。使用 Docker 网络将其限制在内部访问通常更安全。
  • 资源: LibreOffice 可能需要较多的内存和 CPU 资源,尤其是在进行复杂转换时。请确保为 unoserver 容器分配足够的资源。
  • Stirling PDF 配置: 连接 Stirling PDF 的关键在于找到正确的环境变量来告知它 unoserver 的位置。请务必查阅 Stirling PDF 的最新文档以获取准确的环境变量名称和格式。