카테고리 없음

AWS에 서버 배포하기

안다희 2020. 3. 29. 21:18
728x90

- http://ec2-3-135-188-254.us-east-2.compute.amazonaws.com:4466

- http://ec2-3-135-188-254.us-east-2.compute.amazonaws.com:4000

 

- heart-signal server 브랜치에 있는거 서버 올릴거임.

https://github.com/JaegyunAhn/heart-signal

 

- 프리즈마 클라우드가 미국, 유럽에 있어서 느린거.

  -> 한국 리전에 커스텀으로 올리면 된다!

 

- aws 편한점: 서버를 다 만들어준다.

- aws 불편한점: 이렇게 쓰면 되는데 왜 되는지 잘 모르는 사람도 있음

 

- EC2: 컴터 빌려서 서버를 빌림.

 

- EKS: docker를 아마존이 세팅 (재규)

 

1. AWS - EC2 - 인스턴스 클릭 - 시작 - Ubuntu Server 18.04 LTS (HVM)

- 많이 파워풀할수록 small large 뭐가 쎈거야? 컴퓨팅 파워가. CPU랑 메모리

- 프리티어 사용가능은 하나네. 

 

2. 단계 3 서브넷 사용설정(활성화) 클릭

- 네트워크: 인스턴스가 어떤 네트워크 안에 들어갈건지.

- 기본 vpc있어. 서버가 커지면 vpc 여러 개!

- 네트워크가 다르면 서로 통신 못해.

- 같은 서비스는 같은 네트워크 안에 있어야 해. 

- 한 서비스에 micro 서버 여러개 있을 수 있어.

- 인스턴스 여러 개가 하나의 디어를 담당하고 있어.

- 서브넷: 2a가 망해도 2b가 커버.

 

3. 생략

- 그 다음은 몰라

- IAM 역할 \. 그 인스턴스가 s3라는 데이터 저장소 가서 쓸 수 있는 권한 줘.

근데 필요한 역할 없으니 그냥 비워둘거야.

- 파이프: ????

 

4. 종료 방식: 중지

- 중지(인스턴스 잠시 멈춰. 재시작 가능)

- 종료: 그냥 없애는거야. 그냥 데이터 날라가. 딱히 안 중요한 인스턴스 일때?

 

5. 테넌시

- 응답 속도! 네트워크 응답속도 일정하지 않아. : 게스트 하우스의 화장실. 나도 쓸 권한 있지만 속도가 많이 나진 않지.

공유됨으로 해야  돈이 나가겠지?

- T2/T3 cpu속도 끌어올리기??? 넘어가

 

6. 스토리지 추가

- SSD 하드디스크 어디에 마운트 할거야? c드라이브 디드라이브?

- 스냅샷: 신경쓸 필요 없음

- 크기/볼륨유형 : 

- 저장장치에서 얼마나 빨리? IOPS 빠를수록 비싸

 

- 저장장치를 종료 시 삭제 에 체크

- 인스턴스가 종료되도 저장장치는 내버려둘 때가 있을 수 있어.

- 하드디스크를 없앨거냐 말거냐(이거) 서버를 없앨거냐 말거냐 (4번)

 

7. 태그 추가

- 별명이래. 넘어가도 됨

 

8. 보안 그룹 구성 - 새 보안 그룹 생성 - 내 IP 선택

- 인스턴스가 뜬다고 다 연결되는게 아님. 보안이 되게 중요해. 이 인스턴스의 어떤 포트를 누구에게 공개할건지.

- 화이트리스트 기반!!!!! 어떤 프로토콜로 누가 접근할건지????

- 인스턴스 띄웠는데 안되면 포트가 잘못됐거나 내가 화이트리스트가 아니거나.

 

- SSH: 표준 규약은 이렇게 들어가자. 그런 표준 규약.

- 소스: SSh 연결을 누가 할건지. 무관이면 다 들어갈 수도 있겠지?

