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