ติดตั้ง Ollama AI Chat
แบบทีละขั้นตอน
นำ AI ที่รันแบบ Local บนเซิร์ฟเวอร์มาใช้งานผ่านหน้าเว็บ — พร้อมบันทึกประวัติแชทลง MySQL ด้วย PHP
สร้างฐานข้อมูล MySQL
MySQLเข้า MySQL ด้วย root แล้วสร้างฐานข้อมูลพร้อมตารางสำหรับเก็บประวัติแชท
ข้อ 1.1 — เข้าสู่ MySQL:
mysql -u root -p
ข้อ 1.2 — สร้างฐานข้อมูลและตาราง (คัดลอกวางทั้งก้อนเลย):
CREATE DATABASE ollama_chat;
USE ollama_chat;
CREATE TABLE conversations (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
conversation_id INT NOT NULL,
role ENUM('user','assistant') NOT NULL,
content TEXT NOT NULL,
model VARCHAR(100) DEFAULT 'llama3.1:8b',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE
);
EXIT;
อธิบาย: ตาราง conversations เก็บหัวข้อแชทแต่ละสนทนา ตาราง messages เก็บข้อความทุกข้อ (ทั้งผู้ใช้และ AI) เชื่อมกันด้วย foreign key
อัปโหลดไฟล์โปรเจกต์
ไฟล์ไฟล์ทั้งหมดถูกรวบรวมไว้ใน คลิกเพื่อโหลดollama-chat.zip แล้ว — ไม่ต้องสร้างเอง
ข้อ 2.1 — ไฟล์ที่อยู่ใน ZIP:
ข้อ 2.2 — อัปโหลดไฟล์ ZIP ไปยังเซิร์ฟเวอร์:
ทางเลือกในการอัปโหลด: ใช้ SCP, SFTP, หรือ FileZilla — หรือหากมีไฟล์อยู่บนเซิร์ฟเวอร์แล้ว ข้ามข้อนี้ไปได้เลย
ollama-chat.zip
ไฟล์ ZIP อยู่บนเซิร์ฟเวอร์แล้ว — คลิกปุ่มด้านล่างเพื่อคัดลอกคำสั่งแตกไฟล์ไปรันใน Terminal
ข้อ 2.3 — คำสั่ง SCP สำหรับอัปโหลดจากเครื่องท้องถิ่น (รันจากเครื่องคุณ):
scp ollama-chat.zip user@IP_SERVER:/tmp/
ข้อ 2.4 — แตกไฟล์บนเซิร์ฟเวอร์ (รันบนเซิร์ฟเวอร์):
sudo mkdir -p /var/www/ollama-chat
sudo unzip /tmp/ollama-chat.zip -d /var/www/ollama-chat/
ls -la /var/www/ollama-chat/
ข้อ 2.5 — แก้ไขรหัสผ่านฐานข้อมูลใน config.php:
sudo nano /var/www/ollama-chat/config.php
จุดสำคัญ: ให้แก้บรรทัด DB_PASS ให้ตรงกับรหัสผ่าน MySQL ของคุณ — ถ้าไม่แก้ ระบบจะเชื่อมต่อฐานข้อมูลไม่ได้
ตั้งค่า Nginx
Nginxสร้างไฟล์ config สำหรับ Nginx ให้รู้จักโปรเจกต์นี้
ข้อ 3.1 — สร้างไฟล์ config:
sudo nano /etc/nginx/sites-available/ollama-chat
ข้อ 3.2 — วาง config นี้ลงไป:
server {
listen 80;
server_name _;
root /var/www/ollama-chat;
index index.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}
location ~ /config\.php$ {
deny all;
return 404;
}
location / {
try_files $uri $uri/ =404;
}
}
fastcgi_read_timeout 300 — สำคัญมาก เพราะ AI ตอบช้ากว่าหน้าเว็บปกติ ถ้าค่านี้ต่ำเกินไป Nginx จะตัดการเชื่อมต่อก่อน AI ตอบจบ
ข้อ 3.3 — เปิดใช้งานไซต์และลบ default:
sudo ln -s /etc/nginx/sites-available/ollama-chat /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
ข้อ 3.4 — ตรวจสอบ config และรีโหลด Nginx:
sudo nginx -t
sudo systemctl reload nginx
ถ้า nginx -t แสดง syntax is ok และ test is successful แสดงว่า config ถูกต้องพร้อมใช้งาน
ตั้งสิทธิ์ไฟล์
สิทธิ์ให้ PHP-FPM (ผู้ใช้ www-data) สามารถอ่านเขียนไฟล์ได้ แต่ปิดไม่ให้คนอื่นอ่าน config.php
sudo chown -R www-data:www-data /var/www/ollama-chat
sudo chmod -R 755 /var/www/ollama-chat
sudo chmod 640 /var/www/ollama-chat/config.php
ความปลอดภัย: config.php มีรหัสผ่านฐานข้อมูล — ตั้ง 640 ให้เฉพาะ www-data และ root อ่านได้ ปิดทาง Nginx ด้วย deny all ใน config ด้านบนแล้ว (ชั้นความปลอดภัยแบบ double)
ตรวจสอบและทดสอบ
ทดสอบตรวจสอบทีละบริการว่าทำงานปกติก่อนเปิดเว็บ
-
5.1ตรวจสอบ Ollama ทำงานอยู่
systemctl status ollama -
5.2ตรวจสอบ PHP-FPM ทำงานอยู่
systemctl status php8.3-fpm -
5.3ตรวจสอบ Nginx ทำงานอยู่
systemctl status nginx -
5.4ตรวจสอบ Ollama API ตอบ
curl http://localhost:11434ต้องได้รับข้อความ
Ollama is runningกลับมา -
5.5เปิดเบราว์เซอร์ทดสอบ
http://IP_ของเซิร์ฟเวอร์/
ถ้าหน้าเว็บขึ้นแต่ไม่มี Model ให้เลือก ให้ตรวจสอบว่า Ollama มี Model อยู่จริงด้วย ollama list — ถ้ายังไม่เคยดาวน์โหลด ให้รัน ollama run llama3.1:8b ก่อน
สรุปสถาปัตยกรรมระบบ
เมื่อทุกอย่างทำงาน ข้อมูลจะไหลเป็นลูกโซ่แบบนี้:
ตารางสรุปบริการที่ต้องทำงาน:
| บริการ | พอร์ต | หน้าที่ | ตรวจสอบด้วย |
|---|---|---|---|
| Nginx | :80 | ให้บริการหน้าเว็บ + proxy PHP | systemctl status nginx |
| PHP 8.3 FPM | socket | ประมวลผล backend, เรียก Ollama API | systemctl status php8.3-fpm |
| MySQL 8.3 | :3306 | เก็บประวัติแชท | systemctl status mysql |
| Ollama | :11434 | รัน AI Model แบบ Local | systemctl status ollama |
ถ้าอยากให้เครื่องอื่นใน LAN ใช้งานได้: ตรวจสอบว่า firewall เปิดพอร์ต 80 แล้วด้วย sudo ufw allow 80 — จากนั้นเปิด http://IPเซิร์ฟเวอร์/ จากเครื่องอื่นในเน็ตเวิร์คเดียวกันได้เลย