ได้ครับ ถ้าคุณต้องการทำ 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