Coding History/Team Project

팀플) 배포 준비. 도메인 -> 자동배포 구현

BlackBirdIT 2024. 12. 7. 04:57

가비아에서 도메인 구입,

이번엔 안까먹고 타사 네임서버 작성함. (dnszi.com 네임서버 작성)

오케이 구매 완료함.

그니까 도메인 관리는 dnszi에서 할거임.

여튼 구매 했으니까 다음으로는 배포 테스트에 대한 전략이 필요함.

내가 배운대로 보자면 main이나 master브랜치 밖에 없었어서 push 할 시에 자동 배포 빌드가 이루어진건데 지금은 굳이 따지자면 협업중이고 그런식으로 접근하면 위험하다는 생각이 듦.

그래서 이걸 develop 브랜치에서 파생하는 브랜치를 하나 더 생성하고 여기서 배포에 대한 테스트를 진행하면 좋겠다가 결론임.


그래서 staging이라는 브랜치를 생성해서 develop을 pull 해왔음.

이제 여기서 내 맘대로 좀 주물러보면 됨. 우선은 도커파일이 준비가 되어야하니까..

우선은 도커파일로 빌드를 해보고 해당 도커 서버로 프로젝트가 제대로 돌아가는걸 확인하고 서버 컴퓨터 준비를 하는게 맞을듯.

그럼 뭐.. 도커 파일 생성해야지

우선 알아둬야할게, 원래 프론트를 React로 설정해놓으면 도커파일 두개로 프론트랑 백엔드 둘 다 빌드하고 컨테이너로 관리를 하는 방법이 있다는데, 나는 프로젝트 초기 구상때 이미 자동 빌드를 만들어서 정적 파일들을 알아서 백엔드로 옮겨줌. 그래서 도커파일 하나로 배포 가능함.

우선 도커파일 만들어서 테스트 해보고, 잘 되면 docker-compose도입해서 Mysql, Redis설정까지 하고 테스트해봐야겠음.

지금 이미지는 그냥 도커파일 빌드해보는중

일단 성공은 시켰고.. DB 연결이 되어있지 않아서 마지막에 오류를 반환하긴하는데 도커파일 자체에서 두개 다 필드 시키고 정적파일에 넣어버려서 아마? 잘 됐을거임.

일단 서버 컴퓨터 준비를 위해서 AWS에서 IAM 사용자 새로 생성하러감.

엑세스 토큰 발급 받고,

기존 엑세스 토큰 로그아웃 시키고 다시 새로운걸로 로그인함.

그리고 terraform으로 인스턴스생성하고 서버 컴퓨터 설정, 서브넷 설정까지 해서 열어줌.

근데 지웠다가 다시 설정하고 다시 생성함.

난 내 터미널에서 진행하고 싶어서 SSH public KEY 생성하고 테라폼에 추가해줌.

음 이제 경고가 안뜨는구만.

아싸 됐따.

그럼 서버 컴퓨터 준비도 얼추 됐네.

테라폼으로 서버 컴퓨터 설정할 때 도커와 깃을 깔아둬서 바로 깃에서 토큰 발급 받고 서버 컴퓨터에서 로그인 진행함.

그리고 서버컴에 Mysql 받아주자.

그리고 mysql 초기 비번 세팅 해줬음

이제 디비버에다가 연결해볼까?

연결도 함.

그다음은 Redis 설치해주자.

이렇게 진행함.

레디스 접속 해서 비번 설정도 해줌..

nginX proxy manager 설치도 진행함.

그리고 세팅함!

이제 아까 샀던 도메인 설정해주러 가자. A 레코드 설정해주러 가면 됨.

해줬음.

그리고 nginx에서 자잘한 설정까지 다 마치고

에러 반환 확인함.

진짜 준비준비 끝났으니까. 이제 디렉토리 생성해주고, git clone 해보자.

오케이! git clone 성공 했다. 아까 그 스테이징 브랜치 가져와서 Dockerfile도 있음.

바로 빌드 해보고 싶긴한데 깃 이그노어 처리된 파일이 많아서....

너무 많이 작성해줘야된다. .env 파일 두개랑, application-DB, secret이랑 구글 관련된 인증 파일 두개..

그니까 그냥.. 자동 배포 로직 바로 시작해볼까? 해야될건 .github/workflows/deploy.yml의 작성과 infraScript/zero_downtime_deploy.py 설정임.


와 작성하는데 꼼꼼하게 확인해본다고 꽤 오래 걸림..

깃에 시크릿 입력 내용임..

오 드디어 첫 시도

근데 릴리즈 생성 부터 막힘 ㅋㅋ

뭐.. 좀 여러가지 고치고 총 다섯번 시도끝에

깃 액션은 모두 통과했다.

근데 내가 깃 클론을 진행한 위치가 조금 이상했었나봄..

그래서 다시 위치를 맞춰주고, 다시 테스트 했음.


아 왜 계속 서버 컴이 반응이 없나 했는데 생각해보니까 이미지 푸쉬를 한번도 안했네 바로 로컬에서 한번 해주자..

푸쉬중! 푸쉬 됐으니까.

자동 배포 로직으로 해보자고.

몇번째고..

그래도 안돼서 서버컴퓨터랑 로컬에서 명령어 쳐가면서 원인을 찾아보니 서버컴퓨터에 올라간 zero_downtime_deploy.py가 깡통이였음. 그래서 이걸 전송하는 곳을 좀 잘 봤는데, 팀프로젝튼데 내 아이디를 쓴게 문제였음.. 팀 이름으로 바꾸니까 제대로 반환하는거 확인했고 진짜 찐막 테스트.


인 줄 알았는데 이게 제대로 작동안해서 보니까 프로젝트가 협업, 그니까 팀플이라서 팀의 깃으로 해야함. 그리고 팀 깃의 권한 설정 등등.. 뭐 많았고 팀의 이름이 대문자가 섞여있어서 소문자로 수정하고 리모트 재부여까지 함..

팀 내 소통 구역에다가 고지 해뒀고,,

해준 설정은 여기서 세팅에서 ->

개인 토큰 허용해줬고,

기존 사용하던 내 개인 토큰에서도 관리자 허용을 추가해서 수정해줬음.

그렇게 드디어 성공함..

근데 팀 자체에 올라갔네 리포지토리가 아니고?

그래서 자동 배포 테스트 계속 하면서 deploy.yml 공식 문서 참고하면서 고침.

처음에는 리포지토리 이름을 써줘서 테스트해봄. 안됨 ㅇㅇ 또 팀에 올라감.

그래서 아싸리 변수로 동적처리할 수 있는 방법이 없나 공식문서 뒤져보면서 하나하나 다 좀 까봤음.

그래서 이런 결론에 도달함. 뭐 애초에 우리팀은 리포지토리가 하나라 걱정거리는 아니긴 했는데 리포지토리가 두개면 어떻게 되나 궁금했는데,

이것도 잘 생각해보니까 액션이 동작하는 리포지토리에서만 작동할테니 전혀 문제될게 없겠다고 판단됨.

지금 이 시도마저도 안되면 난 진짜 모르겠음..


와 개멍청했다. 개빡쳐서 저거 지우려고 들어갔는데

여기서 연결해주는게 있었네..


근데 안되길래 내부에서 파이썬 코드 실행시켜보니까 서버 컴퓨터에서 도커 로그인이 풀려있었음.

그래서 로그인하고 진짜 마지막 시도.. 해보자.

드디어 자동 배포 완료.

일단.. 자자.

지금 거의 40시간 깨어있다.