작년 초, 개인블로그를 만들었다.
당시 jojoldu님의 스프링부트로 웹 서비스 출시하기의 도움을 많이 받았다.
블로그 인프라
Backend는 git push하면 배포까지 자동화였지만,
Frontend는 EC2 인스턴스 내에서 빌드를 하였고,
메모리 부족으로 인스턴스가 뻗어버리는 경우가 종종 있었다.
이에, 빌드하기 전에 서버를 종료시키고 메모리를 최대한 확보한 뒤 빌드를 하곤 했다.
어제는 이 방법으로도 뻗어버렸다. 그래서 배포 자동화를 하기로 했다.
바뀐 블로그 인프라
이제 Travis에서 빌드를 해준다.
Travis Branches
배포할 때 새로운 브랜치를 만들어서 진행했다.
36번의 뻘짓 이후에 배포자동화를 할 수 있었다. 뭐한다고 36번이나 빌드했을까….
Amazon S3
배포할 때 EC2인스턴스로 보내야 할 파일이 무엇인지 명확하게 몰랐다.
폴더 전체를 보내기에는 node_modules의 용량이 컸고, node_modules 폴더만 빼자니 적절한 zip 명령어를 찾지 못했다.
결국 배포에 필요한 파일들을 쭉 나열했다.
zip -r myBlog-Front .nuxt package.json static before-deploy.sh after-deploy.sh appspec.yml
스크립트 이름을 계속 바꾸곤 했는데 .travis.yml에서 이름을 안바꿔줘서 배포 실패를 여러번 겪었다… 여기서 시간을 많이 낭비했다.
appspec.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# CodeDeploy 버전 설정 (프로젝트버전이 아니기 때문에 0.0 이외에는 오류남)
version: 0.0
os: linux
files:
- source: / #S3 버킷에서 복사할 .zip 위치
destination: /home/ec2-user/app/front/build/ #붙여넣기 할 위치
hooks:
BeforeInstall:
- location: before-deploy.sh # 배포 이전에 실행시킬 스크립트
timeout: 180
runas: root
AfterInstall:
- location: after-deploy.sh # 배포 이후에 실행시킬 스크립트
timeout: 180
runas: root
after-deploy.sh (배포 실패)
1
2
#!/bin/bash
/home/ec2-user/app/front/after-deploy.sh &
after-deploy 스크립트
는 배포파일을 받은 후, 서버를 실행시킨다. 잘 될 것 같았다.
하지만 180초 이후에, 배포는 실패한다.
이 스크립트는 180초 이내에 완료되어야 하기 때문이다.
결국 180초 동안 서버가 돌아가고, 이후에는 배포 실패와 함께 서버가 종료된다.
백그라운드 실행이라 상관없을 줄 알았는데 아니었다.
after-deploy.sh (배포 성공)
1
2
#!/bin/bash
/home/ec2-user/app/front/after-deploy.sh > /dev/null 2> /dev/null < /dev/null &
해결책은 aws 문서에 있었다.
입력,출력,에러를 다 null로 보내버린다..
이러면 after-deploy.sh 내용에 상관없이 스크립트를 실행시키는 순간 배포 성공이 떴다.
쿨한 녀석이다..
배포자동화는 이번으로 3번째다.
방식은 똑같은데 오랫만에 하니 가물가물했다.
4번째 배포자동화때는 빨뤼빨뤼 하고싶다.
무중단 배포는 사용자가 별로 없어서 할 생각이 아직 안든다
Comments powered by Disqus.