เนื้อหาในบทความนี้
สถานะบทความ
อัปเดตล่าสุด: กุมภาพันธ์ 2026 | ระดับความยาก: ระดับกลาง (Intermediate) | เวลาอ่าน: 45 นาที
ความต้องการพื้นฐาน: ความรู้พื้นฐานเกี่ยวกับ Linux, Network, และ Docker (แนะนำ)
ข้อควรระวังด้านความปลอดภัย
การเปิด Ollama ให้รับ connections จาก Remote อาจทำให้ Server ถูกเข้าถึงโดยไม่ได้รับอนุญาต หากไม่มีการป้องกันที่เหมาะสม เช่น Firewall, VPN, หรือ Authentication
แนะนำให้ใช้ VPN หรือ SSH Tunnel สำหรับการใช้งานจริงใน Production
โครงสร้างระบบ (Architecture)
Client-Server Architecture
คำอธิบายโครงสร้าง:
- Server: เครื่องที่มี GPU และรัน Ollama ฟังที่ port 11434
- Clients: เครื่องไคลเอ็นต์ที่ส่ง request ไปประมวลผลที่ Server
- Protocol: HTTP/REST API ผ่าน port 11434
1. ดาวน์โหลด Models
Server ดาวน์โหลดโมเดล LLM เช่น Qwen, Gemma, Llama จาก Ollama Library และเก็บไว้ในระบบ
2. Server ประมวลผล
Server รับ request จาก Client และใช้ GPU ในการ inference โมเดล AI และส่งผลลัพธ์กลับ
3. Client ใช้งาน
Client เชื่อมต่อผ่าน HTTP API ใช้ CLI, Python, Node.js หรือ OpenAI SDK เรียกใช้ได้จากที่ไหนก็ได้
สิ่งที่ต้องเตรียม (Prerequisites)
Hardware (Server)
- CPU: Intel i5 / AMD Ryzen 5 ขึ้นไป
- RAM: 16GB ขึ้นไป (32GB แนะนำ)
- GPU: NVIDIA RTX 3060+ (8GB VRAM)
- Storage: 50GB+ SSD
Software (Server)
- Ollama: เวอร์ชัน 0.1.0 ขึ้นไป
- OS: Ubuntu 22.04+, Debian 12+
- Docker: ทางเลือก สำหรับ container
- NVIDIA Driver: 525+ สำหรับ GPU
Network
- Port: เปิด TCP 11434
- LAN: อยู่ในวงเครือข่ายเดียวกัน
- IP: Static IP หรือ DHCP reservation
- VPN: แนะนำสำหรับ remote
การตั้งค่า Server (5 วิธี)
ตั้งค่า OLLAMA_HOST (แนะนำ)
วิธีที่ง่ายที่สุด - ตั้งค่า environment variable ก่อนรัน Ollama
# 1. ตรวจสอบว่า Ollama ถูกติดตั้งแล้ว
ollama --version
# 2. ตั้งค่า OLLAMA_HOST ให้รับ connections จากทุก interface
export OLLAMA_HOST=0.0.0.0:11434
# 3. เริ่ม Ollama Server
ollama serve
วิธีถาวร (Persistent)
เพิ่มใน system service เพื่อให้ค่าอยู่ถาวร:
# แก้ไข systemd service
sudo nano /etc/systemd/system/ollama.service
# เพิ่มบรรทัดใน [Service]:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
ExecStart=/usr/local/bin/ollama serve
# Reload และ restart
sudo systemctl daemon-reload
sudo systemctl restart ollama
# ตรวจสอบสถานะ
sudo systemctl status ollama
ตรวจสอบว่าทำงานถูกต้อง
# ดูว่า Ollama กำลังรันที่ port ไหน
ss -tuln | grep 11434
# ควรเห็น output ประมาณนี้:
# tcp LISTEN 0 4096 0.0.0.0:11434 0.0.0.0:*
ใช้งานผ่าน Docker
วิธีที่ดีที่สุดสำหรับ isolation และ portability
# รัน Ollama Docker Container
docker run -d \
--name ollama \
-p 11434:11434 \
-v ollama:/root/.ollama \
-e OLLAMA_HOST=0.0.0.0 \
--restart always \
ollama/ollama:latest
# สำหรับ NVIDIA GPU (แนะนำ)
docker run -d \
--name ollama \
--gpus all \
-p 11434:11434 \
-v ollama:/root/.ollama \
-e OLLAMA_HOST=0.0.0.0 \
--restart always \
ollama/ollama:latest
Docker Compose (แนะนำ)
# docker-compose.yml
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
environment:
- OLLAMA_HOST=0.0.0.0
volumes:
- ollama:/root/.ollama
restart: always
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama:
SSH Tunnel (ปลอดภัยที่สุด)
วิธีที่ปลอดภัยที่สุด - ไม่ต้องเปิด port สู่ภายนอก
# สร้าง SSH Tunnel จาก Client ไปยัง Server
# Syntax: ssh -L [local_port]:[remote_host]:[remote_port] user@server_ip
# ตัวอย่าง: Forward local port 11434 ไปยัง server
ssh -L 11434:localhost:11434 user@192.168.1.100
# รันใน background (-f -N)
ssh -f -N -L 11434:localhost:11434 user@192.168.1.100
# ตอนนี้สามารถเข้าถึง Ollama ได้ที่ localhost:11434 บนเครื่อง Client
ollama list # จะเชื่อมต่อผ่าน tunnel
เปิด Firewall
เปิด port 11434 ใน firewall สำหรับการเข้าถึงจาก network
# เปิด port 11434 สำหรับทุก IP
sudo ufw allow 11434/tcp
# เปิดเฉพาะ IP เฉพาะเจาะจง (แนะนำ)
sudo ufw allow from 192.168.1.0/24 to any port 11434
# ตรวจสอบสถานะ
sudo ufw status
# สำหรับ firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=11434/tcp
sudo firewall-cmd --reload
Reverse Proxy (Nginx)
ใช้ Nginx reverse proxy พร้อม SSL สำหรับการเข้าถึงแบบปลอดภัย
server {
listen 80;
server_name ollama.yourdomain.com;
location / {
proxy_pass http://localhost:11434;
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;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# สำหรับ HTTPS (แนะนำ)
# sudo certbot --nginx -d ollama.yourdomain.com
การใช้งานจาก Client (4 วิธี)
หมายเหตุ: ตัวอย่างด้านล่างสมมติว่า Server IP คือ 192.168.1.100
Ollama CLI
ใช้งานผ่าน command line โดยตรง
# วิธีที่ 1: ตั้งค่า environment variable แบบชั่วคราว
export OLLAMA_HOST=http://192.168.1.100:11434
ollama list
ollama run qwen:7b
# วิธีที่ 2: ตั้งค่าแบบครั้งเดียว
OLLAMA_HOST=http://192.168.1.100:11434 ollama run qwen:7b
# วิธีที่ 3: ตั้งค่าถาวรใน ~/.bashrc
echo 'export OLLAMA_HOST=http://192.168.1.100:11434' >> ~/.bashrc
source ~/.bashrc
# ทดสอบ
ollama list
Python Client
ใช้ Python SDK สำหรับการพัฒนาแอปพลิเคชัน
# ติดตั้ง ollama Python library
pip install ollama
import ollama
# สร้าง client ที่เชื่อมต่อกับ remote server
client = ollama.Client(host='http://192.168.1.100:11434')
# ดูรายการโมเดลที่มี
models = client.list()
print('Available models:')
for model in models['models']:
print(f" - {model['name']}")
# รันโมเดล
response = client.generate(
model='qwen:7b',
prompt='สวัสดีครับ ช่วยอธิบายเกี่ยวกับ AI หน่อย'
)
print(response['response'])
# ใช้ chat API
messages = [
{'role': 'user', 'content': 'อธิบาย Docker แบบสั้นๆ'}
]
response = client.chat(model='qwen:7b', messages=messages)
print(response['message']['content'])
Node.js Client
ใช้ ollama-js สำหรับโปรเจค JavaScript/TypeScript
# ติดตั้ง ollama-js
npm install ollama
# หรือ
yarn add ollama
import ollama from 'ollama'
// ตั้งค่า remote host
const client = new ollama.Ollama({
host: 'http://192.168.1.100:11434'
})
// ดูรายการโมเดล
const models = await client.list()
console.log('Available models:', models.models)
// Generate text
const response = await client.generate({
model: 'qwen:7b',
prompt: 'สวัสดีครับ ช่วยอธิบายเกี่ยวกับ Kubernetes หน่อย'
})
console.log(response.response)
// Chat API
const chatResponse = await client.chat({
model: 'qwen:7b',
messages: [{ role: 'user', content: 'อธิบาย Docker แบบสั้นๆ' }]
})
console.log(chatResponse.message.content)
OpenAI Compatible API
ใช้ OpenAI SDK ที่มีอยู่แล้ว เปลี่ยนแค่ base_url
from openai import OpenAI
# ใช้ OpenAI SDK เชื่อมต่อกับ Ollama
client = OpenAI(
base_url='http://192.168.1.100:11434/v1',
api_key='not-needed' # Ollama ไม่ต้องใช้ API key
)
# ใช้งานเหมือน OpenAI API ปกติ
response = client.chat.completions.create(
model='qwen:7b',
messages=[
{'role': 'system', 'content': 'คุณเป็นผู้ช่วย AI ที่เป็นประโยชน์'},
{'role': 'user', 'content': 'สวัสดีครับ ช่วยอธิบายเกี่ยวกับ Machine Learning หน่อย'}
]
)
print(response.choices[0].message.content)
# Streaming response
stream = client.chat.completions.create(
model='qwen:7b',
messages=[{'role': 'user', 'content': 'เล่าเรื่องสั้นให้หน่อย'}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='')
API Endpoints
Ollama มี REST API endpoints ที่สามารถเรียกใช้ได้โดยตรง:
| Method | Endpoint | Description | Example |
|---|---|---|---|
| GET | /api/tags | รายการโมเดลที่มี | curl http://host:11434/api/tags |
| POST | /api/generate | สร้าง text จาก prompt | {"model": "qwen:7b", "prompt": "..."} |
| POST | /api/chat | Chat completion | {"model": "qwen:7b", "messages": [...]} |
| POST | /api/embeddings | สร้าง embeddings | {"model": "qwen:7b", "prompt": "..."} |
| POST | /api/pull | ดาวน์โหลดโมเดล | {"name": "qwen:7b"} |
| GET | /v1/* | OpenAI compatible | /v1/chat/completions |
ตัวอย่างการใช้ curl
# ดูรายการโมเดล
curl http://192.168.1.100:11434/api/tags
# Generate text
curl -X POST http://192.168.1.100:11434/api/generate \
-H "Content-Type: application/json" \
-d '{"model": "qwen:7b", "prompt": "สวัสดี"}'
# Chat completion
curl -X POST http://192.168.1.100:11434/api/chat \
-H "Content-Type: application/json" \
-d '{"model": "qwen:7b", "messages": [{"role": "user", "content": "สวัสดี"}]}'
ความปลอดภัย (Security)
คำแนะนำด้านความปลอดภัย
- • ใช้ SSH Tunnel หรือ VPN
- • จำกัด IP ที่เข้าถึงได้
- • ใช้ Reverse Proxy พร้อม SSL
- • เปิดเฉพาะ private network
- • เปิด port สู่ internet โดยตรง
- • ไม่มี firewall หรือ authentication
- • ใช้ค่า default โดยไม่ปรับแต่ง
- • เปิดให้ทุก IP เข้าถึงได้
เปรียบเทียบวิธีเชื่อมต่อตามความปลอดภัย
| วิธี | ความปลอดภัย | ความยากง่าย | เหมาะสำหรับ |
|---|---|---|---|
| SSH Tunnel | สูงมาก | กลาง | Development, Personal use |
| VPN | สูงมาก | ยาก | Enterprise, Team |
| Reverse Proxy + SSL | สูง | ยาก | Public access, Production |
| Firewall (IP restrict) | กลาง | ง่าย | LAN, Trusted network |
| Open to all | ต่ำ | ง่ายมาก | ไม่แนะนำ! |
ทดสอบการเชื่อมต่อ
# 1. ทดสอบว่า Ollama server รันอยู่
curl http://192.168.1.100:11434/api/tags
# ควรได้ JSON response ประมาณนี้:
# {"models": [{"name": "qwen:7b", ...}]}
# 2. ทดสอบด้วย ollama CLI จาก Client
OLLAMA_HOST=http://192.168.1.100:11434 ollama list
# 3. ทดสอบ generate
curl -X POST http://192.168.1.100:11434/api/generate \
-H "Content-Type: application/json" \
-d '{"model": "qwen:7b", "prompt": "สวัสดี", "stream": false}'
# 4. ทดสอบ chat
curl -X POST http://192.168.1.100:11434/api/chat \
-H "Content-Type: application/json" \
-d '{"model": "qwen:7b", "messages": [{"role": "user", "content": "สวัสดี"}], "stream": false}'
# 5. ทดสอบ OpenAI compatible endpoint
curl http://192.168.1.100:11434/v1/models
การแก้ไขปัญหา (Troubleshooting)
Connection refused
ไม่สามารถเชื่อมต่อกับ Ollama server ได้
สาเหตุที่เป็นไปได้:
- • Ollama ไม่ได้รันอยู่ - ตรวจสอบด้วย
sudo systemctl status ollama - • OLLAMA_HOST ไม่ได้ตั้งค่า - ตรวจสอบด้วย
echo $OLLAMA_HOST - • Firewall บล็อก port - ตรวจสอบด้วย
sudo ufw status - • IP address ผิด - ตรวจสอบด้วย
ip addr show
Model not found
โมเดลที่ต้องการใช้ไม่มีใน server
วิธีแก้:
# ดาวน์โหลดโมเดลใหม่
ollama pull qwen:7b
# หรือผ่าน API
curl -X POST http://localhost:11434/api/pull \
-H "Content-Type: application/json" \
-d '{"name": "qwen:7b"}'
Out of memory
GPU หรือ RAM ไม่เพียงพอ
วิธีแก้:
- • ใช้โมเดลขนาดเล็กลง เช่น
qwen:1.8b - • ใช้ quantization สูงขึ้น เช่น
qwen:7b-q4_0 - • เพิ่ม swap space สำหรับ CPU inference
- • ปิด applications อื่นๆ ที่ใช้ GPU/RAM
Slow response
การตอบสนองช้าเกินไป
วิธีแก้:
- • ตรวจสอบว่า GPU ถูกใช้งาน -
nvidia-smi - • ลด context length ใน request
- • ใช้โมเดลขนาดเล็กลง
- • ตรวจสอบ network latency ระหว่าง client-server
สรุป
สิ่งที่ได้เรียนรู้
ตั้งค่า Ollama server ให้รับ remote connections ได้ 5 วิธี
เชื่อมต่อจาก Client ได้ 4 วิธี (CLI, Python, Node.js, OpenAI SDK)
ความปลอดภัยและวิธีป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต
REST API endpoints และ OpenAI compatible API
ตอนนี้คุณสามารถใช้งาน AI จากเครื่องไหนก็ได้ในเครือข่ายได้แล้ว!