阿里雲帳號安全認證 阿里雲Nodejs環境搭建
前言:為什麼又要搭 Node.js 環境?
很多人第一次上手 Node.js,腦中想像通常是「npm install 一下就完事」。結果到了雲端,才發現世界並沒有那麼善良:還要開安全群組、設定端口、挑版本、處理環境變數、把服務守住不讓它半夜睡著,最好還要配上 Nginx 反代和 HTTPS。這篇文章就用比較「真人會遇到的狀況」來帶你把阿里雲 Node.js 環境搭起來,讓你的應用從本機起飛到線上起舞。
我會用一個典型目標來說明:你已經有一個 Node.js 專案(例如 Express、Koa 或 Next.js 的後端部分),你要把它部署在阿里雲 ECS 上,並提供網路存取(HTTP/HTTPS),而且服務能夠自動重啟、日誌可追、出問題能快速定位。
準備工作:你需要先決定的幾件事
1. 選擇你要用的阿里雲產品
阿里雲帳號安全認證 本教程以最常見的組合為主:ECS(彈性計算服務)+(可選)EIP + 安全群組 + Nginx/Node/PM2。你不一定要買最豪華的配置,但至少要確保 CPU、記憶體能跑你的服務。
若你只是測試,輕量等級也可以;若是正式上線,建議至少 2C/2G 起步(看你應用的特性)。當然,貪心是人類天性,但你也要留點預算給未來的優化。
2. 確認你的 Node.js 專案類型
不同類型對部署方式會有差異:
- 純後端(Express/Koa):最簡單,跑一個入口檔即可。
- 有前端框架(如 Next.js):可能需要 build/輸出,並配置不同的啟動方式。
- 使用 WebSocket/長連線:需要注意反代與超時設定。
本文以「後端服務」為主來講,但你會看到一些通用原則,套到其他框架通常也沒問題。
登入阿里雲並建立伺服器(ECS)
登入阿里雲控制台後,找到 ECS,建立一台新實例。建議你在建立時注意下面幾點:
- 作業系統:常見是 CentOS 或 Ubuntu。這篇文章用 Ubuntu(更直覺、工具新)。你若用 CentOS,命令名字可能稍有不同,我會在關鍵處提示。
- 網路:選擇 VPC(私有網路)與子網路,或使用你熟悉的方案。
- 阿里雲帳號安全認證 安全組:先別太佛系,後面要開端口。
- 帶寬:不想被吃掉就選夠的。
建立完成後,你會得到一個公網 IP,之後用 SSH 登入。
設定安全群組:先讓人能連進來
你至少需要開放:
- SSH(22):方便你遠端管理(建議只允許你的 IP,別對全世界開門)。
- HTTP(80)與 HTTPS(443):如果你要用 Nginx 對外提供服務。
- 或你的 Node 服務埠(例如 3000):不過通常 Node 服務只給本機/內網用,對外只開 Nginx。
建議做法是:外網只暴露 80/443,Node 只在內部埠跑,例如 3000,不把你的 Node 直接對全世界開放。這不是保守,是經驗。
SSH 連線到伺服器
在本機終端用以下方式登入:
ssh username@your_public_ip
如果你使用密鑰登入,確保私鑰檔權限設定合理(例如 chmod 600)。如果你不會,就當作這是雲端世界的「通行證驗證流程」。
更新系統並安裝常用工具
登入後,先把系統更新一下:
sudo apt update sudo apt upgrade -y
阿里雲帳號安全認證 再安裝常用工具(你後面會一直用到):
sudo apt install -y curl vim git build-essential
阿里雲帳號安全認證 如果你準備用 Nginx,後面也會安裝。
安裝 Node.js:建議使用版本管理(不然你會後悔)
很多新手會直接用 apt 裝 Node.js,但通常版本偏舊或更新慢。更推薦使用 nvm(Node Version Manager)。因為你未來可能要升級、回滾、或不同專案需要不同版本。
安裝 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
安裝完成後,重載環境變數:
source ~/.bashrc
確認 nvm 是否可用:
nvm --version
安裝你需要的 Node.js 版本
建議你先看專案的 package.json 裡的 engines 或你團隊慣用版本。例如:
node -v
若沒有本地資訊,通常選擇 LTS 版本較穩。例如安裝 Node 20 LTS:
nvm install 20 nvm use 20
設定預設版本:
nvm alias default 20
建立專案目錄與部署準備
你可以把專案放到例如:
/var/www/your-app
建立並進入目錄:
sudo mkdir -p /var/www/your-app sudo chown -R $USER:$USER /var/www/your-app cd /var/www/your-app
然後你可以用 git clone:
git clone your_repo_url .
或直接上傳檔案(例如用 SCP / SFTP),總之讓你的程式碼在伺服器上能跑。
安裝依賴並驗證應用可正常啟動
進入專案目錄後執行:
npm install
然後用以下方式先跑起來(假設你的 package.json 有 start 腳本):
npm run start
如果是 Express,通常你會看到類似「Server running on http://localhost:3000」的字樣。
若你只有 dev 模式:
npm run dev
但線上要用 start(避免開著熱更新那種「我在開發」的模式)。
設定環境變數:不要把密碼寫進程式
真實世界的痛點之一:資料庫密碼、API Key、JWT Secret。不要硬塞進程式或把它寫在 repo 裡。你可以使用幾種方式:
- 在 shell 中 export(不建議長期,只是臨時驗證)。
- 使用 PM2 的環境變數設定。
- 使用 .env 檔(建議放在伺服器端,且在 .gitignore 排除)。
例如你用 .env,在伺服器上建立:
cp .env.example .env
然後修改:
vim .env
最後確保你的程式有讀取 dotenv(若需要)。例如 Express 常用 dotenv:
npm i dotenv
在入口檔加入:
require('dotenv').config()
使用 PM2 讓服務常駐(比硬等更可靠)
你把 Node 啟動後,如果終端關掉服務可能跟著掛。這就像你把麵端出來但不看,過一會兒就涼了。PM2 的價值在於:守護、重啟、日誌、狀態管理。
安裝 PM2
npm i -g pm2
用 PM2 啟動你的服務
假設你的入口是 server.js 或 package.json 的 start:你可以:
pm2 start npm --name your-app -- start
或直接指定檔案(看你專案結構)。
查看狀態:
pm2 status
查看日誌:
pm2 logs your-app
保存並設定開機自啟
pm2 save
pm2 startup
它會輸出一段你需要在系統層級執行的命令,照著貼上即可。搞定後重開機服務仍能自動起來。
配置 Nginx 作反向代理:把流量交給專業人士
Node 是專心寫程式的。Nginx 則是專心收發流量的。把它們搭配起來,你的世界會順一點。
安裝 Nginx
sudo apt install -y nginx
啟動:
sudo systemctl start nginx sudo systemctl enable nginx
設定 Nginx 站點(對外提供)
編輯站點配置檔,常見位置是:
/etc/nginx/sites-available/default
或你可以建立新的配置檔再用符號連結。為了簡單,我先用 default 示範。
在 server 區塊中加入反代,例如 Node 服務在 localhost:3000:
server {
listen 80;
server_name your_domain_or_public_ip;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 60;
}
}
注意:
- server_name 可以是你的網域,或暫時用公網 IP(後面做 HTTPS 會更講究)。
- 如果你有 WebSocket,上面的 Upgrade/Connection 要保留。
- 端口要對應你 Node 啟動的埠。
檢查設定並重載 Nginx
sudo nginx -t sudo systemctl reload nginx
現在你應該可以用瀏覽器打:
http://your_domain_or_ip/
看到你的應用頁面。
上 HTTPS:不做就像把安全門忘在家裡
阿里雲帳號安全認證 如果你有網域,通常建議上 HTTPS。阿里雲有自己的憑證服務或可使用 Let’s Encrypt。這裡給你一個通用思路:先確定網域指向你的 ECS(A 記錄 / CNAME),再簽發憑證並配置 Nginx。
使用 Certbot(Let’s Encrypt)範例
安裝 certbot:
sudo apt install -y certbot python3-certbot-nginx
執行:
sudo certbot --nginx -d your_domain -d www.your_domain
它會引導你選擇 HTTP 轉 HTTPS,並自動修改 Nginx。
測試完成後重載:
sudo systemctl reload nginx
設定 Node 服務的「真正啟動埠」與健康性
很多人把 Node 應用設定在 3000,但 Nginx 反代到 80/443;這是正常的。但你需要確保 Node 真的在對的埠監聽。
常見設定來源:
- 程式內
process.env.PORT - 或你在啟動腳本中寫死埠號
建議在 PM2 啟動時顯式指定 PORT(若有用)。例如:
pm2 start npm --name your-app -- start --update-env
並確保你的 .env 或系統環境有 PORT=3000。
常見踩坑與排查方法(保命用)
1. Nginx 能啟動,但網站打不開
先檢查反代目標:
- Node 是否真的在跑?:
pm2 status - Node 是否監聽正確埠?:
ss -lntp | grep 3000(把 3000 換成你的埠) - Nginx 設定是否正確?:
sudo nginx -t
再看日誌:
sudo tail -n 200 /var/log/nginx/error.log pm2 logs your-app
很多時候問題就藏在日誌裡,像是兇手留下的指紋。
2. Node 啟動後立刻退出
用 PM2 看最後一次退出原因:
pm2 logs your-app --lines 200
常見原因:
- 缺少環境變數(例如連資料庫的密碼沒設定)
- 依賴套件缺失(npm install 沒跑或跑了但版本不匹配)
- Node 版本不相容(例如使用了某些語法)
確保你上線用的 Node 版本就是專案需要的版本。
3. 反代後前端資源(CSS/JS)404
如果你是單純後端 API,通常不會遇到。但若你把前端也交給同一個服務,可能需要確認:
- 靜態檔案路徑是否正確
- Express 靜態路由是否設定
- Nginx 的
location規則是否符合你的路徑
建議先用瀏覽器開發者工具看 Network 的請求路徑,然後對應程式路由與 Nginx 規則。
部署策略:你要怎麼上架下一版
搭完一次不等於永遠搞定。接下來你會遇到「要更新程式」這種人類常見任務。這裡提供幾種輕量策略:
- 手動更新:pull 最新程式 -> npm install -> pm2 restart。
- 腳本化更新:寫一個 deploy.sh,包含 git pull、npm install、pm2 reload。
- CI/CD:如果你團隊有流程,可以用 GitHub Actions 或其他工具直接部署。
手動可以先跑起來,腳本可以避免你每次都忘東忘西(人類嘛,會累是正常的)。
監控與備份:讓你睡得著的最後一塊拼圖
服務要活著,就要有人看它。最低限度你可以做到:
- PM2 日誌:追蹤錯誤與性能波動。
- 系統資源監控:CPU、記憶體、磁碟是否飆高。
- 錯誤告警:例如有條件就用告警工具或簡單的監控面板。
備份也很重要:資料庫要有備份,檔案上傳要有持久化方案(不要只放在本機,因為伺服器就像貓一樣:你不看它就不知道會跑去哪)。
一個「完整流程」小結(照著做就能跑)
如果你想要把本文串成一條流水線,可以記住這個順序:
- 建立 ECS,並設定安全群組開放 22/80/443(建議 22 限制 IP)。
- SSH 登入,更新系統並安裝常用工具。
- 安裝 nvm,安裝並切換到專案需要的 Node.js LTS/指定版本。
- 把專案放到伺服器,執行 npm install。
- 設定 .env 或 PM2 環境變數,確保 PORT/密碼等都有。
- 用 PM2 啟動服務,設定開機自啟。
- 安裝並設定 Nginx,反向代理到 localhost:你的 Node 埠。
- (可選但強烈建議)配置 HTTPS。
- 用日誌排查問題,最後再做持續部署與監控。
結語:你不是在搭環境,你是在建立上線的肌肉記憶
「阿里雲 Node.js 環境搭建」看似瑣碎,其實每一步都是在建立你日後上線的肌肉記憶。起初會覺得麻煩,等你真的把服務跑穩、日誌看懂、Nginx 反代搞定,你就會發現:以前覺得很難的東西,現在變成可以重複的流程。
如果你照做後遇到錯誤,不要急著懷疑人生,先看:
- PM2 日誌(通常是最直接的答案)
- Nginx error.log(反代問題的寶庫)
- 阿里雲帳號安全認證 端口監聽與環境變數(最常漏)
祝你上線順利。你的服務應該像咖啡一樣:不香不行,但也不要讓它一直冷著。

