Node.js 虛擬主機是什麼?
Node.js 虛擬主機是可以直接執行 Node.js 伺服器程式的共享主機:在 cPanel 點選建立應用程式、選好 Node.js 版本、指定啟動檔,就能讓 Express 這類程式回應網域的請求。一般只支援 PHP 的主機,上傳 .js 檔只會被當成靜態檔案下載,不會在伺服器端執行。
瑪尼國際的 Linux 虛擬主機透過 CloudLinux 的應用程式選擇器提供 Node.js 執行環境,所以 Node.js 虛擬主機是 Linux 虛擬主機本來就附的能力:官網用 PHP 或 WordPress,旁邊用 Node.js 跑表單後端或 API,同一部主機、同一份年費。
在 cPanel 建立 Node.js 應用程式要幾個步驟?
四個步驟:建立應用程式、上傳程式、安裝套件、啟動。全部在 cPanel 的「Setup Node.js App」完成:
- 在 cPanel 開啟「Setup Node.js App」,選擇 Node.js 版本,指定應用程式目錄、要綁定的網域或子目錄,以及啟動檔(例如 app.js)。
- 把程式與 package.json 上傳到應用程式目錄,node_modules 不必上傳。
- 在介面按下「Run NPM Install」,依 package.json 安裝相依套件;也可以用 SSH 進入環境自行執行 npm 指令。
- 設定環境變數(例如資料庫密碼、API 金鑰)後重新啟動,網址就會交由您的程式回應。
每個應用程式各自選版本、各自安裝套件,一個專案升級不會影響另一個專案。
適合哪些 Node.js 專案?
「有人連線才執行」的網站與 API 最適合,前端框架的靜態輸出甚至不必建立應用程式。常見用途:
- Express API 與表單後端:接收網站表單、寫入 MySQL、寄送通知信。
- webhook 接收端:LINE、金流或第三方服務推送事件後的處理程式。
- React/Vue/Next.js 靜態輸出:本機 build 完上傳 HTML、JS、CSS,任何方案都能直接放。
- 串接 OpenAI、Gemini 等 API:主機只負責轉送與記錄,運算在對方雲端執行。
建議在本機完成 npm run build 這類建置流程,再上傳產出;在共享主機上跑建置會吃掉大量資源,也比較慢。
React + Vite 前端和 Express API 放同一個帳號,要怎麼配置?
兩種放法都可以:讓 Express 一起提供前端檔案(一支應用程式管全部),或前端放網站根目錄、Node.js 只負責 /api。不論哪一種,都在本機執行 npm run build,主機只負責安裝套件與執行;主機上已有 React 19 + Vite 前端搭配 Express 4、Node.js 22 的專案以第一種放法實際運作,已啟動狀態下首頁回應約 8 毫秒(2026 年 11 月主機本機量測,不含網路傳輸)。
| 放法 | 目錄配置 | 優點 | 要注意 |
|---|---|---|---|
| ① Express 一起提供前端 | 應用程式目錄放後端程式與 dist/,Node.js 應用程式綁定網域根目錄 | 一支程式、一組設定;前後端同網域,不必設定跨網域(CORS) | Express 要加 express.static 與「其餘網址回傳 index.html」的路由,而且要排在 API 路由後面 |
| ② 前端放根目錄、API 綁 /api | dist/ 內容上傳到 public_html,Node.js 應用程式的網址設為 /api | 靜態檔由網頁伺服器直接提供,Node.js 行程閒置回收時,首頁開啟速度不受影響 | React Router 的導回規則寫在 .htaccess;Express 的路由都要以 /api 開頭 |
第一種放法的 Express 程式重點如下(Express 4 寫法;Express 5 的萬用路由要改成 '/{*splat}'):
// app.cjs:cPanel「啟動檔」欄位指向這支
const path = require('path');
const express = require('express');
const app = express();
app.use('/api', require('./routes/api')); // API 路由先註冊
app.use(express.static(path.join(__dirname, 'dist')));
app.get('*', (req, res) => // 其餘網址交給 React Router
res.sendFile(path.join(__dirname, 'dist', 'index.html')));
app.listen(process.env.PORT || 3000); // 連接埠由主機自動指派
第二種放法的前端路由規則,放在 public_html 的 .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/api
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]
另外兩個細節:VITE_ 開頭的環境變數會在 build 時直接寫進前端 JavaScript,任何人打開瀏覽器都看得到,資料庫密碼、API 金鑰、JWT 簽章金鑰要放在 cPanel Node.js 應用程式的環境變數,由後端讀取;前端若不是放在網站根目錄,Vite 的 base 設定要跟著改。
Next.js 可以放在 Node.js 虛擬主機嗎?
看輸出方式:靜態匯出一定可以;需要伺服器端渲染的 standalone 模式可以執行,但閒置後第一次開啟較慢;重度使用 ISR、圖片即時最佳化的網站請改用 VPS。Next.js 15 需要 Node.js 18.18 以上、Next.js 16 需要 20.9 以上,主機的 Node.js 22、24 都符合。
| 輸出方式 | next.config 設定 | 放在 Node.js 虛擬主機 |
|---|---|---|
| 靜態匯出 | output: "export",build 後產生 out/ | 可以。上傳 out/ 內容即可,不必建立 Node.js 應用程式,任何方案都能放 |
| standalone 伺服器 | output: "standalone",啟動檔為 .next/standalone/server.js | 可以執行。要記得把 public/ 與 .next/static/ 複製進 standalone 目錄;閒置回收後第一個請求要重新啟動整個 Next.js 伺服器 |
| 大量 ISR、圖片即時最佳化、常駐快取 | — | 建議改用 VPS 主機,讓行程常駐、記憶體可自行配置 |
Node.js 主機可以選哪些版本?新專案用哪一版?
可以選 Node.js 24、22 與 20,另外保留 6~12 給舊專案沿用;新專案建議用 Node.js 24。版本在 cPanel 建立應用程式時選擇,每個應用程式各自獨立:
| 版本 | 瑪尼國際主機 | 官方支援 |
|---|---|---|
| Node.js 24(主機現為 24.22.2) | 可選(建議) | LTS,到 2028 年 4 月 |
| Node.js 22(主機現為 22.23.4) | 可選 | 維護期 LTS,到 2027 年 4 月 |
| Node.js 20(主機現為 20.20.2) | 可選 | 2026 年 4 月已結束 |
| Node.js 6、8、9、10、11、12 | 可選,供暫時無法改寫的舊專案使用 | 官方已停止支援 |
還在用 Node.js 20 的專案,建議在本機改用 24 執行 npm ci 與測試,沒問題再到 cPanel 建一個 24 版的應用程式切換,舊的應用程式先留著當退路;多數 Express 專案只需要重新安裝套件。
部署 Node.js 應用程式最常遇到的 3 個錯誤
上傳了本機的 node_modules、啟動檔格式不合、改完程式沒重新啟動,是開通後最常被問到的三種狀況。症狀與改法如下:
- 啟動時出現原生模組載入錯誤(例如 bcrypt、sharp):上傳了在 Windows 或 Mac 上安裝的 node_modules,裡面編譯好的檔案在 Linux 主機無法載入。刪掉主機上的 node_modules,按「Run NPM Install」讓主機依 package.json 重新安裝。
- 專案是 ES module,啟動檔載入失敗:package.json 設了
"type": "module"時,若啟動檔載入出錯,可以另寫一個 .cjs 啟動檔(例如 app.cjs),在裡面用import()載入主程式,再把 cPanel 的啟動檔欄位指向它。 - 改了程式或環境變數,網站還是舊的:行程還在執行舊版本。在 cPanel 按「Restart」,或在應用程式目錄建立(或更新時間)
tmp/restart.txt。
程式裡的 app.listen() 照常寫即可,主機會自動接手連接埠,不需要另外申請開 port。部署卡住時,把錯誤訊息透過線上客服傳給我們,協助判斷是程式還是環境的問題。
Node.js 虛擬主機年繳和兩年繳差多少?
選兩年期比連續年繳兩次便宜:基本型省 700 元、經濟型省 600 元、商務型省 4,000 元。依方案表的價格試算:
| 方案 | 年繳兩次 | 兩年期 | 省下 | 兩年期平均每月 |
|---|---|---|---|---|
| 基本型 | NT$7,000 | NT$6,300 | NT$700 | 約 NT$263 |
| 經濟型 | NT$10,000 | NT$9,400 | NT$600 | 約 NT$392 |
| 商務型 | NT$20,000 | NT$16,000 | NT$4,000 | 約 NT$667 |
經濟型與商務型另有終生型,一次付 50,000 元,等於經濟型年繳 10 年、商務型年繳 5 年的費用。虛擬主機整體怎麼挑、能做什麼、搬家要注意哪些事,可以看虛擬主機完整指南。
Node.js 虛擬主機和 VPS 怎麼選?
程式只在有人連線時執行、不需要 root 權限,選 Node.js 虛擬主機(年繳 3,500 元起);需要常駐程式、大量 WebSocket 或 Docker,選 VPS(年繳 48,000 元起)。逐項對照:
| 比較項目 | Node.js 虛擬主機 | VPS 主機 |
|---|---|---|
| 年繳費用 | 3,500 元起(兩年期 6,300 元) | 48,000 元起(4 vCPU/4 GB RAM) |
| 管理方式 | cPanel 點選建立應用程式、選版本、npm install | 完整 root 權限,自行安裝 Node.js、PM2、Nginx |
| 行程 | 有請求才啟動,閒置會被回收 | 常駐執行,可用 PM2 叢集 |
| WebSocket 長連線 | 少量可用,不適合大量即時連線 | 適合聊天室、即時協作 |
| Docker/系統套件 | 不可 | 可以 |
| 同帳號放 PHP 官網 | 可以,同一份年費 | 可以,需自行架設 |
| 適合 | Express API、表單後端、webhook、React + Vite 網站 | 即時服務、背景佇列、需要自訂環境的系統 |
Node.js 虛擬主機的限制與替代方案
共享主機會回收閒置的應用程式行程,把資源留給同機的其他帳號,因此不適合常駐型的服務。下列情況請改用其他方案:
- 需要 24 小時常駐的背景程式、佇列工作者(定時任務可改用 cPanel 的 Cron Jobs 排程執行)。
- 大量長連線的 WebSocket 即時服務,例如聊天室、多人即時協作。
- 需要 root 權限、Docker、PM2 叢集或自訂系統套件。
這些需求請看 VPS 主機(完整 root 權限)或實體主機。同樣的應用程式選擇器也支援 Python 虛擬主機與 Ruby 虛擬主機,三種語言可以在同一個帳號並存。版本需求請在簽約前告知,我們先確認主機上可選的版本再開通,來電 0800-670000。