docs: 添加LibreTranslate Conda部署方案(Ubuntu)
@@ -0,0 +1,423 @@
|
||||
# LibreTranslate Conda 部署方案(Ubuntu)
|
||||
|
||||
## 1. 方案说明
|
||||
|
||||
国内服务器通常无法直接拉取 Docker Hub 镜像,因此本方案使用:
|
||||
|
||||
```text
|
||||
Ubuntu + Miniconda + Python 虚拟环境 + LibreTranslate + systemd
|
||||
```
|
||||
|
||||
部署完成后:
|
||||
|
||||
- LibreTranslate 通过 systemd 自动启动
|
||||
- 开机自启
|
||||
- 支持 API Key 管理
|
||||
- 可作为项目“自定义翻译接口”
|
||||
|
||||
## 2. 安装 Miniconda
|
||||
|
||||
### 2.1 下载并安装
|
||||
|
||||
x86_64 服务器:
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
|
||||
sudo bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
|
||||
```
|
||||
|
||||
ARM64 服务器:
|
||||
|
||||
```bash
|
||||
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
|
||||
sudo bash Miniconda3-latest-Linux-aarch64.sh -b -p /opt/miniconda3
|
||||
```
|
||||
|
||||
### 2.2 初始化 conda
|
||||
|
||||
```bash
|
||||
sudo /opt/miniconda3/bin/conda init bash
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
检查版本:
|
||||
|
||||
```bash
|
||||
conda --version
|
||||
```
|
||||
|
||||
## 3. 创建 LibreTranslate 环境
|
||||
|
||||
```bash
|
||||
conda create -n libretranslate python=3.10 -y
|
||||
conda activate libretranslate
|
||||
```
|
||||
|
||||
> 建议使用 Python 3.10;LibreTranslate 在部分 Ubuntu 的 Python 3.12 上存在兼容问题。
|
||||
|
||||
## 4. 安装 LibreTranslate
|
||||
|
||||
```bash
|
||||
pip install --upgrade pip
|
||||
pip install libretranslate
|
||||
```
|
||||
|
||||
验证安装:
|
||||
|
||||
```bash
|
||||
which libretranslate
|
||||
ltmanage --help
|
||||
```
|
||||
|
||||
conda 环境内的命令路径通常是:
|
||||
|
||||
```text
|
||||
/opt/miniconda3/envs/libretranslate/bin/libretranslate
|
||||
/opt/miniconda3/envs/libretranslate/bin/ltmanage
|
||||
```
|
||||
|
||||
## 5. 准备数据和日志目录
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/libretranslate/db
|
||||
sudo mkdir -p /opt/libretranslate/logs
|
||||
sudo chmod 755 /opt/libretranslate
|
||||
sudo chown -R $USER:$USER /opt/libretranslate
|
||||
```
|
||||
|
||||
## 6. 首次下载语言模型
|
||||
|
||||
先手动启动一次,让服务下载中文、西班牙语、英语模型:
|
||||
|
||||
```bash
|
||||
conda activate libretranslate
|
||||
cd /opt/libretranslate
|
||||
libretranslate \
|
||||
--host 127.0.0.1 \
|
||||
--port 5001 \
|
||||
--load-only zh,es,en \
|
||||
--update-models
|
||||
```
|
||||
|
||||
首次启动会下载模型,需要等待几分钟。看到类似输出后说明成功:
|
||||
|
||||
```text
|
||||
Running on http://127.0.0.1:5001
|
||||
```
|
||||
|
||||
测试:
|
||||
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:5001/translate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"q":"我喜欢篮球","source":"zh","target":"es"}'
|
||||
```
|
||||
|
||||
正常返回:
|
||||
|
||||
```json
|
||||
{"translatedText":"Me gusta el baloncesto"}
|
||||
```
|
||||
|
||||
测试完成后按 `Ctrl+C` 停止。
|
||||
|
||||
## 7. 创建服务运行用户
|
||||
|
||||
```bash
|
||||
sudo useradd -r -s /usr/sbin/nologin -d /opt/libretranslate libretranslate
|
||||
sudo chown -R libretranslate:libretranslate /opt/libretranslate
|
||||
```
|
||||
|
||||
## 8. 创建 systemd 服务
|
||||
|
||||
创建服务文件:
|
||||
|
||||
```bash
|
||||
sudo tee /etc/systemd/system/libretranslate.service > /dev/null <<'EOF'
|
||||
[Unit]
|
||||
Description=LibreTranslate Machine Translation API
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=libretranslate
|
||||
Group=libretranslate
|
||||
WorkingDirectory=/opt/libretranslate
|
||||
Environment=HOME=/opt/libretranslate
|
||||
Environment=LT_LOAD_ONLY=zh,es,en
|
||||
Environment=LT_UPDATE_MODELS=true
|
||||
Environment=LT_API_KEYS=true
|
||||
Environment=LT_API_KEYS_DB_PATH=/opt/libretranslate/db/api_keys.db
|
||||
Environment=LT_REQ_LIMIT=60
|
||||
Environment=LT_CHAR_LIMIT=2000
|
||||
ExecStart=/opt/miniconda3/envs/libretranslate/bin/libretranslate --host 127.0.0.1 --port 5001
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
```text
|
||||
LT_LOAD_ONLY=zh,es,en 只加载中文、西班牙语、英语模型
|
||||
LT_UPDATE_MODELS=true 启动时允许更新/下载模型
|
||||
LT_API_KEYS=true 启用 API Key
|
||||
LT_REQ_LIMIT=60 每分钟请求限制
|
||||
LT_CHAR_LIMIT=2000 单次最大字符数
|
||||
```
|
||||
|
||||
## 9. 启动并设置开机自启
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now libretranslate
|
||||
sudo systemctl status libretranslate
|
||||
```
|
||||
|
||||
常用命令:
|
||||
|
||||
```bash
|
||||
sudo systemctl start libretranslate
|
||||
sudo systemctl stop libretranslate
|
||||
sudo systemctl restart libretranslate
|
||||
sudo journalctl -u libretranslate -f
|
||||
```
|
||||
|
||||
## 10. API Key 管理
|
||||
|
||||
### 10.1 创建 API Key
|
||||
|
||||
```bash
|
||||
sudo -u libretranslate /opt/miniconda3/envs/libretranslate/bin/ltmanage keys \
|
||||
--api-keys-db-path /opt/libretranslate/db/api_keys.db \
|
||||
add 120
|
||||
```
|
||||
|
||||
参数 `120` 表示该 Key 每分钟最多 120 次请求。
|
||||
|
||||
还可以添加单次字符限制:
|
||||
|
||||
```bash
|
||||
sudo -u libretranslate /opt/miniconda3/envs/libretranslate/bin/ltmanage keys \
|
||||
--api-keys-db-path /opt/libretranslate/db/api_keys.db \
|
||||
add 120 --char-limit 5000
|
||||
```
|
||||
|
||||
命令会输出类似:
|
||||
|
||||
```text
|
||||
API key created: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
```
|
||||
|
||||
### 10.2 查看 Key
|
||||
|
||||
```bash
|
||||
sudo -u libretranslate /opt/miniconda3/envs/libretranslate/bin/ltmanage keys \
|
||||
--api-keys-db-path /opt/libretranslate/db/api_keys.db \
|
||||
list
|
||||
```
|
||||
|
||||
### 10.3 删除 Key
|
||||
|
||||
先查看 `ltmanage keys --help` 确认当前版本参数:
|
||||
|
||||
```bash
|
||||
/opt/miniconda3/envs/libretranslate/bin/ltmanage keys --help
|
||||
```
|
||||
|
||||
常见删除命令:
|
||||
|
||||
```bash
|
||||
sudo -u libretranslate /opt/miniconda3/envs/libretranslate/bin/ltmanage keys \
|
||||
--api-keys-db-path /opt/libretranslate/db/api_keys.db \
|
||||
remove 你的APIKey
|
||||
```
|
||||
|
||||
### 10.4 使用 Key 调用翻译
|
||||
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:5001/translate \
|
||||
-H "Authorization: Bearer 你的APIKey" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"q":"我喜欢篮球","source":"zh","target":"es"}'
|
||||
```
|
||||
|
||||
## 11. 一键管理脚本
|
||||
|
||||
创建脚本 `/opt/libretranslate/manage_keys.sh`:
|
||||
|
||||
```bash
|
||||
sudo tee /opt/libretranslate/manage_keys.sh > /dev/null <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
LT=/opt/miniconda3/envs/libretranslate/bin/ltmanage
|
||||
DB=/opt/libretranslate/db/api_keys.db
|
||||
|
||||
usage() {
|
||||
echo "用法: $0 {add [限额] [字符限制] | list | remove <key>}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
add)
|
||||
limit="${2:-120}"
|
||||
char_limit="${3:-2000}"
|
||||
sudo -u libretranslate "$LT" keys --api-keys-db-path "$DB" add "$limit" --char-limit "$char_limit"
|
||||
;;
|
||||
list)
|
||||
sudo -u libretranslate "$LT" keys --api-keys-db-path "$DB" list
|
||||
;;
|
||||
remove)
|
||||
[ -n "$2" ] || usage
|
||||
sudo -u libretranslate "$LT" keys --api-keys-db-path "$DB" remove "$2"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
|
||||
sudo chmod +x /opt/libretranslate/manage_keys.sh
|
||||
```
|
||||
|
||||
使用:
|
||||
|
||||
```bash
|
||||
sudo /opt/libretranslate/manage_keys.sh add 120 5000
|
||||
sudo /opt/libretranslate/manage_keys.sh list
|
||||
sudo /opt/libretranslate/manage_keys.sh remove 你的APIKey
|
||||
```
|
||||
|
||||
## 12. 配置 Nginx 反向代理
|
||||
|
||||
### 12.1 安装 Nginx
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install nginx -y
|
||||
```
|
||||
|
||||
### 12.2 创建站点配置
|
||||
|
||||
```bash
|
||||
sudo tee /etc/nginx/sites-available/libretranslate > /dev/null <<'EOF'
|
||||
server {
|
||||
listen 80;
|
||||
server_name translate.example.com;
|
||||
|
||||
client_max_body_size 2m;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:5001;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
sudo ln -s /etc/nginx/sites-available/libretranslate /etc/nginx/sites-enabled/
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
公网部署建议配置 HTTPS(Certbot)。
|
||||
|
||||
## 13. 接入西班牙语日记项目
|
||||
|
||||
在本项目“翻译设置”中填写:
|
||||
|
||||
```text
|
||||
翻译方式:自定义接口
|
||||
接口地址:http://127.0.0.1:5001/translate
|
||||
接口密钥:你的APIKey
|
||||
扩展配置:
|
||||
{
|
||||
"result_key": "translatedText",
|
||||
"headers": {
|
||||
"Authorization": "Bearer 你的APIKey"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 14. 国内网络模型下载说明
|
||||
|
||||
如果首次启动时模型下载失败:
|
||||
|
||||
### 14.1 使用代理
|
||||
|
||||
```ini
|
||||
Environment=HTTPS_PROXY=http://你的代理地址:端口
|
||||
Environment=HTTP_PROXY=http://你的代理地址:端口
|
||||
```
|
||||
|
||||
### 14.2 手动下载模型
|
||||
|
||||
查询 Argos Translate 可用模型:
|
||||
|
||||
```bash
|
||||
/opt/miniconda3/envs/libretranslate/bin/argospm search zh
|
||||
```
|
||||
|
||||
手动安装:
|
||||
|
||||
```bash
|
||||
/opt/miniconda3/envs/libretranslate/bin/argospm install translate-zh_es
|
||||
```
|
||||
|
||||
> 模型名称以实际 `argospm search` 结果为准。
|
||||
|
||||
## 15. 常见问题
|
||||
|
||||
### 15.1 服务启动失败
|
||||
|
||||
```bash
|
||||
sudo journalctl -u libretranslate -e
|
||||
```
|
||||
|
||||
检查目录权限:
|
||||
|
||||
```bash
|
||||
sudo chown -R libretranslate:libretranslate /opt/libretranslate
|
||||
```
|
||||
|
||||
### 15.2 提示语言未加载
|
||||
|
||||
确认环境变量:
|
||||
|
||||
```ini
|
||||
LT_LOAD_ONLY=zh,es,en
|
||||
```
|
||||
|
||||
### 15.3 API Key 文件无权限
|
||||
|
||||
```bash
|
||||
sudo chown -R libretranslate:libretranslate /opt/libretranslate/db
|
||||
sudo systemctl restart libretranslate
|
||||
```
|
||||
|
||||
### 15.4 模型下载慢
|
||||
|
||||
- 配置 HTTPS 代理
|
||||
- 只加载 `zh,es,en` 三个模型
|
||||
- 保证磁盘剩余 5GB 以上
|
||||
|
||||
## 16. 总结
|
||||
|
||||
```text
|
||||
1. 安装 Miniconda
|
||||
2. 创建 python=3.10 环境
|
||||
3. pip install libretranslate
|
||||
4. 手动下载 zh,es,en 模型
|
||||
5. 创建 /opt/libretranslate 目录
|
||||
6. 创建 systemd 服务并开机自启
|
||||
7. 使用 ltmanage 创建/查看/删除 API Key
|
||||
8. 可选配置 Nginx + HTTPS
|
||||
9. 项目翻译设置选择“自定义接口”并填入 API Key
|
||||
```
|
||||
Reference in New Issue
Block a user