本篇要解決什麼問題
對前端工程師來說,有時只是單純要一個靜態網站,讓主管或業者看到 Demo,卻因為後端、Nginx、Linux 等設定卡關半天。這時候,其實可以用 Node.js 搭配 Express,再加上 Docker,簡單幾個指令,就能快速建起一個 Demo 網站了。
使用 Node.js + Express 快速提供靜態檔案服務
本篇使用了以下技術與工具:
- Node.js + Express:提供簡易的靜態檔服務。
- Docker:容器化應用,讓執行環境一致、方便搬移與佈署。
- docker-compose:簡化啟動流程與指令。
以下檔案,新增在我們想要架起 Demo 的專案資料夾中。
server.js
server.js 檔裡,主要是讓我們使用 Express 來讓 Node.js 能提供靜態檔案的服務,程式碼如下:
// server.js const express = require("express"); const path = require("path"); const app = express(); const PORT = 3001; // PORT 要修改成自己需要的 // 提供靜態檔案(例如 index.html、images、js、css) app.use(express.static(path.join(__dirname))); app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); });
這段程式會讓 Node.js 在本機的 3001 PORT 上開啟一個伺服器,並提供當前目錄底下的所有檔案給瀏覽器存取。
PORT 請自行修改想要的,這邊寫 3001 是要避開常用到的 3000。
package.json
server.js 裡有使用 express,因此 package.json 需要安裝。
如果專案裡本來就有 package.json,那就直接執行:
npm install express
如果還沒有 package.json,那就執行以下:
npm init -y npm install express
docker-compose.yml
這是讓整個 Node.js 專案能在 Docker 裡運行的設定檔,使用官方 node image 搭配 volume 掛載當前資料夾,並自動執行 server:
version: "3.8" services: web: image: node:23-alpine3.20 ports: - "3001:3001" volumes: - .:/usr/src/app working_dir: /usr/src/app command: node server.js
這邊的 ports,要跟 server.js 裡寫得一樣。
.dockerignore
讓 Docker 避免將不必要的檔案打包進去,例如 .git
、node_modules
等:
node_modules npm-debug.log Dockerfile docker-compose.yml .env
有了以上四個檔案,就可以準備用 Docker 架起 Demo 網站了。
四個檔案都在同一專案資料夾中。
啟動
本機必須要先安裝好 Docker:https://www.docker.com/products/docker-desktop/。
有了 Docker 後,在專案目錄下執行以下指令:
docker-compose up -d
接著打開瀏覽器,輸入 http://localhost:3001,就可以看到你的靜態網站內容了!
專案原始碼連結
本篇說明的檔案,有放在 GitHub 上,取用前請先點擊星星,你的小小動作,對本站都是大大的鼓勵:
https://github.com/letswritetw/letswrite-docker-node-static-site
如果你也常常需要快速測試一份靜態網頁,這個方法可以省下很多時間。
