容器

平替谷歌翻译,一分钟部署LibreTranslate

背景


想翻译一段内容,结果网断了,在线翻译页面压根打不开?经常要翻译大量内容,老是受限于字数、请求频率,甚至广告满天飞?担心在线翻译器将内部资料传到 Google、百度服等务器上,数据隐私毫无保障?

又或开发时想调用个翻译 API,却发现不是要绑卡就是要付费,调试都难?

如果你点头了,那或许该了解下LibreTranslate,这是一款开源、免费、无需联网就能用的翻译工具,能本地部署、支持多语言互译、不上传任何数据,还能一键 Docker 启动。

我的工作会经常性校订总部文稿,原本是腾讯翻译君和Google翻译掺合着用,尝过LibreTranslate觉得真是不错,因此推荐给大家~

LibreTranslate 是一个完全开源、无需依赖第三方 Google 或 Azure 等专有提供商来执行翻译,基于神经网络的开源翻译引擎(由开源Argos Translate库提供支持),可以离线运行、自建部署,实现完全自托管。

  • 零依赖第三方云平台,可完全本地离线部署
  • 支持 API 密钥限制、请求控制
  • 支持多语言互译(含中英法西等主流语种)
  • 提供 Docker 镜像,部署维护成本极低

官网地址:

https://libretranslate.com/
https://docs.libretranslate.com/guides/installation

 

docker运行


拉取Docker镜像:
docker pull libretranslate/libretranslate

然后运行容器: 
docker run -ti --rm -p 5000:5000 libretranslate/libretranslate --load-only zh,en

然后在主机上访问虚拟机的Host连接地址:翻译服务映射的端口

 

出现此界面,则说明Docker服务安装完成. 首页下方非常贴心地提示了API请求的语法,

 

K8s部署的例子


Deployment

# kubectl apply -f service-libretranslate-deployment.yaml -n common-services
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-libretranslate-deployment  # Deployment 名称
  labels:
    app: service-libretranslate
spec:
  replicas: 1  # 运行 1 个容器实例(类似 Docker 的单容器)
  selector:
    matchLabels:
      app: service-libretranslate
  template:
    metadata:
      labels:
        app: service-libretranslate
    spec:
      containers:
      - name: libretranslate  # 容器名称(对应 Docker 的 --name)
        image: libretranslate/libretranslate:latest # 使用 latest 标签
        args: ["--load-only", "en,zh"]  # 仅加载英语和中文模型
        imagePullPolicy: IfNotPresent  # 本地有镜像则不拉取,没有则拉取
        ports:
        - containerPort: 5000  # 容器内的端口(对应 Docker 容器内的 5000)
        resources:
          limits:
            memory: "2Gi"
            cpu: "500m"
        volumeMounts:
        - name: libretranslate-models  # 挂载卷的名称(需与下面的 volumes 对应)
          mountPath: /home/libretranslate/.local # 容器内的挂载路径(对应 Docker 的 -v 容器内路径)
        - name: libretranslate-apikeys  # 挂载卷的名称(需与下面的 volumes 对应)
          mountPath: /app/db # 容器内的挂载路径(对应 Docker 的 -v 容器内路径)
      volumes:
      - name: libretranslate-models
        hostPath:
          path: /Users/xxxx/Documents/k8s/pv/libretranslate/models  # 宿主机的路径(对应 Docker 的 -v 宿主机路径)
          type: DirectoryOrCreate  # 若路径不存在则自动创建
      - name: libretranslate-apikeys
        hostPath:
          path: /Users/xxxx/Documents/k8s/pv/libretranslate/apikeys  # 宿主机的路径(对应 Docker 的 -v 宿主机路径)
          type: DirectoryOrCreate  # 若路径不存在则自动创建

 

service

# kubectl apply -f libretranslate-service.yaml -n common-services
apiVersion: v1
kind: Service
metadata:
  name: libretranslate-service
spec:
  selector:
    app: service-libretranslate
  ports:
    - protocol: TCP
      port: 5000        # Service 端口
      targetPort: 5000  # 容器端口
      nodePort: 30500   # 节点端口(范围 30000-32767)
  type: NodePort        # 通过节点 IP:端口 访问服务