🎃

FastAPI + Postgresの環境構築 (DockerCompose使用)

2022/07/22に公開

docker-composeを使ってfastapi + postgresの環境構築をする際に少しハマったので、メモ

依存パッケージを先にインストール

psycopg2をインストールする際に、

Error: pg_config executable not found.

というエラーが出た。
これはpsycopg2に必要なパッケージが入っていないからだった。
というわけで依存パッケージをインストール

RUN python3 -m pip install -r /app/requirements.txt --no-cache-dir

RUN apk add --no-cache postgresql-libs \
 && apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev \
 && python3 -m pip install -r /app/requirements.txt --no-cache-dir \
 && apk --purge del .build-deps

https://stackoverflow.com/questions/46711990/error-pg-config-executable-not-found-when-installing-psycopg2-on-alpine-in-dock

Dockerfile

FROM python:3.9-alpine

ENV LANG C.UTF-8
ENV TZ Asia/Tokyo

WORKDIR /app

# pip installs
COPY ./requirements.txt requirements.txt

RUN apk add --no-cache postgresql-libs \
 && apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev \
 && python3 -m pip install -r /app/requirements.txt --no-cache-dir \
 && apk --purge del .build-deps

COPY . /app

# FastAPIの起動
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml

version: '3.4'
services:
  server:
    build:
      context: ./app
      dockerfile: Dockerfile
    volumes:
      - ./app/:/app/
      - /var/run/docker.sock:/var/run/docker.sock
    command: uvicorn main:app --reload --workers 1 --host 0.0.0.0 --port 8000
    env_file:
      - ./app/.env
    ports:
      - 8000:8000
    depends_on:
      - db

  db:
    image: postgres:13.1-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./app/.env
    ports:
      - 5432:5432

volumes:
    postgres_data:

requirement.txt

fastapi
uvicorn

databases[postgresql]==0.4.1
SQLAlchemy==1.3.22
alembic==1.5.2
psycopg2==2.8.6

Discussion