- IP: 나한테 연결된 네트워크에 따라 달라짐. 회선에 따라 달라지지 않을까? 

 

9. 시작하기 - 새 키 페어 생성 - 프라이빗 키 다운로드

- 잃어버리면 끝. 다시 다운로드 못한다는데? 이 키 없으면 ssh로 접속 못해

- 프라이빗 키 갖고있기 + 보안그룹 화이트 리스트에도 있어야해.

 

- 키 이름: prismagram-key

- 디어에서는 다 갖고있는대

- 서버코드를 만지는 사람이면.... 안가지고 있어도 되지 보안상. 서버코드 머지하고 재윤오빠만 배포할 수도 있겠지.

 

- 서버에 ssh 접근 한다는 의미가 뭐야? 서버로 접속하는거..

- 시큐어쉘 명령을 원격으로 해!

- 쉘: 운영체제에 명령을 내릴 수 있는거...

 

- aws는 sudo 명령에 암호가 없음. 일단 접속만 하면.

 

10. 시작 - 인스턴스 보기

- pending: 음식주문받고 만드는중~

- running: good

 

- 중요한거: 퍼블릭 DNS, 퍼블릭 IP 중요

- dns: 별명

 

- 후성이가 테스트 서버 바꼈다 하면 인스턴스 새로 만든거였던거네.

 

11. 터미널

11-1. 서버 접속

key 있는 곳으로 폴더 변경
ls -al
sudo chmod 400 KEY_NAME.pem

- 내키를 폴더에 옮기고 터미널에서 그 폴더로 간다음에 권한변경

- 어드민/사용자/그룹 순서

- read write ??exucute

- prismagram-key.pem

 

ssh -i prismagram-key.pem ubuntu@DNS_OR_IP

- 서버에 접속하는중이야.

- read write ??exucute

- 3.135.188.254 / 뒤에 있는건 내 아까 봤던 ip

 

- 아까 만든 컴터 그게 클라우드에 있는거다. vm ware는 내 하드웨어를 공유하지만 이건 클라우드에 있는거지~

- 이제 이 위치로 왔지! 클라우드 컴터로 접속한거~

- 그럼 이 띄운 인스턴스에 접속한거다 !!!!!

- 나만의 서버를 만들기 위한 준비 끝.

- 진짜 서버를 띄우고 접속해볼거여,

 

11-2. 도커, 도커 컴포즈 설치

0) 클론

git clone https://github.com/JaegyunAhn/heart-signal.git
cd heart-signal/
git status
git checkout -b server (로컬에는 이 브랜치가 없어서 만들어도 됨)
git pull origin server
git status (이제 On branch server)
cd server

- 서버 코드가 필요해.

- aws는 깃이 깔려있음

- 이름 prismagram-key 잘못함. 하트시그널인데 ㅋㅋ

 

1) 도커 깔기 

- 내 인스턴스에 도커를 깔아야 해. docker-compose.yml

https://docs.docker.com/install/linux/docker-ce/ubuntu/

Install using the repository 부터

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ docker --version
$ 

 

- curl: dms 원격으로 데이터 받아오는 명령줄 도구

- 4번째는 그냥 확인

x86_64 / amd64 5번째에서 이거로 그냥 하면 됨

 

- prisma1이라 docker를 만들어준거야.

- docker-compose.yml

- 그 다음은 특정버전만이라 안해도됨.

- 근데 나는 docker-compose.yml 안만들어줬는데? 1으로 init했는데도?

- Docker version 19.03.8, build afacb8b7f0

 

2) docker compose 설치

https://docs.docker.com/compose/install/

 

Install Docker Compose

You can run Compose on macOS, Windows, and 64-bit Linux. Prerequisites Docker Compose relies on Docker Engine for any meaningful work, so make sure you have Docker Engine installed either...

docs.docker.com

- 리눅스 선택

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version

- 서버 환경설정 할게 넘많아. 이래서 ㅠ

- 이제 도커 설치 완료.

 

 

