Files
2026-04-20 20:59:51 +07:00

416 lines
8.2 KiB
Markdown

# 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``--model` cho phép linh hoạt cấu hình mà không cần chỉnh sửa code