update README and SERVICE
This commit is contained in:
@@ -0,0 +1,415 @@
|
||||
# LiteRT-LM Linux Systemd Service
|
||||
|
||||
Hướng dẫn cài đặt và sử dụng LiteRT-LM server như một systemd service trên Linux.
|
||||
|
||||
## 📋 Yêu cầu
|
||||
|
||||
- Linux với systemd (Ubuntu, Debian, Fedora, CentOS, etc.)
|
||||
- Python 3 đã cài đặt
|
||||
- Quyền sudo
|
||||
|
||||
## 🚀 Cài đặt Service
|
||||
|
||||
### Bước 1: Cho phép thực thi script
|
||||
|
||||
```bash
|
||||
chmod +x install_service.sh uninstall_service.sh
|
||||
```
|
||||
|
||||
### Bước 2: Chạy script cài đặt
|
||||
|
||||
```bash
|
||||
sudo bash install_service.sh
|
||||
```
|
||||
|
||||
Script sẽ hỏi cấu hình:
|
||||
- **Port**: Port để chạy server (mặc định 8000)
|
||||
- **Model path**: Đường dẫn model cụ thể (hoặc Enter để chọn từ menu)
|
||||
|
||||
Sau đó script sẽ:
|
||||
1. Tạo file config model mặc định (nếu cần)
|
||||
2. Tạo systemd service file với cấu hình đã chọn
|
||||
3. Enable service để tự động khởi động khi boot
|
||||
4. Khởi động service ngay lập tức
|
||||
|
||||
## ⚙️ Cấu hình
|
||||
|
||||
### Cấu hình Model
|
||||
|
||||
**Cách 1: Chọn từ menu (mặc định)**
|
||||
|
||||
Chỉnh sửa file `service_config.txt` để chọn model:
|
||||
|
||||
```
|
||||
1 → Gemma 4 Edge 2B (nhanh hơn)
|
||||
2 → Gemma 4 Edge 4B (thông minh hơn)
|
||||
3 → Nhập đường dẫn tùy chỉnh
|
||||
```
|
||||
|
||||
Sau khi thay đổi, restart service:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
**Cách 2: Chỉ định model cụ thể**
|
||||
|
||||
Chỉnh sửa file service:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/litert-lm.service
|
||||
```
|
||||
|
||||
Sửa dòng `ExecStart`:
|
||||
|
||||
```ini
|
||||
ExecStart=/usr/bin/python3 /path/to/server.py --model /path/to/model.litertlm
|
||||
```
|
||||
|
||||
Sau đó:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
### Cấu hình Port
|
||||
|
||||
Chỉnh sửa file service:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/litert-lm.service
|
||||
```
|
||||
|
||||
Sửa dòng `ExecStart`:
|
||||
|
||||
```ini
|
||||
# Chỉ port
|
||||
ExecStart=/usr/bin/python3 /path/to/server.py --port 8080
|
||||
|
||||
# Hoặc kết hợp với model
|
||||
ExecStart=/usr/bin/python3 /path/to/server.py --port 8080 --model /path/to/model.litertlm
|
||||
```
|
||||
|
||||
Sau đó:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
## 🎮 Quản lý Service
|
||||
|
||||
### Xem trạng thái
|
||||
```bash
|
||||
sudo systemctl status litert-lm
|
||||
```
|
||||
|
||||
### Dừng service
|
||||
```bash
|
||||
sudo systemctl stop litert-lm
|
||||
```
|
||||
|
||||
### Khởi động service
|
||||
```bash
|
||||
sudo systemctl start litert-lm
|
||||
```
|
||||
|
||||
### Khởi động lại service
|
||||
```bash
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
### Xem logs realtime
|
||||
```bash
|
||||
sudo journalctl -u litert-lm -f
|
||||
```
|
||||
|
||||
### Xem logs từ đầu
|
||||
```bash
|
||||
sudo journalctl -u litert-lm
|
||||
```
|
||||
|
||||
### Xem logs 100 dòng cuối
|
||||
```bash
|
||||
sudo journalctl -u litert-lm -n 100
|
||||
```
|
||||
|
||||
### Gỡ cài đặt service
|
||||
```bash
|
||||
sudo bash uninstall_service.sh
|
||||
```
|
||||
|
||||
## 📊 Kiểm tra Service
|
||||
|
||||
### Kiểm tra service đang chạy
|
||||
|
||||
```bash
|
||||
sudo systemctl is-active litert-lm
|
||||
```
|
||||
|
||||
### Kiểm tra server hoạt động
|
||||
|
||||
Mở trình duyệt: http://localhost:8000 (hoặc port đã cấu hình)
|
||||
|
||||
Hoặc test API:
|
||||
```bash
|
||||
curl http://localhost:8000/info
|
||||
```
|
||||
|
||||
## 🔧 Cấu hình nâng cao
|
||||
|
||||
### Chỉnh sửa service file
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/litert-lm.service
|
||||
```
|
||||
|
||||
Sau khi chỉnh sửa:
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
### Thay đổi user chạy service
|
||||
|
||||
Trong file service, sửa dòng:
|
||||
```ini
|
||||
User=your_username
|
||||
```
|
||||
|
||||
### Thêm biến môi trường
|
||||
|
||||
Thêm vào section `[Service]`:
|
||||
```ini
|
||||
Environment="VARIABLE_NAME=value"
|
||||
Environment="ANOTHER_VAR=value"
|
||||
```
|
||||
|
||||
### Giới hạn tài nguyên
|
||||
|
||||
Thêm vào section `[Service]`:
|
||||
```ini
|
||||
# Giới hạn memory (ví dụ: 2GB)
|
||||
MemoryLimit=2G
|
||||
|
||||
# Giới hạn CPU (ví dụ: 50%)
|
||||
CPUQuota=50%
|
||||
```
|
||||
|
||||
## 🔍 Troubleshooting
|
||||
|
||||
### Service không khởi động
|
||||
|
||||
1. Kiểm tra logs:
|
||||
```bash
|
||||
sudo journalctl -u litert-lm -n 50
|
||||
```
|
||||
|
||||
2. Kiểm tra file service:
|
||||
```bash
|
||||
sudo systemctl cat litert-lm
|
||||
```
|
||||
|
||||
3. Kiểm tra syntax:
|
||||
```bash
|
||||
sudo systemd-analyze verify /etc/systemd/system/litert-lm.service
|
||||
```
|
||||
|
||||
### Thay đổi đường dẫn hoặc cấu hình
|
||||
|
||||
Chỉnh sửa file service:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/litert-lm.service
|
||||
```
|
||||
|
||||
Sửa các dòng:
|
||||
- `WorkingDirectory=` - Đường dẫn thư mục project
|
||||
- `ExecStart=` - Lệnh khởi động với tham số
|
||||
- `StandardInput=` - Đường dẫn file config
|
||||
|
||||
Sau đó:
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
### Service bị crash
|
||||
|
||||
Service sẽ tự động restart sau 10 giây nhờ cấu hình:
|
||||
```ini
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
```
|
||||
|
||||
### Thay đổi port
|
||||
|
||||
Sử dụng tham số `--port`:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/litert-lm.service
|
||||
```
|
||||
|
||||
Sửa dòng `ExecStart`:
|
||||
```ini
|
||||
ExecStart=/usr/bin/python3 /path/to/server.py --port 8080
|
||||
```
|
||||
|
||||
Sau đó:
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
### Permission denied
|
||||
|
||||
Đảm bảo user trong service file có quyền đọc/ghi thư mục:
|
||||
```bash
|
||||
sudo chown -R your_username:your_username /path/to/litert-lm-orangepi
|
||||
```
|
||||
|
||||
## 🔐 Bảo mật
|
||||
|
||||
### Chạy service với user riêng
|
||||
|
||||
Tạo user chuyên dụng:
|
||||
```bash
|
||||
sudo useradd -r -s /bin/false litert-lm
|
||||
sudo chown -R litert-lm:litert-lm /path/to/litert-lm-orangepi
|
||||
```
|
||||
|
||||
Sửa trong service file:
|
||||
```ini
|
||||
User=litert-lm
|
||||
Group=litert-lm
|
||||
```
|
||||
|
||||
### Giới hạn quyền truy cập
|
||||
|
||||
Thêm vào section `[Service]`:
|
||||
```ini
|
||||
# Chỉ đọc /usr, /boot, /etc
|
||||
ProtectSystem=full
|
||||
|
||||
# Không cho ghi vào /home
|
||||
ProtectHome=true
|
||||
|
||||
# Không cho truy cập /dev
|
||||
PrivateDevices=true
|
||||
```
|
||||
|
||||
### Firewall
|
||||
|
||||
Chỉ cho phép truy cập local:
|
||||
```bash
|
||||
sudo ufw allow from 127.0.0.1 to any port 8000
|
||||
```
|
||||
|
||||
Hoặc cho phép từ mạng nội bộ:
|
||||
```bash
|
||||
sudo ufw allow from 192.168.1.0/24 to any port 8000
|
||||
```
|
||||
|
||||
## 📦 Cấu trúc Files
|
||||
|
||||
```
|
||||
litert-lm-orangepi/
|
||||
├── server.py # Server chính (hỗ trợ --port và --model)
|
||||
├── install_service.sh # Script cài đặt service
|
||||
├── uninstall_service.sh # Script gỡ cài đặt service
|
||||
├── litert-lm.service # Template systemd service
|
||||
├── service_config.txt # Config model (1/2/3) - dùng khi không chỉ định --model
|
||||
├── SERVICE_README.md # File này
|
||||
└── models/ # Thư mục chứa models
|
||||
├── gemma-4-E2B-it.litertlm
|
||||
└── gemma-4-E4B-it.litertlm
|
||||
```
|
||||
|
||||
## 🎯 Auto-start khi khởi động
|
||||
|
||||
Service đã được cấu hình để tự động khởi động:
|
||||
|
||||
```bash
|
||||
# Kiểm tra
|
||||
sudo systemctl is-enabled litert-lm
|
||||
|
||||
# Tắt auto-start
|
||||
sudo systemctl disable litert-lm
|
||||
|
||||
# Bật auto-start
|
||||
sudo systemctl enable litert-lm
|
||||
```
|
||||
|
||||
## 📊 Monitoring
|
||||
|
||||
### Xem resource usage
|
||||
|
||||
```bash
|
||||
systemctl status litert-lm
|
||||
```
|
||||
|
||||
### Xem chi tiết hơn
|
||||
|
||||
```bash
|
||||
sudo systemd-cgtop
|
||||
```
|
||||
|
||||
### Xem tất cả services
|
||||
|
||||
```bash
|
||||
systemctl list-units --type=service
|
||||
```
|
||||
|
||||
## ✅ Checklist sau khi cài đặt
|
||||
|
||||
- [ ] Service đã được cài đặt: `systemctl list-units | grep litert-lm`
|
||||
- [ ] Service đang chạy: `systemctl is-active litert-lm`
|
||||
- [ ] Có thể truy cập http://localhost:8000 (hoặc port đã cấu hình)
|
||||
- [ ] API `/info` trả về thông tin model
|
||||
- [ ] Service tự động khởi động: `systemctl is-enabled litert-lm`
|
||||
- [ ] Logs hiển thị bình thường: `journalctl -u litert-lm -n 20`
|
||||
|
||||
## 🆘 Các lệnh hữu ích
|
||||
|
||||
```bash
|
||||
# Xem toàn bộ config của service
|
||||
sudo systemctl show litert-lm
|
||||
|
||||
# Xem dependencies
|
||||
systemctl list-dependencies litert-lm
|
||||
|
||||
# Xem thời gian khởi động
|
||||
systemd-analyze blame
|
||||
|
||||
# Test service file syntax
|
||||
sudo systemd-analyze verify /etc/systemd/system/litert-lm.service
|
||||
|
||||
# Xem logs từ boot cuối cùng
|
||||
sudo journalctl -u litert-lm -b
|
||||
|
||||
# Xem logs trong khoảng thời gian
|
||||
sudo journalctl -u litert-lm --since "1 hour ago"
|
||||
sudo journalctl -u litert-lm --since "2024-01-01" --until "2024-01-02"
|
||||
|
||||
# Export logs ra file
|
||||
sudo journalctl -u litert-lm > litert-lm.log
|
||||
```
|
||||
|
||||
## 🔄 Update service
|
||||
|
||||
Khi có thay đổi code trong `server.py`:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart litert-lm
|
||||
```
|
||||
|
||||
Không cần cài đặt lại service.
|
||||
|
||||
## 📝 Ghi chú
|
||||
|
||||
- Service sử dụng `StandardInput=file:` để tự động truyền model choice từ `service_config.txt` (nếu không dùng `--model`)
|
||||
- Logs được quản lý bởi systemd journal (journalctl)
|
||||
- Service tự động restart nếu bị crash
|
||||
- Có thể chạy nhiều instance với port khác nhau bằng cách tạo nhiều service file
|
||||
- Tham số `--port` và `--model` cho phép linh hoạt cấu hình mà không cần chỉnh sửa code
|
||||
Reference in New Issue
Block a user