AWS EC2를 이용하여 django 배포하기 (3)
지난 포스팅에서는 AWS EC2를 이용하여 django실행을 다뤘다.
이번 포스팅은 개발을 위한 django 프로젝트에 CI/CD를 적용하는 과정을 다루고자한다.
이전에 CI/CD를 적용하는 과정은 windows환경이었기 때문에 EC2환경에서는 다른 방식으로 설치를 진행해야했다.
우선 gitlab-runner의 repository를 추가해야한다.
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
그 다음 gitlab-runner를 설치해준다.
sudo apt install gitlab-runner
설치가 완료되면 연결할 gitlab을 등록한다.
CI/CD를 적용할 저장소 접속 -> 좌측 메뉴바에서 Settings -> CI/CD -> Runners 에서 New project runner를 눌러준다.
플랫폼은 linux, Tags와 설명을 적어주면 된다.
그러면 runner를 등록하는 절차를 gitlab에서 알려주는데 그대로 따라하면된다.
Step 1을 그대로 복사해서 EC2 터미널에 붙여넣기하면
Enter the GitLab instance URL (for example, https://gitlab.com/):
[https://gitlab.com]: https://gitlab.com
Enter a name for the runner. This is stored only in the local config.toml file:
[ip]: test
Enter an executor: shell, ssh, instance, kubernetes, docker, docker-windows, virtualbox, docker-autoscaler, docker+machine, custom, parallels:
shell
설정값을 넣어달라는 메세지가 나오고 차례대로 http://gitlab.com, test, shell을 입력해줬다.
# 이 메세지가 출력되면 정상적으로 등록이 된 것이다.
Configuration (with the authentication token) was saved in "/home/ubuntu/.gitlab-runner/config.toml"
이제 run명령어를 입력해주면 된다.
gitlab-runner run
이제 .gitlab-ci.yml 파일을 작성해보자. 필자는 단순 git pull만 하면 되었기 때문에 간단하게 작성이 되었다.
stages:
- test
build:
stage: test
script:
- echo 'hi'
- cd /home/ubuntu/test/gitlab_baseball_web
- git config --global --add safe.directory /home/ubuntu/test/gitlab_baseball_web
- git pull
tags:
- test
해당 파일을 간단하게 설명하면 하단에 있는 tags에서 tag가 "test"인 runner를 사용하여 /home/ubuntu/test/gitlab_baseball_web 경로에 있는 저장소에 git pull을 하겠다는 의미이다.
이 파일을 push해서 확인해보니 정상적으로 pull이 완료되었다.
git config --global 이부분은 최초 pull과정에서 저장소 경로가 안전하다고 설정해주는 명령어로, 입력해주지 않으면 에러가 발생하기 때문에 넣어줬다.
이제 CI/CD까지 완료되었다. 필자도 여기까지했으면 24시간 열려있는 서버를 만들었다고 생각했으나 문제가 발생했다.
EC2랑 연결된 외부 SSH를 종료시킬 경우 EC2 세션이 끊겨서 django로 올려둔 화면 접속이 되지않는 것이었다.
이를 해결하기 위해 screen이라는 백그라운드 작업으로 다른 터미널을 돌리는 프로그램을 사용하기로 했다.
우선 screen을 설치했다.
sudo apt-get install screen
그 이후 server라는 screen을 생성해준다.
screen -S server
이 명령어를 입력하면 server라는 새로운 터미널이 열리게 된다.
이제 여기서 django를 실행시켜준 뒤 ctrl + a -> d 를 눌러주면 24시간 꺼지지 않는 페이지를 배포할 수 있다.
마치며
이번 토이프로젝트를 진행하면서 처음으로 클라우드 컴퓨팅 서비스를 경험해봤다. 서버를 이렇게나 손쉽게 구축하고, 문제가 발생할 시 새롭게 서버를 만들 수 있다는 장점과 24시간 메인 컴퓨터를 켜놓지 않아도 프로젝트 홈페이지가 올라와있으니 너무나 간편한 것 같다. 다만 아쉬운점은 airflow까지 ec2로 배포가 되었다면 진정한 서버가 구축되는 것인데 프리티어의 스펙 한계로 올리지 못한것이 아쉬운 것 같다. 퇴사 이후에 오랜만에 실제 서버에서 작업하는 느낌이 들어 정말 재밌게 작업한 것 같고 정상적으로 작동되니 다행이다. 앞으로 클라우드 관련 공부도 해봐야겠다.