2025年8月8日 星期五

在 ubuntu 使用 docker 架設 nginx 靜態網站伺服器

在 ubuntu 使用 docker 架設 nginx 靜態網站伺服器

主要是要講 npm (Nginx Proxy Manager) 至於架設的東西就隨意選個最簡單的 Nginx 當範例架設一個簡易網站就好


安裝 docker 套件

使用官方懶人包安裝docker

curl -fsSL get.docker.com|sudo sh; sudo usermod -aG docker $USER


創建範例網站

建立範例網站

# 建立範例 index.html
sudo mkdir -p /srv/www/mysite.com/html
echo '<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>我的網站</title>
</head>
<body>
  <h1>歡迎來到我的 nginx 容器網站!</h1>
  <p>這是來自 /srv/www/mysite.com 的內容。</p>
</body>
</html>' | sudo tee /srv/www/mysite.com/html/index.html > /dev/null


啟動 nginx 容器

使用簡易腳本來自動創建範本

# 安裝
docker run -d \
  --name www.mysite.com \
  -v /srv/www/mysite.com/html:/usr/share/nginx/html:ro \
  -p 8081:80 \
  --restart=always \
  nginx:alpine

安裝好之後測試一下

curl http://localhost:8081

有的看到範例內容的話就完成了


檢視網站內容

網址: http://localhost:8081

直接把貼到瀏覽器上就可以看到網站內容了,如果是谷歌的機器就把 localhost 換成公開的 IP 即可,記得事後加強一下安全就好。

或是使用 Vscode 用 SSH 連入,預設會自動轉發遠端的端口到本地,一樣可以用 localhost:8081 打開遠端沒有開放的網頁。



開放端口給外部IP連接

在內布已經可以用 localhost:8081 看到網站之後再來要把你的IP公開出去,在家用的網路中通常需要再路由器中設定虛擬伺服器轉發

下面以 ASUS 的路由器為範例,這台路由器必須直接輸入 Hinet 連線帳密碼取得對外IP才有效,如果是宿舍環境無權動到最上層路由的話就不適用這個方式了

要是無權動路由器又想自架的話,一個免費的方案是用 cloudflare tunnel 突破NAT的阻擋

 

位置在
左邊::外部網路(WAN) → 頂部分頁::虛擬伺服器


進來之後打開功能並且輸入


成功之後會長這個樣子


這一整條的解讀就是把 真實IP:80 轉發到 192.168.3.92:8081 的意思

來源IP是白名單只轉發特定IP,留空就行不用限制

再來就可以在瀏覽器中輸入 http://真實IP 即可看到剛剛建造的網頁了


要註冊自己的免費域名可以參考下一篇
CHG: 使用 duckdns 轉發自建的靜態網頁伺服器



其他:: 快速啟動 nginx 容器

自己寫的一個快速部屬函式

source <(curl -sL gist.githubusercontent.com/hunandy14/7dafceef67cb47db38620a3c2479792d/raw)
run_nginx_site mysite.com 8081

就可以部署好了,預設會部署在 /srv/www/$DOMAIN/html
詳細使用說明自行點進去 gist 裡面看說明


要刪除該容器可以使用下面指令刪掉

docker stop www.mysite.com && docker rm www.mysite.com






沒有留言:

張貼留言