- 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/
- 리눅스 선택
$ 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
- 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 자격증
[] 그러면 그 어떤 시간마다 돌아가는 서버코드는?