AWS
Amazon Web Service
라는 업계 1위 클라우드 플랫폼이다.
클라우드 플랫폼이라 함은 서버자원을 할당시켜주는 일을 하는 것이라고 말할 수 있다.
아마존이 쇼핑몰을 처음 만들 때, 서버를 구축해주는 괜찮은 곳이 마땅치 않았었다.
그래서 대기업 같은 경우 웹사이트 등을 만들 때 다른 불안정한 곳에 돈을 주고 맡길 바에 차라리 본인이 만들겠다고 해서, IDC라고 데이터센터를 직접 만들어서 랙 유닛
단위로 데이터 서버를 만들어서 엄청난 양의 하드 디스크를 넣는 곳을 마련한다. 즉, 대기업에서는 자체적으로 IDC를 운영한다. 그렇게 해서 서버를 만들어 놓는다. 그렇게 물리적으로 서버를 관리하게 하는 것이다.
이 과정이 너무 귀찮아서 가상서버호스팅
을 이용하는 경우가 있다. 아마존이 자체적으로 이러한 데이터 서버를 구축을 하였다. 처음 목적은 아마존 사이트를 운영하기 위함이었지만, 이것이 비효율적이라고 꺠닫게 된 아마존은 다른 가상서버호스팅
을 제공해주는 곳처럼 남는 서버 자원을 다른 필요한 사람들에게 돈을 받고 팔기 시작하였다. 이는 편의성과 보안성이 뛰어나게 하여 많은 사람들이 이용하게 되었다.
AWS에 어플리케이션을 올리기 전
Browser -> localhost(127.0.0.1) -> runserver -> Django
AWS에 어플리케이션을 올릴 때 (서버상)
Browser -> AWS -> runserver -> Django
AWS 인스턴스
를 처음 시작할 때, 보안그룹을 꼭 생성시켜주어야 한다.
AWS
를 거쳐서 Service를 제공할 때 SecurityGroup을 따로 지정해주지 않으면, 외부에서 연결을 거부하게 된다.
Client -> AWS (SecurityGroup) -> Service
ssh
ssh
이란, 시큐어 셸(Secure Shell
)으로 네트워크 상의 다른 컴퓨터에 로그인하거나 원격시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다.
강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.
SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.
chmod
change mode
라는 뜻으로, 파일의 권한을 바꿔주는 역할을 한다.
보통 사람들은 ~/.ssh
에서 본인의 암호화될 필요가 있는 파일을 보관한다. (private key files
)
chmod
명령을 사용하여 private key file
을 공개적으로 볼 수 없는지 확인한다. 이는 다음 명령을 사용한다.
chmod 400 /path/private_key_file.pen
위 명령을 사용함으로써 권한을 제한할 수 있다.
그리고 ssh
명령을 사용하여 인스턴스에 연결한다. private_key_file.pem
파일과 username@public_dns_name
을 지정한다. Amazon Linux AMI
를 사용한 경우 username
은 ec2-user
가 된다. 도메인 주소 같은 경우는 aws에서 public dns
를 가리킨다.
ssh -i /path/private_key_file.pem ec2-user@~~~.amazonaws.com
scp
ssh
는 컴퓨터에 접속할 때 쓰는 프로토콜인 반면, scp
는 ssh
를 기반으로 암호화된 파일 전송을 할 수 있도록 만들어준 것이다. 이를 통해서 서버에 띄울 해당 프로젝트를 올리는 것이다.
다음은 이에 대한 명령어이다.
scp -i ~/path/private_key_file -r /path/local_project ubuntu@public_dns:/home/ubuntu/project
이후엔 ssh
로 다시 한 번 서버 내부로 들어가서 프로젝트가 잘 전송되었는지 확인해봐야 할 것이다. 그리고 위 명령어에서 적은 /home/ubuntu/project
로 들어가면 해당 프로젝트가 잘 들어가있는 것을 확인 할 수 있을 것이다.
이후 가상서버에 pipenv 설치
# Locale설정 (tab 누르고 OK에서 엔터)
-> sudo vi /etc/default/locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
# update, upgrade
sudo apt-get update
sudo apt-get dist-upgrade
# zsh설치
sudo apt-get install zsh
# oh-my-zsh 설치
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# root유저로 전환
sudo su
# ubuntu유저의 shell을 변경 (작은따옴표아님 유의!)
chsh ubuntu -s `which zsh`
# ~/.zshrc의 첫 번째 줄 주석 해제 (아래 부분)
export PATH=$HOME/bin:/usr/local/bin:$PATH
# exit후 다시 ssh접속
# pip설치 및 version다운
sudo apt-get install python-pip
sudo python -m pip install -U pip
# pipenv설치
sudo -H pip install -U pipenv
# pyenv설치
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
# vi ~/.zshrc에서 맨 아래에 추가
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
# pyenv를 위한 requirements설치
# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev
# exit후 다시 ssh접속
# pyenv로 필요한 파이썬 버전 설치
pyenv install 3.6.5
# 이제 pipenv install하면됨 ^^