本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 28 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。

它是什么

ConvertX 是一个自托管的在线文件转换服务:上传文件、选目标格式,服务端调用 ImageMagick、FFmpeg、LibreOffice、Pandoc 等工具完成转换。支持文档、图片、音频、视频、电子书等常见格式。

放在内网最大的好处是文件不外传——不用再把合同、截图、录音丢给各种在线转换网站。

前置条件

  • 一台 Linux 服务器(2C2G 起;视频转码吃 CPU,建议 4C);
  • 已安装 Docker 与 Compose v2;
  • 磁盘留足空间:转换过程会产生临时文件。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh

# 目录约定
mkdir -p /srv/docker/active/convertx && cd /srv/docker/active/convertx

镜像地址

c4illin/convertx:latest

目录结构

/srv/docker/active/convertx/
├── docker-compose.yml
├── .env
└── data/                 # 转换记录与临时文件

部署步骤

cat > .env <<'EOF'
CONVERTX_JWT_SECRET=<随机长字符串>
EOF
chmod 600 .env
# docker-compose.yml
services:
  convertx:
    image: c4illin/convertx:latest
    container_name: convertx
    restart: unless-stopped
    ports:
      - "3455:3000"
    volumes:
      - ./data:/app/data
    environment:
      - JWT_SECRET=${CONVERTX_JWT_SECRET}
      - HTTP_ALLOWED=true
      - LANGUAGE=zh
docker compose up -d
docker compose logs -f --tail=100

浏览器打开 http://<SERVER_IP>:3455。

关键配置

项 说明
3455:3000 宿主机 3455 → 容器 3000
JWT_SECRET 会话签名密钥,必须换成随机值,不可用示例
HTTP_ALLOWED=true 允许 HTTP 访问;走 HTTPS 反代时可保留,纯 HTTP 内网也可用
LANGUAGE=zh 界面中文
./data 转换记录与临时文件,要持久化

注意事项

  • 官方镜像里已经打包了常用转换工具,但不是所有格式都支持,冷门格式会报错,属正常;
  • 视频转码非常吃 CPU 和磁盘 IO,别在低配 NAS 上一次传多个大视频;
  • 服务本身没有账号体系,只在内网或加反代认证后使用;
  • 上传大文件时注意反代 client_max_body_size,否则会 413;
  • latest 标签升级不可控,升级前备份 data/ 并记录当前镜像 digest。

备份与升级

# 备份数据
tar czf "convertx-$(date +%F).tar.gz" ./data

# 升级
docker compose pull
docker compose up -d

# 回滚:compose 里把 tag 改回旧版本,再 up -d
  • 转换记录不重要的话,data/ 也可以不备份,但升级前至少留一份;
  • 定期清理 data/ 里的临时文件,避免把盘写满。