3) prisma, mysql을 여기에 띄워볼거야.

- 도커 컴포즈로 서버에 올릴때 뭐를 올려야 하는지,, 를 알려주는 게 docker.compose.yml

$ sudo docker-compose up -d

- up까지만 하면 올리고 그냥 멈춰버려. 그래서 터미널에 입력못해. 백그라운드로 계속 입력하기위해 데몬화시킨다.

- 서버가 돌아가고 있어...

$ sudo docker container ls

- 해보면 나와

 

http://ec2-3-135-188-254.us-east-2.compute.amazonaws.com:4466/

들어가보면 되지요!!!!

 

- 4000은 왜 안되나?

=> 인스턴스 설명에서 인바운드 규칙 보면 화이트리스트가 44 밖에 없어서

 

- 서버 = 인스턴스

- 터미널에서 ssh로 접속한건 서버로 들어간거야? 응

- 서버 만들고 띄우고 접속도 터미널로 했고, 4466에서 돌아가고 있는건데 인스턴스 띄웠어. ssh 접속을 지원할수있는프로그램돌고 있어.

22랑 연결됨. 그거랑 ssh랑 연결한거,

- 프리즈마는 4466이랑 연결되어 있는데, aws화이트리스트에 없어.

- 22 그 라인이 있어서 ssh에 접속할 수 있었어. 

 

4) 화이트리스트 추가

- 보안 그룹 - launch~ 클릭 - 작업 드롭다운 - 인바운드 규칙 편집

- 인스턴스 접속하는게 ssh야. 

 

- 인스턴스가 띄워졌고, 화이트리스트에 4466이 있네?

http://ec2-3-135-188-254.us-east-2.compute.amazonaws.com:4466/

이제는 들어갈 수 있지.

- 여기는 서버 관리자가 접속하겠지?

 

5) custom gql 띄우기

- db / prisma / custom graphql 서버 3개 띄워야 하는데 이제 마지막만 하면 됨

- 지금까지는 db랑 prisma를 띄운거야

 

vim prisma.yml

endpoint 바꾸기 아까 서버로 올린 그 endpoint로.

 

5-1) 근데 npm run 하려면 서버 인스턴스에 node를 깔아줘야 해. 이 서버에 없자너 노드가

- lts: 이거 깔거임. 이 버전을 써라 프로덕션에서. 장기적으로 지원해주겠다. long term support.

- 좀 쉽게 깔게 해주는거. 요고

https://github.com/nodesource/distributions

 

nodesource/distributions

NodeSource Node.js Binary Distributions. Contribute to nodesource/distributions development by creating an account on GitHub.

github.com

- brew 같은거로 깔 수도 있어.

- 근데 원하는 버전 설정 못해.

- 원하는 안정적인 버전 다운받고 싶으면 이미 사람들이 만들어서 다 빌드해놓은거 받아서 설치. 그게 위 깃헙 주소.

 

$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ sudo apt-get install -y nodejs

$ node -v
$ npm install // 이제 패키지점제이슨에 있는 prisma가 이 서버에 깔리겠지.

- 우분투니까~

 

npx prisma deploy

- ec2 prisma에다가 배포중.

- 플그 새로고침하면 없던 doc, schema 생김 ㅎㅎ 

- prisma deploy: 저기 어딘가에 보내는거라는디

 

 

- 요약

- 인스턴스를 만들고. 거기에다 프리즈마 서버 띄우고. 거기에 디플로이를 요청한거야.

- 예전에 나 혼자 할 땐 나는 이미 클라우드 있는거에 디플로이 했던거고.

- aws에 프리즈마가 띄워져 있자나. 사실은 local에서 prisma deploy를 해도 아무문제가 없어야한다? 이미 엔드포인트가

- 로컬에서도 엔드포인트만 잘하면 로컬에서도 이 내가 띄운 프리즈마 서버에 디플로이 할 수 있는거야. 4466으로 하면 거기로 가는거지.

