Dockerfile로 nginx + gunicorn + django 서버를 구성하여 띄웠다. 사실 생각해보면 별거 아닌데, docker에 대한 지식 부족으로 인한 환장의 콜라보로 시간을 버렸다. 괜히 docker라는 거에 겁을 먹었던 거 같다. 도커 파일 없이 그냥 패키지 설치하면서는 잘만 구성하여 띄웠는데... Gpt 가 많이 도와줬다... 고맙다... 어쨌든 다신 이런 일이 없게 기록을 남기자
Dockerfile 만들기
Dockerfile을 만들기에 앞서 생각을 해보자. 만약 Ubuntu 환경에서 nginx와 django를 띄우려면 어떻게 해야할까? 간단하다. nginx를 띄우고 wsgi로 django를 연결시키면 된다. 이걸 Dockerfile에 그대로 적용하면 된다.
1. nginx를 설치한다.
2. nginx 설정에 들어가서 was(django)로 routing 한다.
3. wsgi(gunicorn)를 이용해서 django와 연결한다.
대략 이런 흐름이다. 용어는 내가 이해한대로 썼기 때문에 틀릴 수 있다.
그렇다면 이제 Dockerfile을 살펴보자.
FROM python:3.8 # 1
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1 # 2
ENV PYTHONUNBUFFERED 1 # 3
# Install dependencies
RUN apt-get update && \ # 4
apt-get install -y nginx && \ # 5
rm -rf /var/lib/apt/lists/*
# Set up nginx
RUN rm /etc/nginx/sites-enabled/default # 6
COPY nginx.conf /etc/nginx/sites-enabled/ # 7
# Set up Django app # 8
RUN mkdir /app
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
## static file collect
RUN python manage.py collectstatic --no-input
# Expose port
EXPOSE 80
# Start services
CMD service nginx start && \ # 9
DJANGO_SETTINGS_MODULE=configs.dev gunicorn --bind 0.0.0.0:8000 configs.wsgi:application
line별로 살펴보자.
1번 라인은 BaseImage를 설정한다. 난 일단 Python 3.8 버전을 사용했지만 다른 버전을 써도 당연히 무방하다.
2번 라인은 .pyc 를 만들지 않도록 하는 설정이라고 한다. 자세한 내용은 여기 참조.
3번 라인은 buffer의 아웃풋을 허용하지 않고 바로 프린트를 해준다. 자세한 내용은 여기 참조
4와 5번 라인은 우분투 계열의 패키지 관리 도구를 업데이트 하고 nginx를 설치하는 명령이다.
6번은 nginx의 설정 파일을 삭제하고 7번의 내가 설정한 파일을 nginx의 설정파일로 대체한다.
8번은 django의 세팅이다.
마지막으로 9번은 nginx를 시작하고, django를 gunicorn으로 실행시키는 명령이다.
nginx.conf 파일은 다음과 같이 만들었다.
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://0.0.0.0:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /var/www/html/;
}
}
'DevOps' 카테고리의 다른 글
도커 컴포즈 파일 작성하기 (0) | 2023.03.10 |
---|---|
주절주절 + Docker 이미지 효율적으로 빌드하기 (0) | 2023.03.09 |
따라하며 배우는 도커와 CI 환경 - 3. 직접 도커 이미지 생성하기 (0) | 2023.03.05 |
따라하며 배우는 도커와 CI 환경 - 1. 도커란 (0) | 2023.03.03 |
Github Actions CI/CD 알아보기 - 1 (1) | 2023.02.24 |