From 67d41fa688b1b0430cc423d2db0e6896bc5de56f Mon Sep 17 00:00:00 2001 From: Timmy Date: Tue, 7 Apr 2026 12:06:47 +0800 Subject: [PATCH] feat: add CodiMD database port-forward helper scripts Add three scripts to simplify CodiMD database access via port-forward: - db-port-forward.sh: Start SSH tunnel and kubectl port-forward - db-port-forward-stop.sh: Stop port-forward processes - db-status.sh: Check port-forward status Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/codimd/db-port-forward-stop.sh | 31 ++++++++++++++++++ apps/codimd/db-port-forward.sh | 51 +++++++++++++++++++++++++++++ apps/codimd/db-status.sh | 23 +++++++++++++ 3 files changed, 105 insertions(+) create mode 100755 apps/codimd/db-port-forward-stop.sh create mode 100755 apps/codimd/db-port-forward.sh create mode 100755 apps/codimd/db-status.sh diff --git a/apps/codimd/db-port-forward-stop.sh b/apps/codimd/db-port-forward-stop.sh new file mode 100755 index 0000000..9e0a4fb --- /dev/null +++ b/apps/codimd/db-port-forward-stop.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# 停止 CodiMD 資料庫 Port Forward + +echo "=== 停止 CodiMD 資料庫 Port Forward ===" + +# 方法 1: 使用保存的 PID +if [ -f /tmp/codimd-db-port-forward.pid ]; then + PID=$(cat /tmp/codimd-db-port-forward.pid) + if ps -p $PID > /dev/null 2>&1; then + kill $PID + echo "✅ 已終止 PID: $PID" + rm -f /tmp/codimd-db-port-forward.pid + exit 0 + else + echo "⚠️ PID $PID 不存在,嘗試其他方法..." + rm -f /tmp/codimd-db-port-forward.pid + fi +fi + +# 方法 2: 使用 pgrep +PIDS=$(pgrep -f "port-forward.*codimd-db") +if [ -n "$PIDS" ]; then + echo "找到運行中的 port-forward process(es):" + echo "$PIDS" + pkill -f "port-forward.*codimd-db" + echo "✅ 已終止所有相關 process" + exit 0 +fi + +echo "❌ 沒有找到運行中的 port-forward" +exit 1 diff --git a/apps/codimd/db-port-forward.sh b/apps/codimd/db-port-forward.sh new file mode 100755 index 0000000..121be0f --- /dev/null +++ b/apps/codimd/db-port-forward.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# 啟動 CodiMD 資料庫 Port Forward + +DB_SVC="codimd-db" +DB_NAMESPACE="default" +LOCAL_PORT="5432" +REMOTE_PORT="5432" +REMOTE_HOST="ubuntu@192.168.42.120" + +echo "=== 啟動 CodiMD 資料庫 Port Forward ===" + +# 檢查是否已經在運行 +if pgrep -f "port-forward.*${DB_SVC}" > /dev/null; then + echo "⚠️ Port-forward 已經在運行中" + echo " 使用 ./db-port-forward-stop.sh 來停止" + exit 1 +fi + +# 透過 SSH 執行 kubectl port-forward +ssh -L ${LOCAL_PORT}:localhost:${REMOTE_PORT} ${REMOTE_HOST} \ + "sudo kubectl port-forward -n ${DB_NAMESPACE} svc/${DB_SVC} ${LOCAL_PORT}:${REMOTE_PORT}" \ + & + +PF_PID=$! +echo $PF_PID > /tmp/codimd-db-port-forward.pid + +# 等待 port 開始監聽 +echo "⏳ 等待 port-forward 建立..." +for i in {1..10}; do + if nc -z localhost ${LOCAL_PORT} 2>/dev/null; then + echo "✅ Port-forward 已建立: localhost:${LOCAL_PORT} -> ${DB_SVC}:${REMOTE_PORT}" + echo " PID: $PF_PID" + echo "" + echo "現在可以使用 cli-anything-codimd:" + echo "" + echo " cli-anything-codimd admin list-users \\" + echo " --db-type postgresql \\" + echo " --db-host localhost \\" + echo " --db-name codimd \\" + echo " --db-user codimd \\" + echo " --db-password 8xG94tL0uKlGiBEd" + echo "" + echo "停止方式: ./db-port-forward-stop.sh" + exit 0 + fi + sleep 1 +done + +echo "❌ Port-forward 建立失敗" +rm -f /tmp/codimd-db-port-forward.pid +exit 1 diff --git a/apps/codimd/db-status.sh b/apps/codimd/db-status.sh new file mode 100755 index 0000000..2fe37b1 --- /dev/null +++ b/apps/codimd/db-status.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# 檢查 CodiMD 資料庫 Port Forward 狀態 + +echo "=== CodiMD 資料庫 Port Forward 狀態 ===" + +if pgrep -f "port-forward.*codimd-db" > /dev/null; then + PIDS=$(pgrep -f "port-forward.*codimd-db") + echo "✅ Port-forward 正在運行" + echo " PID(s): $PIDS" + + # 檢查 port 是否可連接 + if nc -z localhost 5432 2>/dev/null; then + echo "✅ Port 5432 可連接" + else + echo "⚠️ Port 5432 無法連接" + fi + exit 0 +else + echo "❌ Port-forward 未運行" + echo "" + echo "啟動方式: ./db-port-forward.sh" + exit 1 +fi