본문 바로가기
  • Seizure But Okay Developer
강의 | 대외활동 | 개인플젝/마스크 재고 관리_개인플젝

마스크 재고 관리 프로젝트 - 5 (AWS + 다른 서비스)

by Sky_Developer 2020. 4. 14.

개요

바이러스가 만연한 현재에 개발자로써 주변사람들을 도울 수 있는 방법이 없을까 고민을 하다가, 마스크 재고를 알려주는 사이트를 만들어야 겠다 결심하였고 프로젝트에 대해 정리하는 글을 작성하였습니다.

 

프로젝트 글은 총 5편으로 나뉘어 작성될 예정이며 이번 글은 Let's encrypt + 서버추가 세팅 + Git 서버에 올리기에 대한 내용을 담습니다.

 

목차

  • 작업 목록
    • Let's encrypt 로 인증서 만들기
    • Nginx 서버 추가세팅하기
  • Git 서버에 올리기
  • CS (Customer Service)

 

작업 목록

마스크 재고 서비스를 위해 필요한 작업은 아래와 같다.

  • Let's encrypt 로 인증서 만들기
  • Nginx 서버 추가세팅하기

 

Let's encrypt로 인증서 만들기

Let's encrypt를 설치할 것이다. 아래와 같은 순서로 명령어를 입력하자.

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

 

명령어들을 입력 후 인증서를 발급받는 것만 남았다. 그전에 Nginx 설정 파일의 한 라인을 수정해야 한다. 아래 명령어를 입력하자

sudo nano /etc/nginx/conf.d/default.conf

server_name 옆에 localhost를 구입한 도메인이름호스트이름이 붙은 도메인으로 바꿔준다. 본인의 경우 아래와 같이 입력해줬다.

 

 

수정 후 파일을 저장해준다. 이제 아래 명령어를 자신의 도메인이름과 함께 입력해준다.

sudo certbot --nginx -d mask-stock.world -d www.mask-stock.world

 

그러면 몇 가지 동의 작업을 거친 후 발급이 완료된다. 이 때 첫 부분에선 이메일을 입력하라고 뜨는데 이메일을 입력해줘야지 다음 단계로 넘어갈 수 있다.

 

이메일을 제대로 입력해주자

그 다음에는 Terms of Service 이다. A 를 입력해주고 엔터를 누른다.

 

 

그 다음에는 입력한 이메일로 구독을 받을 것인지 여부를 물어본다. 굳이 필요없다면 N 을 입력하고 엔터를 누른다.

 

 

마지막으로 HTTP 트래픽을 리다이렉트 하지 않는 기능 또는 HTTPS로 리다이렉트 시키는 기능 중 선택하라고 물어본다. 우리 서비스의 경우 HTTPS 가 필요하기 때문에 후자의 기능이 필요하다. 해당 기능에 대한 번호를 입력하고 엔터를 누르자.

 

 

잘 따라왔다면 아래와 같이 성공 메시지가 뜰 것이다. 그리고 인증서 만료 날짜 또한 확인할 수 있다.

 

이제 새로운 Nginx 설정 파일을 만들어줘야 한다. 아래 명령어를 입력해서 이동하자

cd /etc/nginx/conf.d

 

만일의 경우를 대비해 앞서 설정한 default 설정 파일의 이름을 바꿔놓을 것이다. 아래 명령어를 입력하자. 

sudo mv default.conf default.conf.bak

 

이제 server 라는 이름의 설정파일을 만들 것이다. 아래 명령어를 차례대로 입력하자.

sudo touch server.conf
sudo nano server.conf

 

이제 아래 값들을 입력하자. '도메인이름' 이라고 적힌 부분에는 자신의 도메인 이름을 입력한다. 그리고 이전 포스팅을 따라 똑같이 해왔다면 저장소 위치는 '/home/ubuntu/server/application1/저장소위치' 일 것이다. 이를  location / { root ... } 에 입력해주자.

server {
listen 80;
listen [::]:80;
server_name 도메인이름 www.도메인이름;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name 도메인이름 www.도메인이름;
location / {
root /home/ubuntu/server/application1/저장소이름;
}
ssl_certificate /etc/letsencrypt/live/도메인이름/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인이름/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;
add_header Strict-Transport-Security “max-age=15768000” always;
}

 

