使用 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),特别是网络配置。
-
创建网络 (如果还没有共享网络):
docker network create shared-network
-
创建
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 # 使用上面创建的外部网络 -
启动服务:
在
docker-compose.yml
文件所在的目录运行:docker-compose up -d
配置客户端连接 (以 Stirling PDF 为例)
要让 Stirling PDF 或其他应用连接到独立的 unoserver
容器:
- 网络: 确保客户端容器(如 Stirling PDF)和
unoserver
容器在同一个 Docker 网络中(如上例中的shared-network
)。 - 地址: 在客户端容器的配置中,使用
unoserver
容器的服务名(在docker-compose.yml
中定义的名字,例如unoserver
)作为主机名,端口通常是2003
。 - 环境变量: 查找客户端应用(如 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 的最新文档以获取准确的环境变量名称和格式。