epctl 安裝與驗證指令碼
epctl 是倉庫頂層的 Linux 二進位制安裝管理指令碼,面向已經發布到 GitHub Releases 的 epusdt 二進位制包。 epctl-docker-test.sh 是配套的真實驗收指令碼,用本機 Docker 啟動 Ubuntu + systemd 容器,完整驗證下載、安裝、啟動、升級和初始化密碼流程。
適用範圍
- 僅支援 Linux
- 僅支援二進位制安裝
- 安裝源固定為
https://github.com/GMWalletApp/epusdt/releases - 預設透過 systemd 管理服務
依賴與許可權
epctl 依賴這些基礎命令:
curltarsystemctlinstallgrepsed
其中:
install、upgrade、self-install需要寫入/opt、/etc/systemd、/usr/local/binstatus、logs會在需要時自動透過sudo重新執行- 所以日常使用建議當前使用者具備
sudo許可權
固定路徑
| 專案 | 路徑 |
|---|---|
| 安裝目錄 | /opt/epusdt |
| 主程式 | /opt/epusdt/epusdt |
| 配置檔案 | /opt/epusdt/.env |
| 示例配置 | /opt/epusdt/.env.example |
| 前端釋放目錄 | /opt/epusdt/www |
| 下載快取 | /tmp/epusdt/<tag>/ |
| systemd unit | /etc/systemd/system/epusdt.service |
| epctl 全域性安裝位置 | /usr/local/bin/epctl |
快速開始
Linux 伺服器上一鍵部署時,直接從上游 master 分支下載最新 epctl,賦予執行權限後進入互動選單:
curl -fsSLO https://raw.githubusercontent.com/GMWalletApp/epusdt/refs/heads/master/epctl
chmod +x epctl
./epctl如果你已經 clone 了倉庫,也可以在倉庫根目錄直接執行:
./epctl預設優先進入中文介面。你也可以顯式指定語言:
./epctl zh
./epctl en
./epctl --lang zh help
./epctl --lang en help如果想把指令碼裝進 PATH:
./epctl self-install
epctl常用命令
下載指定版本:
./epctl download --tag v1.0.8安裝服務:
./epctl install --tag v1.0.8 \
--app-uri https://pay.example.com \
--listen 127.0.0.1:18000升級到新版本:
./epctl upgrade --tag v1.0.9直接執行 ./epctl upgrade --tag ... 時,指令碼會在檔案替換完成後預設立即執行 systemctl restart epusdt。 如果你只想替換檔案而不重啟,請顯式傳入 --no-restart。 如果你希望人工確認,再傳 --prompt-restart;互動終端下提示為 [Y/n],直接回車預設重啟。
檢視配置、狀態、日誌:
./epctl show-config
./epctl status
./epctl logs --lines 200請求初始化管理員密碼(僅當部署版本仍暴露舊版明文路由時可用):
./epctl init-passwordv1.0.9 路由說明
v1.0.9 服務端註冊的是 /admin/api/v1/auth/init-password-hash,沒有註冊 epctl init-password 會請求的舊版明文 /admin/api/v1/auth/init-password 路由。v1.0.9 首次安裝時,請從安裝 API 回應中的 init_password 讀取初始密碼。
不傳 --tag 時的行為
download、install、upgrade 在未傳 --tag 時,會先呼叫 GitHub API 解析當前 latest release tag,再向使用者顯示實際 tag 並確認。
例如:
./epctl install --app-uri https://pay.example.com互動模式下會先提示檢測到的最新 tag。 非互動指令碼執行時,建議顯式傳入 --tag。如果你明確要跳過確認,可以設定:
EPCTL_ASSUME_YES=1 ./epctl download首次安裝時會發生什麼
執行 install 時,指令碼會:
- 按當前機器架構下載 GitHub Release 壓縮包
- 解壓到
/tmp/epusdt/<tag>/extract/ - 安裝二進位制到
/opt/epusdt/epusdt - 安裝
.env.example到/opt/epusdt/.env.example - 建立系統使用者和組
epusdt - 若
/opt/epusdt/.env不存在,則從.env.example自動生成 - 寫入並啟用
epusdt.service
自動生成 .env 時,指令碼只會補預設上線所需的最小改動:
install=falseapp_uri=<--app-uri,預設 http://127.0.0.1:8000>http_listen=<--listen,預設 127.0.0.1:8000>
如果 /opt/epusdt/.env 已存在,則安裝和升級都會保留它,不會覆蓋。 /opt/epusdt/.env.example 則會在每次 install / upgrade 時按當前 release 重新刷新。
升級時會發生什麼
執行 upgrade 時,指令碼會:
- 按當前機器架構下載目標 GitHub Release 壓縮包
- 解壓到
/tmp/epusdt/<tag>/extract/ - 要求現有
/opt/epusdt/.env已存在;若不存在會直接失敗,並提示先執行install - 覆蓋
/opt/epusdt/epusdt - 覆蓋
/opt/epusdt/.env.example - 保留現有
/opt/epusdt/.env - 刷新
epusdt.service並執行systemctl daemon-reload - 預設立即執行
systemctl restart epusdt
補充行為:
upgrade不會再補寫.env,也不會再執行systemctl enableupgrade --no-restart只替換檔案,不重啟服務,並輸出手動 restart 提示upgrade --prompt-restart會在互動終端下詢問是否重啟- 如果重啟前的檔案部署失敗,或升級後的重啟失敗,指令碼會嘗試回滾舊的二進位制、
.env.example和 unit 檔案
systemd 服務說明
指令碼註冊的服務名固定為 epusdt.service,核心引數如下:
WorkingDirectory=/opt/epusdt
ExecStart=/opt/epusdt/epusdt http start
User=epusdt
Group=epusdt
Restart=always
RestartSec=3WorkingDirectory 固定為 /opt/epusdt,因為程式會在二進位制同級目錄釋放 www/ 靜態檔案。
init-password 的含義
epctl init-password 只會請求本地 HTTP 路由。這是舊版明文路由,實際部署版本不一定註冊:
GET /admin/api/v1/auth/init-password它不會直接讀資料庫。
指令碼會從 /opt/epusdt/.env 解析 http_listen,然後自動把這些監聽寫法轉成本地可請求地址:
:8000->127.0.0.1:80000.0.0.0:8000->127.0.0.1:8000
如果介面返回 10040,含義是初始化明文密碼已經不可用。常見原因是:
- 管理員已經登入並修改過密碼
- 初始化密碼已經被消費,當前不再允許再次取回
如果介面返回 404,表示部署版本沒有暴露這個舊版明文端點;請改用安裝流程回應或初始化密碼雜湊狀態端點判斷。上述情況下,指令碼會直接把介面原始錯誤輸出出來,方便排查。
Docker 驗收指令碼
倉庫頂層提供:
./epctl-docker-test.sh <install-tag> [upgrade-tag]示例:
./epctl-docker-test.sh v1.0.6
./epctl-docker-test.sh --lang zh v1.0.6 v1.0.8它會在本機:
- 直接從
ubuntu:24.04啟動容器,並在容器啟動階段安裝 systemd 與測試依賴 - 啟動一個特權容器
- 在容器內執行
epctl self-install - 下載真實 GitHub Release
- 安裝
epusdt - 若傳入
upgrade-tag,驗證upgrade --no-restart、預設非互動upgrade,以及upgrade --prompt-restart的n/ 回車分支 - 檢查
systemd服務、www/index.html、配置檔案、日誌、狀態輸出 - 以真實 release artifact 驗證 init-password 行為;如果部署版本缺少舊版明文路由,檢查會輸出原始 HTTP 失敗內容以方便排查
執行前提:
- 本機已安裝 Docker
- 當前使用者有許可權執行 Docker
- 宿主機能夠訪問 GitHub Releases
建議
- 自動化部署場景優先顯式傳
--tag - 生產環境建議安裝完成後先執行一次
./epctl show-config - 首次拿到初始化密碼後,建議立即登入後臺修改管理員密碼
- 如果只是驗證指令碼是否可用,優先跑
./epctl-docker-test.sh
