프로젝트[Admin Page] (3)

oswaldeff·2021년 3월 13일
0
post-thumbnail

🖥 aws ec2

aws ec2생성 및 연결 단계는 아래와 같다.

  1. aws에서 AMI는 Ubuntu Server 20.04 LTS를, 티어는 프리티어인 t2.micro를 선택한다.

  2. 인스턴스 시작 후 pem key를 다운받고 로컬의 /.ssh로 chdir한다.

  3. 인바운드 규칙을 설정하고 인스턴스에 연결한다.

우분투 서버의 파이썬 개발환경을 위한 설정을 마친 후, 깃헙에서 프로젝트를 pull하였다.
보안관련하여 secret한 파일들은 pem파일을 통해 ssh연결로 업로드하였다.
시험적으로 python manage.py runserver를 통해 정상적으로 프로젝트가 실행되는지 확인한 후 다음단계로 넘어갔다.

사실 이 이후부터는 웹서버니 웹서버어플리케이션이니 하는 개념에 대한 이해가 전무했으므로 ubuntu연결창을
닫았을때 서버가 활성화되도록 screen을 통해 제어했었다.

그러다 nginx와 gunicorn의 존재에 대해 알게 된 후 추가작업을 진행하였다.

💾 nginx

ubuntu에서 nginx설치 후 설정법은 아래와 같다.

$ sudo cp -f /생략/[name]_admin/[name]_admin_django/config/nginx/static.conf /etc/nginx/sites-available/static.conf

경로의 static.conf파일을 sites-available로 복사한 후,

$ sudo ln -sf /etc/nginx/sites-available/static.conf /etc/nginx/sites-enabled/static.conf

sites-enabled에 링크해준다. (리눅스에서 ln은 링크, ln -s는 심볼릭 링크로 바로가기와 같다고 한다)

$ sudo systemctl reload nginx
$ systemctl status nginx

설정을 마친뒤 nginx를 reload해주고 정상적으로 돌아가는 status를 통해 확인한다.
status명령어 실행 후 'Active:' 옆에 초록색 글씨로 active(running)이 보인다면 정상적으로 동작하는 것이다.

💾 gunicorn

모든 단계에서 헤맨건 마찬가지지만 gunicorn설정에서 생각보다 많은 시간을 할애했었는데,
종착지에 다왔다는 마음에 단순히 복붙으로 해결하려고 했기 때문이다.(반성합니다😂)

$ sudo vim /etc/systemd/system/gunicorn.service

gunicorn.service를 system경로에 등록하고 vim편집을 통해 직접 편집해주어야 했는데
user & group설정과 특히! gunicorn binary path가 골칫거리였다.
이것저것 시도해봐도 permission denied가 되었으나 관련문서를 읽어보니 루트 사용자가 ubuntu로 설정되어있으면 프로젝트의 권한자와는 상관없이 user와 group는 두개다 ubuntu로 지정해주어야함을 알게되었다.

하지만 산넘어산으로 gunicorn path에서 계속 오류가 났었다.
결론적으로, 프로젝트는 pipenv가상환경에서 구동하도록 만들어놓았으니 당연히 gunicorn도 가상환경 경로를 할당해주었어야 했으나 ubuntu의 python3-gunicorn을 할당해주어서 path오류가 났었던 것이다.

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/생략/[name]_admin/[name]_admin_django
ExecStart=/home/ubuntu/.local/share/virtualenvs/[name]_admin-****/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 [name]_admin_project.wsgi:application

[Install]
WantedBy=multi-user.target

User: gunicorn을 실행할 사용자
Group: gunicorn을 실행할 사용자 그룹
WorkingDirectory: ec2 ubuntu내 프로젝트 경로
ExecStart: gunicorn설치 경로와 workers로 thread설정 및 bind로 접속이 가능하게 할 ip를 설정
workers: 통상적으로 코어x2 ~ 코어x2+1 라고 한다. (t2.micro의 코어수는 1이므로 3을 할당했다.)

$ sudo systemctl daemon-reload
$ sudo systemctl enable gunicorn
$ sudo systemctl start gunicorn
$ systemctl status gunicorn

nginx와 마찬가지로 gunicorn을 구동시키고 status로 확인을 하면 아래와 같다.

'Active: '가 초록색으로 잘 동작중이고 main을 제외하고도 workers가 총 3임을 확인할 수 있다.
(내가아는 PID는 PID제어뿐인데ㅎㅎ; 몰라서 찾아봤더니 프로세스 식별자로 프로세스나 식별자를 확인하기 위한 고유 식별번호라고 한다.)

💡 conclusion


배포까지 완성이 되었고 테스트결과 DB도 문제없이 CRUD됨을 확인했다!

처음으로 aws rds, s3, ec2를 연동하고 배포까지 해보는 프로젝트였기 때문에 생각보다 오래 걸렸기도 했지만 그만큼 장고가 알아서해주는 부분도 많다는것을 알게되었고 이것저것 시행착오를 맛볼 수 있었다.

혼자 프로젝트를 진행하며(front부분은 이미 django admin html, css가 제공되기 때문에 구태여 추가적으로 작업할 이유도 없었지만) 혼자 진행하면서 배울 수 있는점이 과연 얼마나 있을까 했는데, 오히려 시작부터 끝까지 전반적으로 모르는 용어 및 개념이 나올때마다 그때그때 꼬리를 물고 공부할 수 있었던 것 같고 이미 도메인까지 할당된 서비스를 망칠 수는 없으니 code를 작성하고 무작정 실행하기보다 매 과정을 심사숙고하고 진행 할 수 밖에 없었다.

다만 팀 프로젝트처럼 토의를 통해 더 나은 결과물을 낼 수 있는 가능성과 효율적으로 작업하고 올바른 방향으로 진행하는지에 대한 피드백 기회가 없었던 것이 아쉬움으로 남는다.

0개의 댓글