Sprit - Server Development

해피데빙·2022년 3월 30일
0

TIL

목록 보기
44/45

ec2랑 연결해서 찾아야 함

0번째 에러
log파일을 찾을 수 없음

해결방법 codedeploy-agent 설치
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

bucket-name은 https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/resource-kit.html#resource-kit-bucket-names
참고하기

첫번째 에러
Runtime Error

두번째 에러

Sprint Review

#CI/CD

현업에서는 CI/CD라고 한다

(다같이) plan을 짜고
(개발자가) code를 짜고 build를 하고
(QA)가 test를 하고
(DevOps)가 release, deploy, operate는 다른 사람이 마맡는다

즉 기획부터 시작해서 서비스가 고객/사용자에게 가는 것까지를 CI/CD라고 한다
CI(Continuous Integration) Plan - test : 지속적인 통합
CD(Continuous Delivery) test - operate : 지속적인 전달
다 합해서 지속적 배포(Continuous Deployment)라고 한다

우리가 한 것
code build release deply


배포에서 하나하나의 과정을 stage라고 한다
그 중 하고 있는 행동들을 action이라고 한다

Pipeline

Client : code, build, deploy
Server : code, deploy

-client만 build가 있는 이유
build는 실행 가능한 애플리케이션(artifact)를 만드는 과정
html과 css를 작성할 때는 react와 달리 build를 할 필요가 없다
그냥 올려도 브라우저가 알아서 해석을 하기 때문에!
react는 jsx로 되어 있기 때문에 브라우저가 알아듣기 위해서는 build를 해서 실행 가능한 앱으로 만들어줘야 한다
그럼 로컬에서 빌드 없이 react를 실행할 수 있는 이유는 npm run start하면 일종의 서버가 띄워준다
이 서버는 리액트의 언어를 이해할 수 있는 형태로 만들어준다


그냥 s3로 올려도 가능

-server는 없는 이유
js를 브라우저가 아닌 node 런타임만 있으면 js를 쓸 수 있기 때문에 빌드가 필요 없다

  • code 역할
    : 깃허브
    커밋만 하면 소스를 가져와서 바로 쓸 수 있도록
    ex. gitlab, codecommit 등에서도 쓸 수 있다
    깃허브에 커밋하면 자동으로 빌드를 한다

##빌드스펙 : 이렇게 빌드해달라는 파일

해석 : prebuild, build, artifact에 client/build 파일 넣어달라

build를 s3에 해달라고 했고
(원래는 EC2의 주소가 바뀌면 버킷 안에 다시 지우고 넣고 했어야 하는데 이제는 깃허브에서 알아서 가져가도록 함)

  • build 역할
    : codebuild(aws)

  • deploy
    : codeDeploy

이 셋을 묶어주기 위해 Pipeline을 썼다

cf.로드 밸런서 : 트래픽을 분산하는 용도로 쓰는 컴퓨터
-> 많은 트래픽이 있으면 필요

서버 과정


cf. runas: root (관리자 버전으로)
script안의 파일은 shell 버전으로 되어 있어서

1.AppplicationStop : 앱을 종료

ex. 내짱멋진앱 1.0을 내짱멋진앱 2.0으로 업데이트하고 싶으면
1)일단 1.0을 종료해야 한다 [다운타임 : 서버가 돌아가지 않는 시간]
2)2.0을 깃허브에서 받아온다 [git clone]
3)npm i/ npm start / pm2 start: destination에 복사
4)내짱멋진앱 2.0 실행

종료, git에서 가져오기, install, 새 버전 실행
만약 한 과정에서 에러가 나면 업데이트를 안하고 롤백을 한다 (1.0으로 돌아가는 것)

2.AfterInstall : 의존성 설치
3.ApplicationStart: Pm2로 실행

DB와 연결을 해야 클라, 서버가 잘 연결되고 로그인을 할 수 있게 된다
데이터를 가져와야하니까

배포 에러 핸들링

s3에 정적 파일을 올리고
EC2에 서버 코드를 올린다
RDS에 DB를 올린다

접근 방식

s3와 EC2가 ajax로 요청과 응답을 한다
s3 하나만으로 웹사이트 만들 수 있을까? YES / html , css만으로도 올릴 수 있다
s3 + ec2로 웹사이트 가능? YES/ ex. 요청 toUpperCase만 해서 응답, 저장만 안하면 됨
로그인하는 웹사이트는? DB 필요 /1) 서버에서 db로 보내고 db는 잘 받았다고 응답 2)로그인할 때 db에서 찾아서 보냄

경우1.만약 s3에서 로그인 창이 안 떴으면? 빌드나 s3의 문제
경우2.로그인창이 떴는데 로그인이 안되면? 서버의 문제
(요청을 못 받거나, 서버가 꺼졌거나 rds 요청을 못 보냄)
2-1.그래서 ec2의 public ip로 접근을 했을 때 아무것도 나오지 않으면?
2-1-1.서버가 꺼짐? 그러므로 pm2로 확인해보니 서버가 켜져있음
2-1-2.인바운드 규칙
2-1-3.디비가 없거나
2-1-4.퍼블릭 엑세스가 안되어 있거나

빌드 에러 확인
빌드 내역에 들어가서 빌드 선택 > 빌드 로그 탭 확인
1. 로그가 없으면 빌드까지 오지도 않음
2. 등등의 오류 확인

로그 보기

1) 배포 > 배포 내역 > 이벤트 > 생명주기 중의 문제를 확인할 수 있다
2) 개발자도구 > CodeDeploy > 배포 >로그
3) cd /opt/codedeploy-agent/deployment-root/deployment-logs

log에서 뒤에서 10개 보기

log에서 에러 메시지만 보기

위의 코드 앞에 tail만 cat으로 바꿔주기

에러 #1.


sudo로 명령어를 치면 구버전과 연결되어 있다

방법#1.
which npm : npm의 위치를 알려줌
하지만 sudo 버전에는 npm의 위치가 secure_path에 있음
그러므로 sudo visudo를 써서 path를 바꿔줘야 한다

방법#2.

에러 #2. Specific file already exists

Q. 기존 파일이 있다고 자동 배포가 실패면 자동 배포가 아닌 거 아닌가요?
A. 만약 실무 중 ci/cd면 배포 실패 시 롤백을 하고 원래 버전으로 돌아가던가
혹은 다시 지우고 설치한다

그러므로 수동으로 지우거나 자동화를 하기 위해 있으면 삭제, 없으면 설치하는 shell 파일을 scripts 안에 넣어준다

에러 #3. log를 볼 수 없으면

codedeploy-agent를 실행하면 된다
원래 default로 들어가는데 누락된 경우 수동으로 해야 한다

profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17

0개의 댓글