無料でサーバーとして使える便利なRenderですが、いろいろとカスタマイズする場合、Dockerを使うのが便利です。
RenderはDockerに対応していたので、そのメモです。
Dockerを使う方法
Dockerを使うのは非常に簡単で、New > Create Web serviceでWebサービスを作成。
リンクするgithubリポジトリを選択しますが、この時にリポジトリにDockerfileが入っていると自動的に設定されるようです。
languageがDockerになっていればOKです。
その状態でDeployすれば、Dockerを使った環境構築が可能です。
具体例
例えば、Seleniumを使ったFast-APIアプリを作ってみます。
以下は、Selenium を使って指定した URL のタイトルを取得する FastAPI アプリの実装例です。このアプリケーションでは、リクエストに応じて URL を受け取り、Selenium を使用してそのページのタイトルを取得して返します。
FastAPI アプリケーションコード
from fastapi import FastAPI, HTTPException, Query
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
app = FastAPI()
@app.get("/get-title")
def get_title(url: str = Query(..., description="URL of the webpage to fetch the title")):
"""
Fetch the title of the given URL using Selenium.
"""
try:
# ChromeOptions の設定
options = Options()
options.add_argument("--headless")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
# WebDriver をセットアップ(ChromeDriverManager を使用してドライバを自動管理)
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
# 指定された URL を取得
driver.get(url)
title = driver.title
driver.quit()
# タイトルを返す
return {"url": url, "title": title}
except Exception as e:
# エラーが発生した場合に例外を返す
raise HTTPException(status_code=500, detail=str(e))
Docker設定など
以下のような Dockerfile
を用意します。
Dockerfile
# ベースイメージ
FROM python:3.12-slim
# 作業ディレクトリを設定
WORKDIR /app
# 必要なツールをインストール
RUN apt-get update && apt-get install -y \
wget \
curl \
gnupg \
unzip \
&& apt-get clean
# Google Chrome のインストール
RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \
&& apt-get update && apt-get install -y \
google-chrome-stable
# Python パッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションコードをコピー
COPY . .
# アプリケーションの起動
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
requirements.txt
fastapi
uvicorn
selenium
webdriver-manager
アプリケーションの実行方法
ブラウザまたは renderのアプリURL+/docs
などで以下のエンドポイントを呼び出します。
GET http://xxxx.render.com/get-title?url=https://xxxx.com/
レスポンス例:
{
"url": "https://l.com/",
"title": "title"
}
これで、Selenium を利用した FastAPI アプリケーションを簡単にデプロイできます。