본문 바로가기

개발/장고로 내 사이트 만들기

(8) (Django 개발부터 배포까지) Django AWS, Docker(Nginx+gunicorn)로 배포하기 -2-

이번 포스팅은 전 포스팅에서 만들어둔 EC2 인스턴스에 우리가 작성한 코드를 올려 배포해 볼게

 

주로 윈도우 환경에서는 Putty(SSH) + 파일질라(SFTP) 프로그램을 사용해서 배포를 많이 하시죠

 

프로그램 두개를 쓰다보니 저는 좀 별로 더라구요

 

그래서 제가 정말 유용하게 쓰고있는 프로그램도 하나 소개 해들게용

 

바로 MobaXterm 입니다. 

 

푸티보다 사용하기도 편하고 보기도 좋고 SSH+SFTP를 같이쓸수있어서 진짜 편합니다 굳굳

 

MobaXterm사용해서 배포 진행해볼게여~

 

다운로드 

https://moba.softonic.kr/ 

 

MobaXterm

X 서버 및 Unix 명령 세트가있는 향상된 터미널

moba.softonic.kr

MobaXterm실행 초기화면

Remote Host - 탄력적IP 입력

Use private key 체크후 다운 받아둔 AWS 키 페어 올리고 OK 눌러 주세요

logon as : ubunut 입력 후 엔터

연결 성공

Docker를 이용해 배포 할 것 이기 Docker를 설치 해줄게요

 

Docer, Dockerfile, Docker-compsoe 이것들을 설명하기에는 이미 글이 너무 길고 제가 알려 드리는 것 보단

 

다른 블로그 참고하시면 좋을것 같습니다

 

https://leffept.tistory.com/330 참고하세요

 

[Django]Docker-compose로 Django 환경 구축하기 1 - Django

이번 시리즈는 기존에 존재하는 장고 프로젝트나, 새로 시작하는 프로젝트를 Docker-compose를 활용하여 도커라이징 하는 과정에 대해서 올릴 것이다. 일반적으로 Django에 Postgres, Nginx, Redis, RabbitMQ, C

leffept.tistory.com

Docker 설치하기

 

복붙해서 설치 해주세요

1
----------------------

$ sudo apt-get update

----------------------

2

----------------------

$ sudo apt-get install \

  apt-transport-https \

  ca-certificates \ curl \

  gnupg \ lsb-release

----------------------

docek -v 입력해서 버전확인 sodu apt install docker.io 입력하라고 나오네요 입력해줍니다

.

 

 

ubuntu@ip-172-31-38-206:~$ docker -v
Docker version 20.10.7, build 20.10.7-0ubuntu5~20.04.2

이런식으로 나오면 오케이입니다

 

그리고 Docker-compose도 설치해 줄게요!!!!!!!!!!!!!!

 

sudo apt install docker-compose

y/n나오면 y 입력해주세요


이제 저랑 같은 방식으로 배포를 하려면 아래 이미지에있는 3가지 파일이 필요한데요

 

다 설명 할 수가 없으니 여기 올려 두려고했는데 설정 파일이라그런지 올라가질 않네요 ㅠㅠ

 

텍스트로 올려둘게요

 

--------------Nginx-conf  ----------

user nginx;   #nginx 권한 
worker_processes auto;   #cpu core 

