ngrok で外部公開

コンテナ内のローカル WebUI(Streamlit 等)を、スマホなど外から触れるようにする型(gemini-rag の start.sh)。

  • CLI でなく pyngrok(Python):from pyngrok import ngrok を使えば ngrok CLI のインストール不要。 ngrok.set_auth_token(...) → ngrok.connect(8501, bind_tls=True, auth=f"user:{pw}")。 bind_tls=True で https、auth="user:pass" でトンネルにBasic 認証をインライン付与(生 URL を晒さない)。
  • .env を先に展開:set -a; source .env; set +a で NGROK_AUTHTOKEN/NGROK_PASSWORD を環境変数に。 読み込み忘れで「authtoken 無し」で落ちるのが定番の罠。
  • 後始末:Streamlit はバックグラウンド起動(→Streamlitをコンテナ越しでserveする)、trap "kill $PID" EXIT と ngrok.kill() で Ctrl+C 時に確実に落とす。起動前に pkill -f streamlit でポート競合も防ぐ。

出典:gemini-rag(gemini-rag/start.sh、CLAUDE.md Step 6)