41 lines
1.4 KiB
Bash
41 lines
1.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# PostgreSQL MCP トンネル + サーバー起動スクリプト
|
||
|
|
# 使い方: .mcp.json から自動呼び出し
|
||
|
|
# 認証情報は .mcp.json (gitignore済み) に記載
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
VPS_HOST="root@85.131.245.239"
|
||
|
|
VPS_KEY="$HOME/.ssh/soar-enrich-openssh.pem"
|
||
|
|
TUNNEL_PORT=15432
|
||
|
|
CONTAINER="posimai-db-1"
|
||
|
|
|
||
|
|
# Docker コンテナ IP を動的取得(コンテナ再作成時も対応)
|
||
|
|
DOCKER_IP=$(ssh -i "$VPS_KEY" -o BatchMode=yes -o ConnectTimeout=10 "$VPS_HOST" \
|
||
|
|
"docker inspect ${CONTAINER} --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'" 2>/dev/null)
|
||
|
|
if [ -z "$DOCKER_IP" ]; then
|
||
|
|
echo "[MCP] ERROR: ${CONTAINER} の IP 取得失敗。VPS/コンテナを確認してください。" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "[MCP] ${CONTAINER} IP: ${DOCKER_IP}" >&2
|
||
|
|
|
||
|
|
# 既存トンネルの確認
|
||
|
|
if ! ss -tlnp 2>/dev/null | grep -q ":$TUNNEL_PORT" && \
|
||
|
|
! netstat -an 2>/dev/null | grep -q "127.0.0.1:$TUNNEL_PORT"; then
|
||
|
|
echo "[MCP] SSH トンネル起動中..." >&2
|
||
|
|
ssh -i "$VPS_KEY" \
|
||
|
|
-o BatchMode=yes \
|
||
|
|
-o ExitOnForwardFailure=yes \
|
||
|
|
-o ServerAliveInterval=30 \
|
||
|
|
-fN \
|
||
|
|
-L "${TUNNEL_PORT}:${DOCKER_IP}:5432" \
|
||
|
|
"$VPS_HOST"
|
||
|
|
sleep 1
|
||
|
|
echo "[MCP] トンネル起動完了 localhost:${TUNNEL_PORT}" >&2
|
||
|
|
else
|
||
|
|
echo "[MCP] トンネル既に起動済み localhost:${TUNNEL_PORT}" >&2
|
||
|
|
fi
|
||
|
|
|
||
|
|
# MCP サーバー起動 (接続文字列は .mcp.json の引数から渡される)
|
||
|
|
exec "$@"
|