Render.comでDockerを使う方法

IT・プログラミング

無料でサーバーとして使える便利な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 アプリケーションを簡単にデプロイできます。

タイトルとURLをコピーしました