ได้ครับ ถ้าคุณต้องการทำ Ubuntu Server 24.04 บน RPi 4B ให้เป็น server คล้าย Lightsail และมีชุดนี้:
Ubuntu 24.04 LTS ├── Node.js ├── PM2 ├── Nginx ├── MySQL └── SSH
ผมแนะนำติดตั้งตามลำดับนี้ เพื่อไม่ให้ config ชนกัน
1. Update Ubuntu
sudo apt update sudo apt upgrade -y
ติดตั้งเครื่องมือพื้นฐาน:
sudo apt install -y curl wget git unzip vim htop ca-certificates
ตรวจ Ubuntu:
lsb_release -a
2. ตั้ง Timezone เป็น Thailand
sudo timedatectl set-timezone Asia/Bangkok
ตรวจ:
timedatectl
ควรเห็น:
Time zone: Asia/Bangkok
3. ติดตั้ง Node.js
ผมแนะนำ Node.js LTS ไม่ควรใช้ version จาก apt ของ Ubuntu ถ้าคุณต้องการ environment ใกล้กับ server production
ติดตั้ง NodeSource:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
แล้ว:
sudo apt install -y nodejs
ตรวจ:
node -v npm -v
เช่น:
v22.x.x 10.x.x
4. ติดตั้ง PM2
PM2 จะทำให้ Node.js application ทำงานตลอด แม้ SSH ออกจากเครื่องแล้ว
sudo npm install -g pm2
ตรวจ:
pm2 -v
5. ติดตั้ง MySQL
sudo apt install -y mysql-server
เปิดให้เริ่มอัตโนมัติ:
sudo systemctl enable mysql sudo systemctl start mysql
ตรวจ:
sudo systemctl status mysql
ต้องเป็น:
Active: active (running)
6. ตั้งค่า MySQL
รัน:
sudo mysql_secure_installation
ระบบจะถามหลายข้อ
สำหรับ Server ผมแนะนำ:
VALIDATE PASSWORD COMPONENT → Yes Remove anonymous users → Yes Disallow root login remotely → Yes Remove test database → Yes Reload privilege tables → Yes
จากนั้นเข้า MySQL:
sudo mysql
7. สร้าง Database
ตัวอย่างสมมุติ application ชื่อ chim:
CREATE DATABASE chim CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
สร้าง user:
CREATE USER 'chimuser'@'localhost' IDENTIFIED BY 'ใส่รหัสผ่านที่แข็งแรง';
ให้สิทธิ์:
GRANT ALL PRIVILEGES ON chim.* TO 'chimuser'@'localhost';
ใช้:
FLUSH PRIVILEGES;
ออก:
EXIT;
ทดสอบ:
mysql -u chimuser -p chim
8. ติดตั้ง Nginx
sudo apt install -y nginx
เปิด auto start:
sudo systemctl enable nginx sudo systemctl start nginx
ตรวจ:
sudo systemctl status nginx
จาก PC เปิด:
http://192.168.1.90
ควรเห็นหน้า:
Welcome to nginx!
9. เปิด Firewall
ติดตั้ง UFW:
sudo apt install -y ufw
ก่อนเปิด firewall ต้องอนุญาต SSH ก่อน
sudo ufw allow OpenSSH
HTTP:
sudo ufw allow 80/tcp
HTTPS:
sudo ufw allow 443/tcp
เปิด:
sudo ufw enable
ตรวจ:
sudo ufw status
ควรประมาณ:
22/tcp ALLOW 80/tcp ALLOW 443/tcp ALLOW
ไม่จำเป็นต้องเปิด port:
3306
เพราะเราจะให้ Node.js ติดต่อ MySQL ผ่าน localhost
10. สร้าง Node.js Application
สมมุติ application อยู่:
/home/rpi4ubuntu/app
สร้าง:
mkdir -p ~/app cd ~/app
สร้าง:
nano server.js
ตัวอย่าง:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('RPi Node.js Server OK\n');
});
server.listen(3000, '127.0.0.1', () => {
console.log('Server running on port 3000');
});
ทดลอง:
node server.js
จาก RPi:
curl http://127.0.0.1:3000
ควรได้:
RPi Node.js Server OK
กด:
Ctrl+C
เพื่อหยุด
11. ให้ PM2 จัดการ Node.js
รัน:
cd ~/app pm2 start server.js --name chim-server
ตรวจ:
pm2 status
จะเห็นประมาณ:
┌────┬──────────────┬─────────┬──────┐ │ id │ name │ status │ cpu │ ├────┼──────────────┼─────────┼──────┤ │ 0 │ chim-server │ online │ ... │ └────┴──────────────┴─────────┴──────┘
12. ให้ PM2 Start หลัง Reboot
สำคัญมากสำหรับ Server
pm2 startup
มันจะให้คำสั่งประมาณ:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u rpi4ubuntu --hp /home/rpi4ubuntu
ให้ copy คำสั่งที่ PM2 แสดงออกมา แล้วรัน
จากนั้น:
pm2 save
ตอนนี้:
Power ON ↓ Ubuntu ↓ Network ↓ MySQL ↓ Nginx ↓ PM2 ↓ Node.js
สามารถ reboot ทดสอบได้:
sudo reboot
หลังกลับมา:
pm2 status
Node.js ควรเป็น:
online
13. ให้ Nginx เป็น Reverse Proxy
นี่เป็นส่วนสำคัญมาก
ตอนนี้ Node.js:
127.0.0.1:3000
เราไม่ควรเปิด 3000 ออก Internet โดยตรง
ให้ใช้:
Internet
│
▼
Nginx :80
│
▼
Node.js :3000
│
▼
MySQL
สร้าง config:
sudo nano /etc/nginx/sites-available/chim
ใส่:
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
}
}
เปิด site:
sudo ln -s /etc/nginx/sites-available/chim /etc/nginx/sites-enabled/chim
ลบ default:
sudo rm /etc/nginx/sites-enabled/default
ตรวจ config:
sudo nginx -t
ต้องได้:
syntax is ok test is successful
reload:
sudo systemctl reload nginx
14. ทดสอบ
จาก Windows:
http://192.168.1.90
ควรได้:
RPi Node.js Server OK
แปลว่า:
Windows │ │ HTTP :80 ▼ Nginx │ │ proxy ▼ Node.js :3000
ทำงานแล้วครับ
15. สถาปัตยกรรมที่ได้
สุดท้าย RPi ของคุณจะเป็นแบบนี้:
Raspberry Pi 4B
Ubuntu 24.04 ARM64
│
┌────────────────┼────────────────┐
│ │ │
SSH Nginx MySQL
│ │
│ :80/443
│ │
│ ▼
│ Node.js
│ │
│ PM2
│
▼
rpi4ubuntu
และตอน Boot:
Power ON
↓
Ubuntu 24.04
↓
Network
↓
SSH ────────────────────┐
↓ │
MySQL │
↓ │
Nginx │
↓ │
PM2 │
↓ │
Node.js │
│
▼
ssh rpi4ubuntu@192.168.1.90
ลำดับที่ผมแนะนำให้ทำจริง
อย่าติดตั้งทุกอย่างรวดเดียว ให้ทำตามนี้:
1. Ubuntu update 2. Network / Static IP 3. SSH 4. MySQL 5. Node.js 6. PM2 7. Nginx 8. Firewall 9. Node.js application 10. PM2 startup 11. Nginx reverse proxy 12. HTTPS 13. Backup MySQL