
การ Deploy แอปพลิเคชัน Node.js เมื่อก่อนจำเป็นต้องเช่า VPS เพื่อได้ root access ในการติดตั้ง Node.js runtime และจัดการ process ด้วยตัวเอง อย่างไรก็ตาม เทคโนโลยี Phusion Passenger ได้เปลี่ยนแปลงสถานการณ์นี้ DirectAdmin ซึ่งเป็น control panel ที่ AsiaGB ใช้ได้บูรณาการ Passenger มาแล้ว ช่วยให้ผู้ใช้งาน Shared Hosting สามารถ Deploy Node.js app ได้ผ่านหน้า web UI เหมือนเดียวกับการสร้างเว็บไซต์ PHP ทั่วไป
บทความนี้จะอธิบายว่า Phusion Passenger คืออะไร วิธีใช้ DirectAdmin Setup Node.js App feature อย่างไร จำกัดความมีอะไร และเมื่อไรที่ต้อง upgrade เป็น VPS ผู้ใช้ที่คิดจะสร้าง Express API, E-Commerce backend, หรือ hybrid site (static + API) ตัวเล็ก ๆ จะได้ข้อมูลที่เป็นประโยชน์
Phusion Passenger คืออะไร
Phusion Passenger เป็น application server แบบ open-source ที่ทำหน้าที่รัน web application ที่เขียนด้วย Node.js, Python, Ruby ฯลฯ ขณะ Apache หรือ Nginx ทำหน้าที่เป็น web server คอยรับ HTTP request บน port 80/443 และ forward ไปให้ Passenger ประมวลผล Passenger จะจัดการเรื่องหลายๆ อย่างเช่น
- Process management: สร้าง process ใหม่เมื่อต้องการและฆ่า process ที่ไม่ใช้งาน (auto-scaling)
- Restart mechanism: มีไฟล์ restart.txt คอย watch — เมื่อเขียนไฟล์นี้ Passenger จะ restart app ให้อัตโนมัติ
- Memory management: ป้องกันไม่ให้ process กินหน่วยความจำเกินขีดจำกัด
- Load balancing: กระจาย request ไปยัง worker processes ที่ว่าง
ข้อดีของการใช้ Passenger บน Shared Hosting คือ ไม่ต้องซื้อ VPS แพง ใช้ Hosting package ธรรมดาแค่ 500 บาท/ปี ก็ Deploy Node.js app ได้ นอกจากนี้ยังรองรับ SSL Let's Encrypt ฟรี ทำให้แอปของคุณมี HTTPS เหมือน VPS
DirectAdmin Setup Node.js App Feature
DirectAdmin ซึ่งเป็น control panel ของ AsiaGB ได้บูรณาการ Passenger มาแล้ว และมี feature พิเศษชื่อ "Setup Node.js App" ที่ช่วยให้ผู้ใช้ setup ได้ง่ายๆ โดยไม่ต้องรู้ระเบียบเทคนิค
ขั้นตอนการ Setup
ทั่วไปแล้ว ผู้ใช้ DirectAdmin (ในบทบาท Account Owner) จะ login เข้า panel แล้วไปที่เมนู "Setup Node.js App" หรือ "Node.js Applications" ที่นั่น ระบบจะให้คุณ
- ระบุชื่อแอป เช่น "my-express-api"
- เลือก Node.js version จาก dropdown (14, 16, 18, 20 ขึ้นไป)
- ระบุเส้นทาง (path) ของโค้ดหลัก เช่น "/home/username/apps/my-express-api/app.js"
- ระบุ port ที่แอปจะฟัง (Passenger จะ assign port ให้อัตโนมัติ หรือคุณระบุเอง)
- กดสร้าง DirectAdmin จะ setup structure และสตาร์ท Passenger
หลังจากสร้างแล้ว DirectAdmin จะสร้าง folder structure อัตโนมัติ ร่วมกับไฟล์ passenger_wsgi.py หรือ startup script ที่ต้องใช้เพื่อให้ Passenger รู้ว่าจะรัน app อย่างไร คุณเพียงแค่ upload โค้ด Node.js เข้าไปแล้ว DirectAdmin จะจัดการส่วนที่เหลือ
npm Install บน Shared Hosting
ขั้นตอนสำคัญคือการติดตั้ง dependencies ผ่าน npm install คุณสามารถทำได้หลายวิธี
วิธี 1: ผ่าน SSH (ถ้าเปิด SSH access) เข้า SSH แล้วรัน npm install ในโฟลเดอร์แอป วิธีนี้เร็วกว่า
วิธี 2: ผ่าน DirectAdmin File Manager upload package.json และอย่างอื่น แล้วใช้ terminal ที่ DirectAdmin มี (ถ้ามี) รัน npm install
วิธี 3: Pre-install dependencies หากชิ้นส่วน dependencies มีขนาดใหญ่ และ npm install บนเซิร์ฟเวอร์ล้มเหลว ลองปะ package.json ลง local machine แล้ว upload node_modules พร้อมกับโค้ด (ไม่แนะนำเพราะใช้พื้นที่มากและอาจมี incompatibility ระหว่างระบบปฏิบัติการ)
Entry Point และ Module Export
Passenger ต้องการให้ Node.js app export module object เพื่อให้มันสามารถ invoke ได้ ไฟล์เริ่มต้น (entry file) เช่น app.js ควรมีหน้าตาแบบนี้:
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); module.exports = app;
มิฉะนั้น Passenger จะไม่รู้ว่าต้องรัน app อย่างไร และแอปจะเริ่มไม่ได้ บางทีผู้ใช้เลือก entry file ว่า app.js แต่ไฟล์จริงรูป server.js หรือ index.js ได้ — ต้องตรวจให้แน่นอน
Environmental Variables และ Configuration
Node.js app มักต้องการตัวแปร environment เช่น DATABASE_URL, API_KEY, NODE_ENV ฯลฯ คุณสามารถตั้งค่าได้โดย
- สร้างไฟล์ .env ในโฟลเดอร์ app แล้ว app จะอ่านไฟล์ (ต้องใช้ package เช่น dotenv ในโค้ด)
- หรือ SSH เข้าเซิร์ฟเวอร์แล้วรัน export ใน shell (แต่วิธีนี้ไม่ persistent)
- ตั้งค่าใน DirectAdmin environment section (ถ้ามี)
หลังจากแก้ไข .env ต้อง restart Passenger — สามารถทำได้โดยสัมผัส restart.txt ไฟล์ใน app directory
Static Files และ Public Folder
ไฟล์ static เช่น CSS, JavaScript, รูปภาพ ควรเก็บไว้ใน public folder เพื่อให้ Passenger serve ได้เร็ว ใน Express app ทั่วไป ก็จะมี
app.use(express.static('public'));
ถ้า public folder ไม่มี Passenger ยังสามารถ serve static files ได้แต่จะผ่าน Node.js process ทำให้ช้ากว่า ดังนั้นถ้าเซฟพื้นที่พอ ลองสร้าง public folder ขึ้นมา
Passenger Restart และ Logs
การ restart Passenger application นั้นง่ายมาก: สัมผัส (touch) ไฟล์ชื่อ restart.txt ในโฟลเดอร์ tmp ของ app Passenger จะดูหน้าสติ้กเนื่องและรีสตาร์ท process
touch /home/username/apps/my-express-api/tmp/restart.txt
Logs ของ Passenger app จะถูก save ไว้ใน log directory ของ app เช่น /home/username/apps/my-express-api/log/out.log ผู้ใช้สามารถตรวจสอบ logs เพื่อดู error ใด ๆ ที่เกิดขึ้น
ข้อจำกัดของ Node.js บน Shared Hosting
แม้ว่า Passenger ช่วยให้ Deploy Node.js ได้บน Shared Hosting แต่ยังมีข้อจำกัดต่าง ๆ ที่ต้องรับรู้
1. ไม่มี Root Access คุณไม่สามารถติดตั้ง system package ใดหรือแตะเรื่องระบบได้ ถ้าแอปต้องการ custom system libraries ผู้ใช้จำเป็นต้อง upgrade เป็น VPS
2. Resource Limit Memory และ CPU ถูกจำกัด ส่วนแบ่งให้ app นั้นมี limit ที่ผู้ให้บริการ set ไว้ ถ้า app กินหน่วยความจำเกิน Passenger จะ kill process โดยไม่ได้ cue ให้ user ทำอะไรได้
3. ไม่มีการ Monitor ถ้า app crash และไม่มีการ restart อัตโนมัติ แอปจะต้อง offline จนกว่า user จะ login เข้ามาแก้ VPS มีการ monitor และ auto-restart ดังนั้นวิธีนี้ดีกว่า
4. Performance ไม่เสมอกับ VPS แม้ Hosting package ของ AsiaGB มี SSD ที่เร็ว แต่ resource ถูกแบ่ง shared hosting ยังคง ช้ากว่า VPS ที่ได้ resource แบบ dedicated
ใครเหมาะที่ใช้ Node.js บน Shared Hosting
- Startup / Prototyping เมื่อต้องการ test idea แบบรวดเร็ว และไม่อยากจ่ายเงิน VPS หลาย ๆ ร้อยบาท/เดือน
- Static + API Hybrid เว็บมี static HTML/CSS แล้วมี REST API ตัวเล็ก ๆ สำหรับ interaction
- Express API เล็ก ๆ API ที่ respond ได้เร็ว ไม่ต้องประมวลผลข้อมูลเยอะ
- Hobby Projects โปรเจกต์สำหรับเรียนรู้ หรือโปรเจกต์ส่วนตัวที่ไม่ critical
แต่ถ้าแอปเติบโตและต้องการ performance สูง หรือต้องการ customize system ให้ upgrade เป็น VPS ราคาแค่ 500 บาท/เดือน ที่ AsiaGB รับประกัน 99% Uptime ด้วย
เมื่อไรที่ต้อง Upgrade เป็น VPS
รองรับ traffic หนาแน่น หรือประมวลผลข้อมูลเยอะ → VPS ช่วยให้ resource แบบ dedicated และไม่ต้องแบ่ง resource กับผู้ใช้คนอื่น ต้องติดตั้ง system package หรือ daemon พิเศษ → VPS ให้ root access ได้ต้องการ monitor/logging ที่ซับซ้อน → VPS ให้การควบคุมเต็ม ผู้ใช้อยากมั่นใจว่าแอปจะ restart อัตโนมัติเมื่อ crash → VPS ดีกว่า
เคล็ดลับ: Shared Hosting เดิมใช้ PHP ทั้งหมด แต่ตั้งแต่ Passenger อยู่ร่วม AsiaGB Hosting ก็เปิดโลกใหม่ให้ Node.js developer ที่ไม่อยากเสียเงินเยอะ เริ่มต้นด้วย Hosting ธรรมดาแล้วพอเติบโตค่อย upgrade ไป VPS
ติดต่อซัพพอร์ต
ถ้าพบปัญหาในการ Setup Node.js app บน DirectAdmin ทีมซัพพอร์ต AsiaGB พร้อมช่วยเหลือ สามารถติดต่อผ่าน Ticket ที่ billing.in.th/submitticket.php หรือ Email ไปที่ [email protected] ทีมจะตอบคำถาม JavaScript/Node.js ทั่วไป และช่วยตรวจสอบ Passenger configuration
เริ่มต้นใช้ Hosting พร้อม Node.js Support
Web Hosting ที่รองรับ Node.js + Phusion Passenger เริ่มต้นเพียง 500 บาท/ปี พร้อม SSD, DirectAdmin, SSL Let's Encrypt ฟรี และ Uptime 99% รับประกัน
ดูแพ็กเกจ Hosting