自托管部署Stirling-PDF
#software
我在对PDF进行操作时,一般流程是通过Google搜索PDF处理,然后用在线的工具。譬如ilovepdf,又譬如SmallPDF。使用这些在线工具的风险是数据与第三方服务器进行交互,另外也存在只能在线使用的劣势。
Stirling-PDF是一个开源的PDF处理工具,可以本地自部署,包含了API供程序调用。
部署
这里使用docker compose进行部署。由于我是部署在云服务器中,会在公网中暴露,因此必须打开登录模式。反代啥的根据自己的实际情况自行配置。
services:
stirling-pdf:
image: stirlingtools/stirling-pdf:latest
container_name: Stirling-PDF
ports:
- '8080:8080' # 前面的端口按需调整
volumes:
- ./trainingData:/usr/share/tessdata:rw # OCR 语言支持
- ./extraConfigs:/configs:rw # setting文件生成的路径
- ./customFiles:/customFiles:rw # 可以对网页进行一些元素调整
- ./logs:/logs:rw
environment:
- DOCKER_ENABLE_SECURITY=true # 启用内部安全功能
- SECURITY_ENABLE_LOGIN=true # 启用登录
构建对应的docker-compose.yml文件后,输入下面的命令启动项目
docker compose up -d
在成功启动项目后,等待大概10分钟,程序才会初始化完成,然后才能通过<ip>:<端口>打开。
初始的管理员用户名和密码分别是admin、stirling,可以在网页端设置中重新设定。
启动失败爬坑
在使用登录模式进行部署时,Stirling-PDF会下载下面这个主程序,由于墙的存在,很可能会下载失败
https://github.com/Stirling-Tools/Stirling-PDF/releases/download/v${version}/Stirling-PDF-with-login.jar
官方方案是将基础镜像改为fat版本
# 例如,将下面的镜像
stirlingtools/stirling-pdf:0.44.2
# 改为
stirlingtools/stirling-pdf:0.44.2-fat
也可以使用下面的方法:
可以根据部署的版本,自行使用镜像进行下载。
具体的,先确认Stirling-PDF的容器ID,进入到容器中,然后自行下载
# 确认Stirling-PDF的ID
docker ps
# 进入到容器中
docker exec -it <容器ID> /bin/bash
cd /
# 自行下载
wget https://github.com/Stirling-Tools/Stirling-PDF/releases/download/v${version}/Stirling-PDF-with-login.jar -O app-security.jar
# 将这个文件进行软链
rm app.jar
ln -s app-security.jar app.jar
exit
建议重启项目
docker compose restart
API调用
网页端的使用没啥好说的,这里是同API调用。如果是自己用,就直接用管理员账户就好了。如果是还有其他用户,Stirling-PDF是做了用户角色分类的,这里使用一个拥有API权限的用户,在设定面板中可以看到这个用户的API密钥。
可以通过Swagger-UI查看和测试Stirling-PDF的API,具体的是访问**<ip><端口>/swagger-ui/index.html**。
我这里以将test.docx文件转为pdf为例,查询到API结构是
curl -X 'POST' \
'http://<ip>:<port>/api/v1/convert/file/pdf' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-H "X-API-KEY: your-api-key-here" \
-F 'fileInput=@test.docx;type=application/vnd.openxmlformats-officedocument.wordprocessingml.document' --output test.pdf