🤖
【2024年版】何も考えずにAPIサーバーをpythonを建てたい話(Docker+FastAPI+mongo)
何をしたいのか?
DockerとFastAPIを使ってpython製のAPIサーバーを簡単に建てる話です。
今回の記事は、自分のためのメモ書きみたいな意味を含んでいるので注意です。
コマンドの説明は、特に載せません。ググレカス。
今回、何も考えずにネットで拾った情報(公式リファレンスetc)を使いまくって繋ぎ合わせています。余計なコマンドがあるかもしれませんが、そこはそっと替えておいてください。
ちなみに、DBにmongoを使用していますが、これは他の方が使ってたElasticSearchを使ったシステムの引継ぎの影響を受けています。
なので、お好きなDBをお使いください。
前提
下記は既にインストール済みであることが、前提で書いています。
環境は、windows11のwsl2を使用しています。が、コマンド的にはlinuxでも同様に行けるはずです。
- python3
- docker
設定
0.ファイル階層
デフォルトのファイル階層は、下記の通りです。
参考にしてください。後ろに/
が付いている項目は、フォルダです。
- /
- api-src/
- main.py
- requirements.txt
- mongo/
- docker-compose.yml
- Dockerfile-api
- .env
- api-src/
1.dockerのファイル設定
docker-compose.yml
services:
mongo:
image: mongo
networks:
- mongo-compose-network
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- ./mongo:/data/db
user: ${UID}:${GID}
mongo-express:
networks:
- mongo-compose-network
image: mongo-express
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: password
ME_CONFIG_MONGODB_URL: "mongodb://root:example@mongo:27017/"
api-sever:
networks:
- mongo-compose-network
build:
context: .
dockerfile: Dockerfile-api
ports:
- 8080:8000
volumes:
- ./api-src:/usr/src/app:ro
networks:
mongo-compose-network:
driver: bridge
Dockerfile-api
FROM python:3
WORKDIR /usr/src/app
COPY ./api-src/requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
UID=1002
GID=1002
.env
については、自分が使用しているLinuxアカウントのUID,GIDを記入してください。
2.pythonのHelloWorldとrequirements.txt
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
async def hello():
return {"message": "hello world! (/Hello)"}
@app.get("/")
async def hello():
return {"message": "hello world (Home)!"}
requirements.txtの生成は、下記のコマンドを打って生成します。
なお、requirements.txtの生成は、追加ライブラリがあるたびに、行います。
python3 -m pip freeze > requirements.txt
起動
Dockerfileやrequirements.txtを更新した場合
docker compose up --build
その他、起動のみの場合やソースコード変更の場合
docker compose up
なお、ソースコード変更をした場合は、コンテナを再起動せずとも、勝手にリロード入ります。
APIサーバーは、8080ポート(http://localhost:8080)で確認できます。
また、DBの中身を知る場合は、8081ポート(http://localhost:8081)で確認できます。
オワリ!
ここまで読んでくださり、乙であります!!!
Discussion