본 문서는 패스트캠퍼스 ‘Web-Programming School’ 수업 자료를 바탕으로 작성되었습니다.
클라우드 컴퓨팅이란?
클라우드 컴퓨팅(cloud computing)은 인터넷 기반 컴퓨팅의 일종으로 정보를 자신의 컴퓨터가 아닌 인터넷에 연결된 다른 컴퓨터로 처리하는 기술을 의미한다. 공유 컴퓨터 처리 자원과 데이터를 컴퓨터와 다른 장치들에 요청 시 제공해준다. 구성 가능한 컴퓨팅 자원(예: 컴퓨터 네트워크, 서버, 스토리지, 애플리케이션, 서비스)에 대해 어디서나 접근이 가능한, 주문형 접근을 가능케하는 모델이며 최소한의 관리 노력으로 빠르게 예비 및 릴리스를 가능케 한다. 클라우드 컴퓨팅과 스토리지 솔루션들은 사용자와 기업들에게 개인 소유나 타사 데이터 센터의 데이터를 저장, 가공하는 다양한 기능을 제공하며 도시를 거쳐 전 세계로까지 위치해 있을 수 있다. (위키백과)
클라우드 서비스
클라우드 서비스란 인터넷 상에 자료를 저장해 두고, 사용자가 필요한 자료나 프로그램을 자신의 컴퓨터에 설치하지 않고도 인터넷 접속을 통해 언제 어디서나 이용할 수 있는 서비스를 말한다. 클라우드 서비스를 통해 인터넷 상에 저장된 자료들은 간단한 조작 및 클릭으로 쉽게 공유하고 전달할 수 있다. 인터넷 상의 서버에 단순히 자료를 저장하는 것뿐만 아니라, 따로 프로그램을 설치하지 않아도 웹에서 제공하는 응용 프로그램의 기능을 이용하여 원하는 작업을 수행할 수 있으며, 여러 사람이 동시에 문서를 공유하면서 작업을 진행할 수도 있다.
1. 클라우드 서비스 종류
클라우드 서비스 종류 수업에서는 PaaS와 IaaS를 할 예정이다.
자신이 직접 관리를 하는 영역인가에 따라서 클라우드 서비스를 제공자 관점에서 구분
SaaS(Software as a Service)
인터넷, 클라우드 등 네트워크를 통해 애플리케이션의 기능 이용 할 수 있다. 클라우드 서비스를 통해 필요한 소프트웨어를 서비스 받을 수 있다. ex) 판매관리, 재고관리 그런 프로그램
PaaS(Plattorm as a Service)
개발자가 어플리케이션을 개발, 서비스하기 위해 사용가능한 서비스(운영체제)와 기능(프레임워크)들이 제공되는 클라우드 서비스를 의미한다.
IaaS(infrastructure as a Service) - EC2
OS부터 상위의 모든 플랫폼 혹은 어플리케이션을 사용자가 직접 설치 할 수 있다.
2. EC2
EC2란 무엇인가?
내가 직접 OS를 선택해서 설치 할 수 있다.
EC2 인스턴스 시작하기
단계 1. OS 선택하기
기존에 잘 사용하던 Ubuntu Service 16.04 사용
단계 2. 인스턴스 유형 선택
프론 티어 사용 가능으로 선택된 위에서 2번째꺼 사용
단계 3/4/5 skip
단계 6. 보안 그룹 생성
보안 그룹은 인스턴스에 대한 트래픽을 제어하는 방화벽 규칙 세트입니다. 이 페이지에서는 특정 트래픽을 인스턴스에 도달하도록 허용할 규칙을 추가할 수 있습니다.
보안 그룹 이름과 설명을 설정
단계 7. 인스턴스 시작 검토
http 로 접속을 계속 보냈을 경우, 이걸 막지 않기 때문에 만약 다 오픈하는 경우, 공격이 계속 들어올 수도 있다.
기존 키 페어 선택 또는 새 키 페어 생성
이 과정에서만 사용자가 프라이빗 키 파일을 저장 할 수 있는 유일한 기회이므로 안전한 장소에 잘 보관할 것
주의 프라이빗 키의 사본이 보관되지 않기 때문에, 분실할 경우 복구할 방법이 없다.
EC2는 퍼블릭 키 암호화 기법을 사용하여 로그인 정보를 암호화 및 해독 공개 키 암호화 기법은 공개 키를 사용하여 암호 등의 데이터를 암호화하고, 수신자가 개인 키를 사용하여 해당 데이터를 해독하는 방식이다. 퍼플릭 키와 프라이빗 키를 키 페어 라고 한다.
인스턴스에 로그인하려면 키 페어를 만들고, 인스턴스를 시작할 때 키 페어의 이름을 지정하고 인스턴스에 연결 할 때 프라이빗 키를 제공해야한다. 관련 퍼블릭 키 내용은 ~/.ssh/authorized_keys
내에 있다.
3. EC2 인스턴스
처음 인스턴스가 만들어졌을 때 연결된 보안 그룹에서 SSH 프로토콜만 접속 할 수 있다. 이말은 SSH 프로토콜로 서버에 접속은 할 수 있지만, 브라우저로 접근하는 것은 불가능하다. 브라우저로 접근할 수 있는 포트는 80
퍼블릭 DNS(IPv4)
로 접근 할 수 있다.
SSH(Secure Shell)
시큐어 셸(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다. (위키 백과)
SSH를 사용하여 Linux 인스턴스에 연결
기본적으로 SSH 클라이언트 설치 가 되어있어야 한다. 리눅스와 맥의 경우엔 이미 깔려 있지만 윈도우는 아님~
ssh 명령을 사용하여 인스턴스에 연결한다. 프라이빗 키(.pem) 파일과 user_name@public_dns_name을 지정합니다.Ubuntu의 경우 사용자 이름은 ubuntu 또는 root
ssh -i 옵션은 프라이빗 키를 인증방법으로 이용하고 싶을 때 사용하는 옵션이다. (.pem 파일 이용)
>> ssh -i /path/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
그러나 이 명령어 실행을 하면 Permissions 0644
라는 에러가 발생한다.
왜냐하면 아까 받은 프라이빗 키의 -rw-r--r--
이기 때문이다. 그래서 chmod 400
으로 사용자만 읽을 수 있게끔 변경하자!
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-1049-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
권한을 변경한 후, 다시 ssh 프로토콜로 접속하면 Welcome 메시지를 볼 수 있다.
리눅스 시스템의 파일 및 디렉토리 권한/그룹 관리
- -rw-r–r– : 앞이 ‘-‘파일 / drwxr-xr-x : 앞이 ‘d’ 디렉토리
- r: 읽기권한(4), w: 쓰기권한(2), x:실행권한(1)
[디렉토리 1자리][소유자권한 3자리][그룹권한 3자리][전체권한 3자리]
ex) [-rw-rw-r–] -> 664
chmod -허가권설정(사용자권한:w/그룹권한:r/그외 사용자:o)
ex) chmod 461 file/directory (4:r/6:r+w/1:x) : 사용자에게 읽기 권한을 주고, 그룹에게 읽고 쓰는 권한 부여 그외 사용자는 접근 권한
4. locale 설정
한글 깨짐을 방지하기 위해 설정한 후, 재접속 한다.
<!-- sudo vi /etc/default/locale -->
>> sudo vi /etc/default/locale
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
5. pyenv 및 zshell 설치
>> sudo apt-get update
>> 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
>> curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
<!-- 위 명령어 실행후 출력되는 이건 잠깐 다른 파일에 옮겨놓자 -->
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
>> sudo apt-get install zsh
>> curl -L http://install.ohmyz.sh | sh
<!-- change sehll을 하기 위한 명령어 -->
<!-- '이거 아니고' `이거입니다!` -->
>> sudo su
>> sudo chsh ubuntu -s `which zsh`
<!-- zsh이 적용된걸 보기 위해선 나갔다 다시들어와야한다. -->
>> exit
>> ssh -i 접속
- curl : curl 은 command line 용 data transfer tool 이다. download/upload 모두 가능하며 HTTP/HTTPS/FTP/LDAP/SCP/TELNET/SMTP/POP3 등 주요한 프로토콜을 지원하며 Linux/Unix 계열 및 Windows 등 주요한 OS 에서 구동되므로 여러 플랫폼과 OS에서 유용하게 사용할 수 있다.
- curl -L : 서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL로 따라간다.
6. python 환경 설정
>>vi ~/.zshrc
<!-- 두번째 줄 주석 해제 -->
# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
<!-- 맨마지막에 추가 맨마지막 줄로 shift + G -->
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
<!-- 저장 후 나갔다 들어와서 pyenv 확인 -->
>> pyenv
pyenv 1.2.2
Usage: pyenv <command> [<args>]
- 리눅스 상대경로/절대경로
- 경로 <-상대경로
- ./경로 <-상대경로
- ../경로 <-상대경로
- /경로 <-절대경로
- ~/경로 <-절대경로
7. srv 설정 및 pyenv 가상 환경 설정
srv
디렉토리는 서비스 디렉토리로 주로 인터넷 관련 파일이 위치한다.
>> /
<!-- root계정인 srv 디렉토리를 ubuntu 계정이 접근 할 수 있도록함 -->
>> sudo chown -R ubuntu:ubuntu /srv
>> cd srv
>> mkdir runserver-test
>> pyenv install 3.6.4
>> pyenv virtualenv 3.6.4 unserver
>> pyenv cd runserver-test
>> pyenv local runserver-test
- chwon : chown을 사용하여 파일의 소유자를 소유자가 지정한 사용자 ID 또는 프로파일로 설정
- chwon - R : 파일이 디렉토리를 지정하는 경우, chown은 해당 위치에 연결된 전체 서브트리에서 각 파일의 소유자 및 그룹을 반복적으로 변경
8. runserver
<!-- 가상환경 만들고 설정 후, -->
>> pip install django
>> pip freeze > requirements.txt
>> django-admin startproject mysite
<!--runserver를 그냥 실행하면 loof back으로 자기컴퓨터에서만 접속이 가능 -->
<!-- 0:8000 = 0.0.0.0: 8000 -->
>> ./manage.py runserver 0:8000
포트 8000에서 접속할 수 있도록 보안그룹- 인바운드
설정을 바꿔주자.
>> ./manage.py runserver 0:8000
runserver error
퍼블릭 DNS(IPv4):8000 접속하면 DisallowedHost
오류가 발생한다.
ALLOWED_HOSTS
장고문서
Default로 빈 리스트가 주어졌을 경우, DEBUG=True
인 경우엔 자동으로 ['localhost', '127.0.0.1', '[::1]'].
이 부분이 추가되서 그전까진 오류코드를 보지 못했던 것이다.
퍼블릭 DNS로 접속하기 위해선 추가적인 설정이 필요하다.
# mysite/mysite/seetings.py
ALLOWED_HOSTS = [
'.amazonaws.com'
]
재접속을 하면 귀여운 Django 2.0 welcome 페이지를 볼 수 있다~