우리가 해준 작업은 80 포트 (HTTP)로 들어오는 모든 트래픽을 443 포트 (HTTPS)로 리다이렉팅 해주는 것이다. HTTP2 또한 이용하고 있는데 자세한 내용은 해당 링크를 참고하길 바란다.

 

이제 설정파일을 새로 만들었으니 Nginx를 다시 리로드 시켜줘야 한다. 아래 명령어를 입력해준다.

sudo nginx -s reload

 

이제 브라우저 주소창에 도메인 주소를 입력하면 https 가 적용된 것을 확인할 수 있다.

 

Nginx 서버 추가세팅하기

Nginx 서버에 Proxy 서버를 세팅해줌으로써 트래픽을 분산해줄 수 있다. 앞선 글에서 봤던 로드밸런서와 비슷한 기능이

다.

 

우선 3편에서 생성한 server 폴더로 이동하여 application2 디렉토리를 추가로 만들어준다.

cd /home/ubuntu/server
sudo mkdir application2
cd application2

 

git 명령어를 이용해 저장소 파일을 받아온다

git clone Git 저장소 URL

 

이제 /etc/nginx/conf.d 디렉토리로 이동한다

cd /etc/nginx/conf.d

 

server2.conf 라는 이름의 설정 파일을 만들어야 한다. 아래 명령어를 차례로 입력하자.

sudo touch server2.conf
sudo nano server2.conf

 

이제 아래 내용을 입력해줘야 한다.

server {
          listen 8080;
          root /home/ubuntu/server/application2/저장소이름;
}

 

그리고 앞서 만들었던 server.conf 파일을 다시 연다 (nano server.conf 입력)

