https://www.cnblogs.com/yeungchie/
mkdir -p ~/docker/nps/config
docker pull oldiy/nps-server
docker run -d --name nps --net=host -v /root/docker/nps/config:/nps/conf oldiy/nps-server
現在 nps 已經開始執行了。
docker stop nps
為什麼這裡要停止執行呢?
因為這時候在 config 目錄下已經生成了一些組態檔,考慮到安全性,我們需要做一些改動。
vim /root/docker/nps/config/nps.conf
開啟後重點關注下面這幾項:
...
bridge_port=8024 # 使用者端連線埠
...
web_username=admin # 後臺管理使用者名稱
web_password=123 # 後臺管理密碼
web_port = 8080 # 後臺管理埠
...
以上是預設的設定,建議改掉。
docker start nps
現在可以在網頁端存取 <ip_addr>:<web_port>
,並通過使用者名稱 <web_username>
和密碼 <web_password>
登入後臺管理介面了。
能夠成功存取後,繼續下面的步驟。
點選左側選單欄的 使用者端
選項,再點選新增。
設定一個 使用者端驗證金鑰
,這裡可以隨便填。壓縮、加密願意的話也可以選 yes。
設定好後點選 新增
即可。
留意一下這裡的 id
和 vkey
。
本地機建議選擇一臺 7*24 小時執行的裝置,一般是路由器或者 NAS ,我這裡就選擇群暉了,DSM 有很好用的 docker 圖形化管理套件,所以下面用圖形化介面演示如何部署 npc 。
點選選單欄中的登入檔
,搜尋 npc-client
,下載第一個就行。
點選選單欄中的映像
,找到下載好的npc
,啟動。
在高階設定->網路
中注意勾選使用與 Docker Host
相同的網路。
再到高階設定->環境
中修改兩個環境變數:
<ip>:<bridge_port>
vkey
接著一路點選 應用
,啟動容器即可。
這時候在 nps 後臺可以看到使用者端已經線上。
前面部署 nps 時候已經設定了一部分了,接下來要設定的就是具體需要穿透的埠了。
這裡舉例設定一下 Jellyfin 的 http 埠 8096
。
進入 nps 後臺管理,點選左側選單欄的 使用者端
選項,再點選新增。
3
。然後點選 新增
。
這樣一條隧道就新增好了。
至此內網穿透算是部署好了。
嘗試存取一下 Jellyfin。
有時候執行的容器會自己掛掉,雖然不經常發生,但是偶爾來一次,遇上剛好要用的時候就很煩人。
下載演示我在伺服器端如何讓容器保活的,方法比較粗暴但有效。
建立目錄來存放指令碼和紀錄檔檔案。
mkdir -p /root/docker/nps/script
mkdir -p /root/docker/nps/log
docker ps -q --no-trunc
會得到一長串 ID,記下來 <nps_id>
。
如果你返回了多個 ID,那你應該知道要怎麼區分那個是 nps 的。
建立 bash 指令碼,放到 /root/docker/nps/script/keepActive.sh
#!/bin/bash
cur=$(cd $(dirname $0); pwd -P)
log="$cur/../log/log"
a=$(docker ps -q --no-trunc | grep '<nps_id>') # 這裡其實就是去匹配看看當前執行中的容器有沒有nps,<nps_id>改成上一步獲取到的。
if [[ "_$a" == "_" ]]; then
docker restart nps # 第一次重啟 nps
if [[ $? == 0 ]]; then
echo "Revive $(date +'%F %T')" >> $log
else
echo "Failed $(date +'%F %T')" >> $log
systemctl restart docker.service # 重啟失敗大概率是 docker 服務掛了,這裡重啟服務
docker restart nps
echo "Restart $(date +'%F %T')" >> $log
fi
else
echo "Active $(date +'%F %T')" >> $log
fi
如果是服務 docker 掛了,且重啟失敗,那就不是保不保活的問題了,登上伺服器檢查吧。
建立一個 crontab.set
,用來設定定時任務。這個檔案就隨便放了,一次性的。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
* * * * * /root/docker/nps/script/keepActive.sh
接著執行:
crontab crontab.set
這裡是設定一分鐘執行一次 keepActive.sh
指令碼,所以如果 nps
掛了,一分鐘內它就會重啟了。
如果你還設定了其他的定時任務,那你應該知道怎麼設定 crontab,別把以前設定的任務給覆蓋了。