IAM

키별로 권한을 부여하는 것이다.

AWS CLI(예를 들면, 스크립트로 만들어서 사용 가능) 기능이 있는데, 그러기 위해서는 유저별로 권한을 줘야한다.

  • IAM > Users > Add user - 이름 입력 - Access type Programmatic access 체크
  • Next
  • Attach existing policies directly > ec2 검색, AmazonEC2FullAccess 체크 > Next > Create user > Access key ID, Secret access key 발급 확인
# project 이동
$ l
total 24
drwxr-xr-x   9 limhm  staff   306B  3  6 11:40 .
drwxr-xr-x  21 limhm  staff   714B  3  6 15:43 ..
drwxr-xr-x   4 limhm  staff   136B  3  6 11:51 .conf-secret
drwxr-xr-x  12 limhm  staff   408B  3  6 22:23 .git
-rw-r--r--   1 limhm  staff   2.7K  3  6 11:40 .gitignore
drwxr-xr-x   8 limhm  staff   272B  3  6 20:41 .idea
-rw-r--r--   1 limhm  staff    11B  3  6 11:21 .python-version
drwxr-xr-x   6 limhm  staff   204B  3  6 11:40 django_app
-rw-r--r--   1 limhm  staff    31B  3  6 11:29 requirements.txt

# 패키지 설치
$ pip install awscli
$ aws configure
AWS Access Key ID [None]: YOUR_Key_ID
AWS Secret Access Key [None]: YOUR_Access_key
Default region name [None]: ap-northeast-2
Default output format [None]: json

# configure 입력내용 확인
$ cd ~/.aws
$ l
total 16
drwxr-xr-x   4 limhm  staff   136B  3  7 11:18 .
drwxr-xr-x+ 71 limhm  staff   2.4K  3  7 11:23 ..
-rw-------   1 limhm  staff    48B  3  7 11:18 config
-rw-------   1 limhm  staff   116B  3  7 11:18 credentials
$ vi config
[default]
region = ap-northeast-2
output = json

Nginx 관련 설정

$ sudo apt-get install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.10.3
$ cd /etc/nginx/sites-available

# default 확인
$ l
total 12K
drwxr-xr-x 2 root root 4.0K Mar  6 08:35 .
drwxr-xr-x 8 root root 4.0K Mar  6 08:35 ..
-rw-r--r-- 1 root root 2.4K Jan 18 23:05 default

Security Groups에 inbound rule 추가

  • HTTP
  • TCP
  • 80
  • Anywhere

YOUR_PublicDNS 주소로 접속하여, Welcome to nginx! 문구를 확인한다.

# vi /etc/nginx/sites-available/default 에서 자세한 내용 확인

Nginx 가상서버 설정 파일 작성

$ cd /etc/nginx/sites-available
$ sudo vi app
server {
        listen 80;
        server_name localhost Your_Public_DNS;
        charset utf-8;
        client_max_body_size 128M;

        location / {
                uwsgi_pass      unix:///tmp/app.sock;
                include         uwsgi_params;
        }
}

설정파일 심볼릭 링크 생성

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/app .
$ sudo systemctl restart nginx

# could not build server name 에러가 발생하면,
# nginx 설정 파일에서 server_names_hash_bucket_size를 늘려준다.
$ sudo vi /etc/nginx/nginx.conf
http {
        # ...
        server_names_hash_bucket_size 512;
        # ...
        }

개념 확인

ip:80 요청이 들어올 때,

- Nginx > sites-enabled > app = 80, app2 = ...
  : 요청 들어온 포트와 app을 연결
  1. /etc/nginx/sites-enabled/app 파일에 listen 80
  2. '/' (root url)
  3. /tmp/app.sock (/etc/nginx/sites-enabled/app 파일에 unix:///tmp/app.sock)
  - app.sock이 uWSGI에 연결
- app.sock <-> uWSGI > chdir > Django > project_name.wsgi
  : uWSGI 설정은 /etc/uwsgi/sites/app.ini 파일에서 확인
  * uWSGI가 app.ini 파일을 이용해 app.sock을 생성 (app.sock은 단순히 통로)
Socket이란?
두 프로그램이 네트워크를 통해 서로 통신을 수행 할 수 있도록 양쪽에 생성되는 링크의 단자입니다.
두 소켓이 연결되면 서로 다른 프로세스끼리 데이터를 전달 할 수 있습니다. 결국 소켓이 구현됨으로써 네트워크 및 전송 계층의 캡슐화가 가능해 집니다.

도메인 연결

Cloud Flare - DNS에서 DNS Records 추가

  • CNAME
  • Name : www
  • IPv4 address : Your_Public_DNS

nginx 설정에 server_name 추가

$ cd /etc/nginx/sites-available
$ sudo vi app
server {
	# ...
	server_name localhost Your_Public_DNS devlim.net;
	# ...
$ sudo systemctl daemon-reload
$ sudo systemctl nginx

Caching 삭제

Cloud Flare - Caching에서 purge Everything해서 캐시 삭제

SSL 적용

Cloud Flare - Page Rules에서 Create Edge Certificates

  • http://*.devlim.net/*
  • Always Use HTTPS

Nginx에 SSL 적용

Cloudflare에 Custom SSL 적용

Docker

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

  • 컨테이너 like 가상머신 1개
  • 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable). > 데이터를 저장할수없다.

Docker 설치하고 실행하기

Docker 설치

Docker 다운로드에서 Stable 버전 .dmg 파일을 받아 설치한다.

# 설치확인
$ docker version
# Client와 Server 정보 정상 출력 확인

Docker 실행

# ubuntu 16.04 컨테이너 생성
$ docker run ubuntu:16.04

# 컨테이너 실행
$ docker run --rm -it ubuntu:16.04 /bin/bash
root@e2ef5a339502:/# l
bin/   dev/  home/  lib64/  mnt/  proc/  run/   srv/  tmp/  var/
boot/  etc/  lib/   media/  opt/  root/  sbin/  sys/  usr/

# 컨테이너 종료
$ exit