그리고 location / { root 하단에 아래 내용을 입력한다.

server {
....
}
server {
....
location / {
root /home/ubuntu/server/application1/저장소이름;
proxy_pass http://localhost:8080
}
....
}

 

앞서 server2.conf 파일에서 웹 서버가 8080포트를 주시하도록 설정했으므로 proxy_pass 또한 해당 포트로 잡아주는 것이다. 이 작업을 통해 앞서 8080포트에서 동작하는 다른 웹 서버로 트래픽이 분산되는 것이다.

 

마지막으로 Nginx 를 리로드 해주기 위해 아래 명령어를 입력해준다.

sudo nginx -s reload

 

이제 Nginx에 Proxy 서버 설정까지 완료하였으므로 모든 추가 설정이 완료되었다.

 

Git 서버에 올리기

사실 Git 서버에 올리면 자동으로 https 인증서까지 적용되서 사이트가 만들어진다. 도메인도 자동으로 잡힌다. 그럼에도 위 과정과 같이 굳이 손수 웹 서버를 배포해야 되는 이유는? 가장 큰 이유는 대량 트래픽을 감당하기 위해서다. Git 서버만으로 서비스를 운영하려고 하면 트래픽이 몰릴 때 사이트가 죽어버린다.

 

Git 서버에 사이트를 올리는 과정은 아래와 같이 master 브랜치와 gh-pages 브랜치를 이용하는 두 가지가 있다.

master 브랜치를 이용하면 굳이 추가적인 브랜치를 만들지 않고서 Direct하게 사이트 배포를 할 수 있는 장점이 있다. 하지만 실수로 배포한 부분이 그대로 반영될 위험도 있고 작업 내역을 되돌리는 수고가 뒤따를 수도 있다.

gh-pages 브랜치를 이용하면 앞서 얘기한 위험 부담이 줄어들고 브랜치를 사용하기 위한 작업또한 간단하다.

 

둘 중 본인의 상황에 맞는 방법을 선택하길 바란다.

 

master 브랜치 이용

저장소 master 브랜치에 최신 작업내역에 대한 commit 및 push를 해준다.

이 후 아래 사진과 같이 Git 저장소 설정에 들어간다.

 

그리고 스크롤을 내리다보면 GitHub Pages라는 섹션이 있다. 설정이 None 으로 되어있는데 이를 아래와 같이 master 브랜치로 잡아준다.

그리고 하단에서 HTTPS 적용이 체크된 것을 확인할 수 있다. 여기까지가 Git 서버에 배포 과정 끝이다. 상단 링크를 클릭하면 작업한 페이지가 배포된 것을 확인할 수 있다.

 

gh-pages 브랜치 이용

아래 명령어를 입력해 gh-pages 브랜치를 만든다.

git checkout -b gh-pages

 

이제 최신 작업내역에 대한 commit 및 push를 해준다. 그리고 git 저장소의 설정을 들어간다.

master 브랜치를 설정해줬던 것과 마찬가지로 GitHub Pages 섹션에서 Source 버튼을 클릭한다. 이 후 gh-pages 브랜치를 선택해주면 배포 작업이 끝난다.

 

Custom 도메인 적용하기

만약 git 서버에 올린 페이지에 구매한 도메인을 연결하고 싶다면 아래와 같이 한다. 이 때 이전 과정을 따라오면서 AWS 웹 서버와 도메인을 연결했던 사람이라면 이미 AWS 웹 서버에 도메인이 적용되어 있을 것이다. 그러므로 두 가지를 병행할 수 없기 때문에 두 가지 중 하나를 선택해야 한다.

  • 'Github 페이지에 도메인을 적용할 것인지'
  • 'AWS 웹 서버에 도메인을 적용할 것인지'

만약 Github 페이지에 도메인을 적용할 것이라면 아래 과정을 따라간다.

 

Git 저장소 설정에 들어가 Github Pages 섹션으로 들어간다. 그리고 Custom Domain 에 자신의 도메인 이름을 입력한다.

 

이 후 도메인을 구입한 사이트에서 DNS 설정으로 들어가자. 이 글에선 goDaddy에서 도메인을 구입했으므로 이를 기준으로 설명한다.

 

Records 부분에서 Change 버튼을 클릭하자. 그런데 이전에 AWS Route 53을 이용하기 위해 Nameserver를 등록한 사람이라면 이 부분이 안 보일텐데, Nameserver 섹션의 change 버튼을 클릭하고 아래와 같이 체크하자.

 

이러면 goDaddy의 Nameserver 를 이용하는 것이다. 저장을 하고 나면 Records 부분이 다시 보일 것이다.

 

Records 섹션에서 change 버튼을 누르고 A 레코드와 CNAME 레코드를 다음과 같이 추가한다.

 

ADD 버튼을 클릭하면

 

 

이와 같은 세팅란이 하단에 뜨는데 Type로, Host는 루트 도메인을 뜻하는 @로 한다. Points to는 IP 값을 입력하면 된다.

 

A 레코드에는 다음 4 가지 IP를 추가한다. (GitHub 공식 홈페이지 참고)

  • 185.199.108.153
  • 185.199.109.153
  • 185.199.110.153
  • 185.199.111.153

CNAME 레코드에는 각각에 다음과 같이 입력하자

  • Type : CNAME
  • Name : www
  • Value : Github_계정이름.github.io. (ex. skni25.github.io.)
    CNAME의 경우 주소 마지막에 을 붙여주자

여기까지 했으면 도메인 적용까지 끝난 것이다. mydomain.com 또는 www.mydomain.com 과 같이 입력했을 때 둘 다 접근할 수 있게 된다. 도메인 적용은 짧으면 몇 분 또는 최대 24시간이 걸릴 수 있으므로 시간이 지나도 도메인으로 접근이 되지 않는다면 하루 지난 뒤에 확인해보면 될 것이다.

 

 

 

출처

https://askubuntu.com/questions/280768/how-to-rename-a-file-in-terminal

https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx

https://www.nginx.com/blog/setting-up-nginx/

https://askubuntu.com/questions/280768/how-to-rename-a-file-in-terminal

https://blog.cloudboost.io/setting-up-an-https-sever-with-node-amazon-ec2-nginx-and-lets-encrypt-46f869159469

https://medium.com/@hossainkhan/using-custom-domain-for-github-pages-86b303d3918a

https://help.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site

https://kutar37.tistory.com/entry/3%EB%B6%84%EB%A7%8C%EC%97%90-Github-Page%EB%A1%9C-%ED%99%88%ED%8E%98%EC%9D%B4%EC%A7%80%EC%A0%9C%EC%9E%91

댓글