그냥 완전 내가 맨첨에 prismagram 배울때 endpoint 프리즈마 클라우드 주소였잖아 그거로 deploy한다는 뜻.

- 내가 띄운 인스턴스에 어차피 디플로이 하는거니까!!!!

- 프리즈마 서버 띄우기 끝!!!

 

- 이제 custom gql  만 띄우면 됨. 드디어!

- 이건 하나의 컴퓨터인데 이건 UI로는 볼 수없지. 그냥 터미널에서만 접근가능하지. ㅋㅋ

- apollo 기본 포트가 4000이래~

 

npm run start

- 노드 깔았으니까 드디어~

- 저 멀리 aws 컴퓨터에서 그냥 똑같이 local에서 띄운거야.

 

http://ec2-3-135-188-254.us-east-2.compute.amazonaws.com:4000/

- 4000 안열어줘서 못들어가지~ 허용해줘~ 인스턴스 가서~

 

- 서버: 들어오는 요청을 처리하는 커다란 반복문! 띄우는건 그 반복문을 돌리고 있는거야.

 

- 4466을 도커로 띄웠자나

- 4000도 도커로 띄우거나 pm2를 이용하거나.

- 도커: 단순히 그 목적만을 위한 툴은 아님.

pm2 or 포레버: 노드 코드를 돌릴 때 데몬화. 하는데, (영원히 백그라운드에서 돌아감. 터미널을 꺼도 돌아감. ) 혹시 에러나서 (어떤이유로) 서버가 꺼져도 다시 켜줌. 데모나이즈.

- 도커는 에러나면 걍 꺼져.

- 근데 mysql 서버 켰는데 mysql 안깔았지! 그게 도커.

 

- vim docker-compose.yml 해보면

image: prismagraphql/prisma:1.34 보인다

이게 프리즈마 컨태이너 만들때 이걸보고 만들어라. 그게 prisma 1.34이다.

restart: prisma or 인스턴스 죽으면 어케? 그냥 다시 시작시켜라.

 

 

6) 다시 드디어 custom gql 띄우기 (아까는 로컬에서 start 한거고 진짜 서버에 올릴거)

- pm2 으로 4000 띄우자

- 근데 typescript는 안돌려줘,,,, 이것도 깔자

$ sudo npm install -g pm2
$ sudo pm2 install typescript

띄우자!!!!!

pm2 start index.ts

 

pm2 list 

하면 뭐 뜰거야. 그게 돌고있다.

exit 

해도 띄워져 있지~

 

 

docker compose up 

mysql이랑 prisma를 못띄우는거래..........

 

[] 이건 다시 알아보기

 

 

- 주의!!!!!!!! 쓰지 않으면 

EC2 - 인스턴스 - 위에 작업 - 인스턴스 상태 - 중지

 

- 궁금증

domain

http://ec2-3-135-188-254.us-east-2.compute.amazonaws.com:4000/ -> deering.co 로 바꾸는건?

도메인을 사야해.

aws route53 에서 dns관리 하면 됨.

 

 

- 결론

일요일에 시간.내서 배포를 다 해보자

백은 재균 프론트는 나.

백은 나중에 낵 ㅏ따라감녀 됨.

[] 넥서스도 써봐?

 

[메모]
- 시즌 확장: 간단할거같아서 생각해보겠음(재균)
- 메기: User에서 출연하는 에피소드 등으로 구분
- createArrow를 매번 날리지 말고 한번에 board 저장하는걸로!
- arrow 통계 방식 고민 (from.id, to.id로 찾을 수 있음)
- 패널, 원석 무시
- 정답을 보여주는 방식 (플스처럼 몇퍼센트 선택했는지 식으로 보여주기)

이정도 얘기함

 

 

[] docker 파일 만들어지게 다시 prisma 만들어보기

[] 나중에 AWS 자격증

[] 그러면 그 어떤 시간마다 돌아가는 서버코드는?

출처: https://mingos-habitat.tistory.com/34 [밍고의서식지:티스토리]