이번 포스팅은 전 포스팅에서 만들어둔 EC2 인스턴스에 우리가 작성한 코드를 올려 배포해 볼게
주로 윈도우 환경에서는 Putty(SSH) + 파일질라(SFTP) 프로그램을 사용해서 배포를 많이 하시죠
프로그램 두개를 쓰다보니 저는 좀 별로 더라구요
그래서 제가 정말 유용하게 쓰고있는 프로그램도 하나 소개 해들게용
바로 MobaXterm 입니다.
푸티보다 사용하기도 편하고 보기도 좋고 SSH+SFTP를 같이쓸수있어서 진짜 편합니다 굳굳
MobaXterm사용해서 배포 진행해볼게여~
다운로드
MobaXterm실행 초기화면
Remote Host - 탄력적IP 입력
Use private key 체크후 다운 받아둔 AWS 키 페어 올리고 OK 눌러 주세요
logon as : ubunut 입력 후 엔터
연결 성공
Docker를 이용해 배포 할 것 이기 Docker를 설치 해줄게요
Docer, Dockerfile, Docker-compsoe 이것들을 설명하기에는 이미 글이 너무 길고 제가 알려 드리는 것 보단
다른 블로그 참고하시면 좋을것 같습니다
https://leffept.tistory.com/330 참고하세요
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 이렇게 하시면 될겁니다
Docker-compose.yml -
이제 중요합니다!
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인증까지 적용하는 포스팅으로 찾아 오겠습니다~
'개발 > 장고로 내 사이트 만들기' 카테고리의 다른 글
(9) (Django 개발부터 배포까지) Django 사이트 도메인 연결(호스팅케이알) (0) | 2022.01.18 |
---|---|
(7) (Django 개발부터 배포까지) Django AWS, Docker(Nginx+gunicorn)로 배포하기 -1- (0) | 2022.01.17 |
(6) (Django 개발부터 배포까지) Django AWS RDS 연동하기 (0) | 2021.12.13 |
(5) (Django 개발부터 배포까지) Django Mysql 연동하기 (0) | 2021.12.04 |
(4) (Django 개발부터 배포까지) 부트스트랩 포트폴리오 템플릿 적용하기 (3) | 2021.12.02 |
(3) (Django 개발부터 배포까지) 파이썬 requirements.txt로 패키지 한 관리하기 (0) | 2021.11.29 |