events {
    worker_connections 1024;  #동시 접속 처리 지정 값, worker_processes*worker_connections 
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" "$request_uri" "$uri"'
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile on;
    keepalive_timeout 65;

    upstream docker-django_gunicorn {
        server django_gunicorn:8000;
    }

  server {
    listen 80;
    listen [::]:80;
    client_max_body_size 10M;       #업로드 용량 10mb

    location /static/ {
        alias /data/static/;
    }

    location /media/ {
        alias /data/media/;
    }

    location ~ /.well-known/acme-challenge {
        allow all;
        root /usr/share/nginx/html;
    }


    location /ws {
        proxy_pass http://docker-django_gunicorn;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location / {
        proxy_pass http://docker-django_gunicorn;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

  server {
client_max_body_size 10M;

        location /static/ {
            alias /data/static/;
        }

location /media/ {
    alias /data/media/;
}


        location / {
            proxy_pass http://docker-django_gunicorn;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }
}

 

--------Dockerfile------------------------

 

FROM python:3.9.0

RUN mkdir /root/.ssh/

ADD ./.ssh/id_rsa /root/.ssh/id_rsa

RUN echo "01-17  update"

RUN chmod 600 /root/.ssh/id_rsa

RUN touch /root/.ssh/knwon_hosts

RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

WORKDIR /home/

RUN git clone git@github.com:Butler-SIM/sim_jango_pp.git

WORKDIR /home/sim_jango_pp/

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

RUN pip install mysqlclient


EXPOSE 8000

CMD ["bash", "-c", "python manage.py collectstatic --noinput --settings=server_settings.settings.deploy && gunicorn server_settings.wsgi --env DJANGO_SETTINGS_MODULE=server_settings.settings.deploy --bind 0.0.0.0:8000"]

 

 

----------docker-compose----------------------

 

version: "3.7"
services:
  nginxproxy:
    image: nginx:1.20.0
    networks:
      - network
    ports:
      - 80:80
      - 443:443
    volumes:
      - /home/ubuntu/nginx.conf:/etc/nginx/nginx.conf
      - static:/data/static
      - media:/data/media
      - /home/ubuntu/myweb:/usr/share/nginx/html
    depends_on:
      - django_gunicorn

  django_gunicorn:
    image: django-sim:1.1.1
    networks:
      - network
    volumes:
      - static:/home/sim_jango_pp/staticfiles
      - media:/home/sim_jango_pp/media




networks:
  network:

volumes:
  static:
  database:
  media:



 

 

.

 

깃허브 로그인 없이 clone받기위해/private 레포 clone 받을수있게   ssh keygen 발급 받아 줍니다.

2. ssh-keygen

터미널에서 ssh-keygen명령어를 입력해 ssh key값을 새로 받아옵니다.

전부 엔터 눌러주면 됩니다


cd ~/.ssh 명령을 통해 .ssh폴더에 들어가서 cat id_rsa.pub를 통해 public 키를 확인 후 복사해줍니다.


이제 Github에 ssh-key를 새로 등록하기 위해 Github Setting -> SSH and GPG keys -> New SSH key에 들어갑니다.

 

복사를 잘 해주셔야 합니다

 

Dockerfile - 

바꿔야 할 부분 -

CMD ["bash", "-c", "python manage.py collectstatic --noinput --settings=server_settings.settings.deploy && gunicorn server_settings.wsgi --env DJANGO_SETTINGS_MODULE=server_settings.settings.deploy --bind 0.0.0.0:8000"]

 

server_settings.settings.deploy <- 이부분은 제  설정이라서  바꿔 주셔야합니다

아마 기본 설정이면   -> 본인프로젝트이름.settings 이렇게 하시면 될겁니다

 

제 settings 설정입니다

 

 

Docker-compose.yml -

 

빨간 글씨 부분 Dockerfile 빌드할때 꼭 맞춰서 해야하니 잘 바꿔주세요


이제 중요합니다!

 

 

sudo docker buidld -t "본인이 설정한 이미지 이름 " .           <- 마지막에 공백입력 후 .까지 입력해주세요

 

docker-compose파일 설정에서 구니콘 부분에 저는 장고 프로젝트 이미지명을 django-sim:1.1.1로 설정해놨기 때문에

 

Dockerfile 빌드할때 이미지 이름을 django-sim1.1.1로 빌드한 것 입니다 잘 맞춰 주지 않으면

 

배포가 되지않으니 신경써주세요

 


빌드 완료.

 

이제 마지막으로 Docker-compose를 이용해서 배포 마무리 해주면 끝입니다.

 

 

sudo docker-compose up -d  입력 해주세욧

이런식으로 나왔다면 성공입니다!!!!!!!!!!!!!


주소창에 탄력적 IP입력해보면!! 우리가 작성한 코드가 배포가 되었습니다 굳굳굳굳굳

 

 

수고하셨습니다~

 

이제 깃허브 private로 변경해야겠네요~

 

내용이 많아서 한번 정리하고 올려야지 올려야지 하다가 계속 못올리고 있었는데 드디어 올리게 되었습니다.

 

저도 처음부터 아무 설정도 안되어있는 인스턴스에 올려보는게 처음이기도 했고

 

블로그를 최대한 쉽게 써보려고 하다보니 글이 많이 늦어졌네요

 

예전 JAVA개발자로 일할때  스프링 배포하는건 참 쉬웠는데.. Django+Docker로 배포하려니 복잡합니다~

 

다음 포스팅으로는 도메인 연결, SSL인증까지 적용하는 포스팅으로 찾아 오겠습니다~