FastAPIを使用し、Basic認証を実現するための方法を紹介します。
今回は環境構築編となります。
認証機能に必要なデータベースの構築から、開発をスムーズに進めるための最低限の環境構築を行います。
環境構築
全体のディレクトリ構成
example_fastapi/
├ src/
│ └ Dockerfile
│ └ Pipfile
│ └ app/
│ └ main.py
│ └ lib/
│ └ database.py
│ └ example/
│ └ view.py
│ └ models.py
│ └ schemes.py
├ docker-compose.yml
└ nginx/
└ default.conf
docker-composeの作成
まず、FastAPIを動作させるためのDockerコンテナと、認証情報を保存しておくためのデータベースコンテナを準備します。
各コンテナをスムーズに連携できるように、docker-composeを使用して環境を準備します。
今回はデータベースにMySQLを使用します。
- docker-compose.yml
version: '2'
services:
mysql:
image: mysql:5.7
volumes:
- mysql:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_DATABASE: example
MYSQL_USER: example
MYSQL_PASSWORD: password
api:
depends_on:
- mysql
build: src
links:
- mysql
expose:
- 8000
volumes:
- ./src:/var/www/app
command: "run reload"
nginx:
image: nginx
depends_on:
- api
ports:
- 80:80
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
volumes:
mysql:
driver: local
データベースの作成
docker-composeを実行すると自動的にデータベースが作成されます。
テーブルもFastAPIから自動的に作成されるため、細かい設定が必要なければ事前に作成しておく必要はありません。
プロジェクトの作成
FastAPIは自動的にプロジェクトを作成する仕組みがないため、自分でファイルを構築していきます。
まず、FastAPIを動作させるための最低限のファイルを作成します。
機能の実装に関しては次章で行います。
初期ディレクトリ構成
example_fastapi/
└ src/
└ app/
└ main.py
アプリ実行用ファイルの作成
- src/app/main.py
from fastapi import FastAPI
app = FastAPI()
Pipenvファイルの作成
Pythonのライブラリを管理するために、今回はPipenvを使用します。
Pipenvを使用してパッケージ管理するためにPipfileを作成します。
- src/Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
flake8 = "*"
[packages]
click = "==7.0"
fastapi = "==0.45.0"
h11 = "==0.9.0"
httptools = "==0.0.13"
pydantic = "==1.3"
starlette = "==0.12.9"
uvicorn = "==0.11.1"
uvloop = "==0.14.0"
websockets = "==8.1"
sqlalchemy = "*"
pymysql = "*"
passlib = "*"
bcrypt = "*"
email-validator = "*"
[requires]
python_version = "3.7"
[scripts]
start = "uvicorn app.main:app --host 0.0.0.0"
reload = "uvicorn app.main:app --host 0.0.0.0 --reload"
Dockerファイルの作成
Dockerコンテナをビルドするためのファイルを作成します。
- src/Dockerfile
FROM python:3.7
LABEL maintainer "example <example@example.com>"
# Prepare environments
RUN pip install pipenv
COPY Pipfile /var/www/app/Pipfile
WORKDIR /var/www/app
RUN pipenv install
# Copy this project
COPY . /var/www/app
# Configration
EXPOSE 8000
# Execute
ENTRYPOINT ["pipenv"]
CMD ["run", "start"]
Nginxの設定ファイル作成
FastAPIをプロキシするためのNginxの設定ファイルを作成します。
- nginx/default.conf
upstream backend {
server api:8000;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://backend;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
アプリを実行
docker-composeは開発モード(ファイルが編集されたら自動で再起動する)で動作するようにしているので、docker-composeでアプリを実行します。
実行
docker-compose build
dokcer-compose up
動作確認
ブラウザから [http://localhost/docs
] にアクセスし、OpenAPIの画面が表示されるか確認します。
OpenAPIの画面が表示されれば無事動作完了です。
終わりに
以上で最低限のFastAPIの環境構築は完了です。
次章から、認証機能の実装を書いていきます。