Django 서비스 AWS로 배포하기 - [1] 프로젝트 준비와 AWS 서버 대여
지난 번 포스팅에서는 AWS에서 EC2 컴퓨터를 대여하고 기본적으로 세팅해 보았습니다.
이번 포스팅에서는 git과 github을 통해 프로젝트를 업로드하고 EC2 서버에 내려 받을 수 있도록 설정해보겠습니다.
github repository 만들기
EC2 서버에 내 프로젝트를 업로드 하는 방법은 여러가지가 있습니다. 1) 파일질라나 forklift 같은 GUI 형태로 ssh 연결을 할 수 있는 어플을 사용해 드래그하여 옮기는 방법, 2) scp 명령어로 옮기는 방법, 3) git으로 옮기는 방법이 있습니다. 앞 두 개의 방법보다는 git을 이용하는 것이 내 프로젝트를 EC2에 옮기고 버전 관리를 동시에 진행할 수 있는 방법인 것 같아 git을 이용해 프로젝트를 업로드 하도록 하겠습니다.
git은 버전 관리 프로그램으로, 협업 툴로서도 모르는 사람이 없을 정도로 유명합니다. 이번에 처음 써 보신다면 그냥 따라만 하셔도 좋지만, 앞으로 개발을 계속 하실 것 같다면 거의 필수이니 꼭 어디에서든 공부해보시길 추천드립니다. 저도 기회가 되면 정리해두고 싶네요.
먼저, github 계정으로 로그인한 뒤 보이는 start a project를 누르시거나 좌측 repository 메뉴에서 new를 클릭해주세요.
Repository name칸에 이름을 입력하시고 create 해주세요.
성공적으로 생성하면 이 다음부터 어떻게 해야하는지 안내를 해줍니다.
먼저 나의 프로젝트를 이 레포지토리에 업로드 해야합니다. 로컬 컴퓨터에서 프로젝트 폴더 안에 manage.py가 있는 곳으로 터미널에 접속해주세요. cd 명령어로 처음에 만들었던 프로젝트 폴더(저의 경우엔 mysite폴더)안으로 들어가시면 됩니다. 다음과 같은 파일이 있는 위치로요! ls 명령어를 쳤을 때 다음 파일들이 나오면 됩니다.
├── mysite
├── main
├── manage.py
├── requirements.txt
└── db.sqlite3
여기서, git을 초기화 합니다. 이 폴더(프로젝트 폴더 안이죠?) 전체를 관리하겠다는 선언이라고 생각하시면 됩니다.
$ git init
git에 현재 폴더 전체를 담습니다.
$ git add .
담은 파일들을 업로드할 레포지토리 주소를 origin이라는 이름으로 추가합니다.
$ git remote add origin [레포지토리 주소]
레포지토리 주소는 위 안내 화면에서 git remote add origin 뒤의 주소를 입력하시면 됩니다. 즉, 저의 경우엔 https://github.com/nero96in/django-deploy-test.git 것이죠.
변경 사항을 모으고, 어떤 것이 바뀌었는지 알려주는 메세지를 붙입니다. 이를 commit이라고 합니다.
$ git commit -m "first commit"
담은 파일들을 origin이라는 이름의 레포지토리 주소로 업로드합니다.
$ git push origin master
이 순서대로 진행을 했을 때, 안내 화면에서 새로고침을 하면
이렇게 업로드가 된 것을 확인할 수 있습니다. 이 다음 부터 로컬 컴퓨터에서 파일들이 수정되면
$ git add .
$ git commit -m "무엇을 했나"
$ git push origin master
순으로 업데이트 하시면 됩니다.
우리는 이제 이 업로드 된 내용을 다시 EC2 서버에 clone 할 것입니다.
AWS EC2 서버에서 git clone 하기
git clone이란 repository에 올려 놓은 프로젝트를 복제하는 명령어입니다. 이 섹션에서 git clone은 서버에 프로젝트를 다운로드 하는데 사용이 되고, 이후에는 서버와 로컬에서의 버전 관리를 위해 쓰는 첫번째 명령어로서 쓰였다고도 할 수 있습니다.
github을 통해 업로드한 파일들을 서버에 원격 접속하여 clone하도록 하겠습니다. 먼저 서버에 접속해줍니다.
$ ssh -i ~/.ssh/deploy_test.pem ubuntu@ec2-15-164-212-231.ap-northeast-2.compute.amazonaws.com
프로젝트 파일들은 모두 /srv/ 폴더에 다운로드 받을 것입니다. 따라서 이 폴더를 현재 유저인 ubuntu의 폴더로 소유권을 바꾸어 줍니다. sudo는 관리자 권한으로 명령함을 의미하고, chown은 change owner의 줄임말로 폴더의 소유권을 변경할 때 사용합니다.
$ sudo chown -R ubuntu:ubuntu /srv/
소유권이 잘 바뀌었는지 확인하려면 루트 폴더(/) 로 이동한 뒤, 파일 리스트를 자세히 표시 (ls -al)하면 srv 폴더의 소유자가 ubuntu로 바뀌었음을 알 수 있습니다.
$ cd /
$ ls -al
total 96
drwxr-xr-x 23 root root 4096 Mar 14 19:32 .
drwxr-xr-x 23 root root 4096 Mar 14 19:32 ..
drwxr-xr-x 2 root root 4096 Mar 14 19:31 bin
drwxr-xr-x 3 root root 4096 Mar 14 19:32 boot
drwxr-xr-x 15 root root 2980 Mar 14 18:59 dev
drwxr-xr-x 89 root root 4096 Mar 14 19:36 etc
drwxr-xr-x 3 root root 4096 Mar 14 18:59 home
lrwxrwxrwx 1 root root 31 Mar 14 19:32 initrd.img -> boot/initrd.img-4.15.0-1060-aws
lrwxrwxrwx 1 root root 31 Jan 12 17:42 initrd.img.old -> boot/initrd.img-4.15.0-1057-aws
drwxr-xr-x 20 root root 4096 Mar 14 19:36 lib
drwxr-xr-x 2 root root 4096 Jan 12 17:33 lib64
drwx------ 2 root root 16384 Jan 12 17:38 lost+found
drwxr-xr-x 2 root root 4096 Jan 12 17:33 media
drwxr-xr-x 2 root root 4096 Jan 12 17:33 mnt
drwxr-xr-x 2 root root 4096 Jan 12 17:33 opt
dr-xr-xr-x 103 root root 0 Mar 14 18:59 proc
drwx------ 4 root root 4096 Mar 14 18:59 root
drwxr-xr-x 25 root root 920 Mar 14 20:27 run
drwxr-xr-x 2 root root 12288 Mar 14 19:31 sbin
drwxr-xr-x 5 root root 4096 Mar 14 18:59 snap
drwxr-xr-x 2 ubuntu ubuntu 4096 Jan 12 17:33 srv
dr-xr-xr-x 13 root root 0 Mar 14 18:59 sys
drwxrwxrwt 9 root root 4096 Mar 14 20:27 tmp
drwxr-xr-x 10 root root 4096 Jan 12 17:33 usr
drwxr-xr-x 13 root root 4096 Jan 12 17:37 var
lrwxrwxrwx 1 root root 28 Mar 14 19:32 vmlinuz -> boot/vmlinuz-4.15.0-1060-aws
lrwxrwxrwx 1 root root 28 Jan 12 17:42 vmlinuz.old -> boot/vmlinuz-4.15.0-1057-aws
이제 /srv/ 폴더로 이동하여 github 의 파일들을 다운 받습니다.
$ cd /srv
$ git clone [레포지토리 주소]
레포지토리 주소를 까먹었다면 아래 사진처럼 clone or download 버튼을 눌러 확인할 수 있습니다.
저는 그래서 이렇게 되었네요.
$ git clone https://github.com/nero96in/django-deploy-test.git
Cloning into 'django-deploy-test'...
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 32 (delta 4), reused 32 (delta 4), pack-reused 0
Unpacking objects: 100% (32/32), done.
ls 명령어를 통해 레포지토리 이름과 동일한 폴더가 생겼다면 업로드 성공입니다.
이제 서버에 프로젝트가 업로드 되었습니다! 다음 포스팅에서는 업로드된 Django 프로젝트를 WSGI 프로토콜을 통해 웹 서버와 연결해 주도록 하겠습니다.
'웹 > Django' 카테고리의 다른 글
Django 서비스 AWS로 배포하기 - [6] https 적용하기 (31) | 2020.03.27 |
---|---|
Django 서비스 AWS로 배포하기 - [5] 도메인 연결하기 (가비아) (10) | 2020.03.26 |
Django 서비스 AWS로 배포하기 - [4] nginx 연결하기 (74) | 2020.03.15 |
Django 서비스 AWS로 배포하기 - [3] uWSGI 연결하기 (46) | 2020.03.15 |
Django 서비스 AWS로 배포하기 - [1] 프로젝트 준비와 AWS 서버 대여 (17) | 2020.03.15 |