from fastapi import FastAPI | |
import uvicorn | |
import asyncio | |
from pyngrok import ngrok, conf | |
import threading | |
# | |
# 設定 | |
FASTAPI_PORT = 7861 | |
NGROK_AUTHTOKEN = "2fAuM2mXP4rwyzcb6T7EjY8zkL6_4mkaaSLXVpf1enNc8c3Ff" | |
# FastAPI アプリ | |
app = FastAPI() | |
def root(): | |
print("📍 エンドポイント hit!") | |
return {"message": "Hello from FastAPI with ngrok!"} | |
# ngrok 起動スレッド | |
def start_ngrok(): | |
conf.get_default().auth_token = NGROK_AUTHTOKEN | |
public_url = ngrok.connect(FASTAPI_PORT) | |
print(f"🚪 公開URL: {public_url}") | |
threading.Thread(target=start_ngrok, daemon=True).start() | |
# 非同期で uvicorn サーバーを起動(VSCodeでも例のエラーが出ない方法) | |
async def start_server(): | |
config = uvicorn.Config(app=app, host="0.0.0.0", port=FASTAPI_PORT) | |
server = uvicorn.Server(config) | |
await server.serve() | |
# すでにイベントループが動いてるか確認して処理を分ける | |
try: | |
asyncio.get_running_loop().create_task(start_server()) | |
except RuntimeError: | |
asyncio.run(start_server()) | |