Dockerfile
- 기본적으로 Multi-Builder 사용 (builder-image / runtime-image)
- 만약 linux 에서 제공하는 도구(vi 등)를 쓰고 싶다면 설치 후 runtime-image 에 복사 해야 함
- 프로젝트명 : mysite / 실행 log는 ./access.log 에 기록
- 배포는 uvicorn에 gunicorn을 worker로 사용하여 실행 (worker 갯수는 cpu 코어 갯수 * 2)
- 로컬에 배포 하고 싶다면 ${SERVER_IP} 를 수정 (ex. 127.0.0.1 / 0.0.0.0 )
#################### Server Build ####################
FROM python:3.11-slim AS builder-image
RUN apt-get update && apt-get install -y --no-install-recommends \
locales rdate openssl ca-certificates libxml2 libmariadb-dev && \
localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 && \
apt clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENV PYTHONUNBUFFERED=1
# Install Packages
COPY requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
#################### Multi-stage Build ####################
FROM python:3.11-slim AS runtime-image
# Timezone 변경
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# Set Env
ENV PROJECT_NAME "mysite"
ENV SERVER_IP "0.0.0.0"
ENV SERVER_PORT 8000
ENV TZ='Asia/Seoul'
ENV LOG_PATH="./access.log"
# 파일 복사
COPY .local.env ./
COPY --from=builder-image /usr/local/bin /usr/local/bin
COPY --from=builder-image /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
WORKDIR /usr/src/app
COPY . .
# django-ninja 실행
CMD gunicorn ${PROJECT_NAME}.asgi:application -k uvicorn.workers.UvicornWorker --workers 2 --access-logfile ${LOG_PATH} --bind ${SERVCER_IP}:${SERVER_PORT}