สิ่งที่ต้องเตรียม
เซิร์ฟเวอร์
- เซิร์ฟเวอร์หลัก (Master Server): 1 เครื่อง (สำหรับ Load Balancer และฐานข้อมูล)
- เซิร์ฟเวอร์ Ollama: 3 เครื่องขึ้นไป (สำหรับการประมวลผลภาษา)
- เซิร์ฟเวอร์ Open WebUI: 2 เครื่องขึ้นไป (สำหรับส่วนติดต่อผู้ใช้)
สเปกเซิร์ฟเวอร์
- ระบบปฏิบัติการ: Ubuntu 20.04 LTS หรือใหม่กว่า
- CPU: 16 cores ขึ้นไป (สำหรับแต่ละเครื่อง)
- RAM: 64 GB ขึ้นไป (สำหรับแต่ละเครื่อง)
- Storage: SSD 500 GB ขึ้นไป (สำหรับแต่ละเครื่อง)
ซอฟต์แวร์ที่จำเป็น
- Docker และ Docker Compose
- Nginx (สำหรับ Load Balancer)
- Redis (สำหรับจัดการเซสชันผู้ใช้)
- PostgreSQL หรือ MongoDB (สำหรับเก็บประวัติการสนทนา)
ขั้นตอนการติดตั้ง
1. ติดตั้ง Docker และ Docker Compose
ทำบนทุกเครื่อง:
# อัปเดตระบบ
sudo apt-get update && sudo apt-get upgrade -y
# ติดตั้ง Docker
sudo apt-get install docker.io -y
# ติดตั้ง Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')" /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. ติดตั้ง Redis และฐานข้อมูล (PostgreSQL)
ทำบนเครื่อง Master Server:
# ติดตั้ง Redis
sudo apt-get install redis-server -y
# ติดตั้ง PostgreSQL
sudo apt-get install postgresql postgresql-contrib -y
# สร้างฐานข้อมูลและผู้ใช้
sudo -u postgres psql
CREATE DATABASE ollama_db;
CREATE USER your_db_user WITH PASSWORD 'your_db_password';
GRANT ALL PRIVILEGES ON DATABASE ollama_db TO your_db_user;
3. ติดตั้ง Ollama (Distributed Model Serving)
ทำบนเครื่อง Ollama ทุกเครื่อง:
# ดาวน์โหลดและติดตั้ง Ollama
git clone https://github.com/your-repo/ollama.git
cd ollama
# สร้างไฟล์ docker-compose.yml
nano docker-compose.yml
เพิ่มคอนฟิกต่อไปนี้ใน docker-compose.yml
:
version: '3.8'
services:
ollama:
image: your-ollama-image:latest
container_name: ollama
ports:
- "8001:8000" # เปลี่ยนพอร์ตตามเครื่อง (8002, 8003 สำหรับเครื่องอื่น)
environment:
- REDIS_HOST=redis://<MASTER_SERVER_IP>:6379
- DB_HOST=<MASTER_SERVER_IP>
- DB_USER=your_db_user
- DB_PASSWORD=your_db_password
- MODEL_SERVER=<MODEL_SERVER_IP>:9000 # ชี้ไปที่ Model Server
networks:
- ollama_network
networks:
ollama_network:
driver: bridge
รัน Ollama:
docker-compose up -d
4. ติดตั้ง Model Server
ทำบนเครื่องที่คุณเลือกเป็น Model Server:
# ดาวน์โหลดและติดตั้ง Model Server
git clone https://github.com/your-repo/model-server.git
cd model-server
# สร้างไฟล์ docker-compose.yml
nano docker-compose.yml
เพิ่มคอนฟิกต่อไปนี้ใน docker-compose.yml
:
version: '3.8'
services:
model_server:
image: your-model-server-image:latest
container_name: model_server
ports:
- "9000:9000"
volumes:
- ./models:/app/models # โฟลเดอร์สำหรับเก็บโมเดล
networks:
- model_network
networks:
model_network:
driver: bridge
รัน Model Server:
docker-compose up -d
5. ติดตั้ง Open WebUI
ทำบนเครื่อง Open WebUI ทุกเครื่อง:
# ดาวน์โหลดและติดตั้ง Open WebUI
git clone https://github.com/your-repo/open-webui.git
cd open-webui
# สร้างไฟล์ docker-compose.yml
nano docker-compose.yml
เพิ่มคอนฟิกต่อไปนี้ใน docker-compose.yml
:
version: '3.8'
services:
webui:
image: your-webui-image:latest
container_name: webui
ports:
- "8080:80" # เปลี่ยนพอร์ตตามเครื่อง (8081, 8082 สำหรับเครื่องอื่น)
environment:
- OLLAMA_HOST=<MASTER_SERVER_IP>
- REDIS_HOST=redis://<MASTER_SERVER_IP>:6379
- DB_HOST=<MASTER_SERVER_IP>
- DB_USER=your_db_user
- DB_PASSWORD=your_db_password
networks:
- webui_network
networks:
webui_network:
driver: bridge
รัน Open WebUI:
docker-compose up -d
6. ติดตั้ง Load Balancer ด้วย Nginx
ทำบนเครื่อง Master Server:
# ติดตั้ง Nginx
sudo apt-get install nginx -y
# สร้างไฟล์คอนฟิก Nginx
sudo nano /etc/nginx/conf.d/load-balancer.conf
เพิ่มคอนฟิกต่อไปนี้ในไฟล์ load-balancer.conf
:
upstream ollama_servers {
server <OLLAMA_SERVER_1_IP>:8001;
server <OLLAMA_SERVER_2_IP>:8002;
server <OLLAMA_SERVER_3_IP>:8003;
}
upstream webui_servers {
server <WEBUI_SERVER_1_IP>:8080;
server <WEBUI_SERVER_2_IP>:8081;
}
server {
listen 80;
server_name your-domain.com;
location /ollama {
proxy_pass http://ollama_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://webui_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
รีสตาร์ท Nginx:
sudo systemctl restart nginx
7. การจัดการเซสชันผู้ใช้
- Redis: ใช้เก็บ session ID ของผู้ใช้
- ฐานข้อมูล: ใช้เก็บประวัติการสนทนา โดยใช้คอลัมน์ user_id และ session_id เพื่อเชื่อมโยงประวัติ
สรุป
ระบบนี้ประกอบด้วย:
- Ollama: 3 เครื่องขึ้นไป สำหรับการประมวลผลภาษา
- Open WebUI: 2 เครื่องขึ้นไป สำหรับส่วนติดต่อผู้ใช้
- Load Balancer: 1 เครื่อง สำหรับกระจายโหลด
- Redis และฐานข้อมูล: 1 เครื่อง สำหรับจัดการเซสชันและเก็บประวัติการสนทนา
- Model Server: 1 เครื่อง สำหรับให้บริการโมเดลภาษา
ด้วยการออกแบบนี้ คุณจะสามารถรองรับผู้ใช้งาน 1,000 คน และให้ผู้ใช้สามารถคุยเรื่องเดิมได้แม้เปลี่ยนเครื่อง