[AWS] AWS에 nginx와 docker로 Django 프로젝트 빌드하기
nginx를 활용하지 않고, 단순히 ec2에서 docker를 실행하면 서버와의 ssh 연결이 끊기면 서버도 끊기기 때문에 nginx를 사용합니다.
이전에 작성한 docker로 djagno 프로젝트 빌드하기에서 django 프로젝트 폴더 이외에 nginx를 설치할 폴더를 만들어 줍니다.
nginx 이미지와 이전에 만든 django 이미지 연결:
django 프로젝트 폴더로 이동 -> vi uwsgi.ini -> 아래 입력
[uwsgi]
socket = /srv/docker-django/django.sock
master = true
processes = 1
threads = 2
chdir = /srv/docker-django
#git clone시 생성되는 폴더 이름(리포지토리 명)
module = python_django_fastcampus.wsgi
logto = /var/log/uwsgi/uwsgi.log
log-reopen = true
vacuum = true
-> cd ..
도커 compose 다운받기 :
sudo curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s-
uname -m` -o /usr/local/bin/docker-compose
도커 compose 권한 설정 :
sudo chmod +x /usr/local/bin/docker-compose -> docker-compose
nginx 설정:
cd nginx -> vi nginx.conf
아래 입력
user root;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.tpyes;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSlv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/sites-enabled/*;
}
nginx-app 설정:
nginx 폴더에서 vi nginx-app.conf하여 아래 내용 작성
upstream uwsgi {
server unix:/srv/docker-django/apps.sock;
}
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 128M;
location / {
uwsgi_pass uwsgi;
include uwsgi_params;
}
location /media/ {
alias /srv/docker-django/.media/;
}
location /static/ {
alias /srv/docker-django/.static/;
}
}
Dockerfile 생성:
nginx 폴더에서 vi Dockerfile하여 아래 내용 작성
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
COPY nginx-app.conf /etc/nginx/sites-available/
RUN mkdir -p /etc/nginx/sites-enabled/\
&& ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx 디렉토리에서 docker 이미지 빌드:
docker build -t docker/nginx .
user가 80번 포트로 접근했을 때 서버내의 80번 포트로 전송하도록 실행:
- 위에서 nginx의 EXPOSE를 80으로 해줬음
docker run -p 80:80 docker/nginx
nginx가 제대로 실행되기 위해서는 django가 먼저 떠야한다!!
django에 들어있는 socket file을 보고, nginx가 떠야하기 때문!
docker-compose 사용하여 순서대로 컨테이너가 뜨도록 관리:
cd .. 하여 docker-django 프로젝트 폴더로 이동 ->
vi docker-compose.yml하여 아래 내용 작성
# docker compose version3 사용
version: '3'
# services 하위의 내용이 만들고 싶은 컨테이너들이 된다.
services:
nginx:
container_name: nginx
build: ./nginx
image: docker-django/nginx
restart: always
ports:
- "80:80"
volumes:
# working directory 설정
- ./python_django_fastcampus:/srv/docker-django
- ./log:/var/log/uwsgi
# django 컨테니너를 먼저 실행!
depends_on:
- django
django:
container_name: django
build: ./python_django_fastcampus
image: docker-django/django
restart: always
command: uwsgi --ini uwsgi.ini
volumes:
- ./python_django_fastcampus:/srv/docker-django
- ./log:/var/log/uwsgi
현재 각각 만들어 놓은 nginx 이미지와 django 이미지가 있어 삭제해주기:
- 위의 docker-compose.yml을 사용하여 두 이미지를 띄울 수 있음
docker image ls
docker image rm --force (image id)
- container가 돌고 있으면 삭제가 안되어 container stop 후 삭제
docker ps
docker stop (container id)
docker compse 실행:
-d는 background 실행
docker-compose up -d --build
*** 참고로 폴더명과 asgi.py, settings.py, wsgi.py 내의 폴더명을 잘 맞춰줘야 함!
Author And Source
이 문제에 관하여([AWS] AWS에 nginx와 docker로 Django 프로젝트 빌드하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@coffiter/AWS-AWS에-nginx와-docker로-Django-프로젝트-빌드하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)