greatsangho의 이야기

캠프 77일차 - AWS EC2 Amazon Linux 인스턴스 설정 및 Nginx + Gunicorn + Django 본문

프로그래밍/SK AI 캠프

캠프 77일차 - AWS EC2 Amazon Linux 인스턴스 설정 및 Nginx + Gunicorn + Django

greatsangho 2024. 12. 13. 17:16

 

아마존 EC2는 클라우드 가상 서버를 만들고 사용할 수 있게 해준다.

컴퓨팅의 EC2로 들어와 인스턴스 생성을 진행한다.

여기서는 amazon Linux를 사용해본다. 아래로 내려 키를 생성하고 다운 받아준다. 한 번만 받을 수 있으므로 잘 보관한다.

보안 그룹을 생성하고 방화벽 설정을 해준다. 네트워크 규칙에 ssh, http, https가 모두 체크되도록 한다. 그 다음 볼륨은 8GB 이상으로 설정한다. 생성하고 인스턴스 탭으로 돌아오면 활성화된 인스턴스가 나타난다. 위의 인스턴스는 인스턴스를 삭제한 것인데, 삭제하면 바로 목록에서 사라지지 않고 일정 시간이 지나면 자동으로 사라진다.

보안 그룹에서 EC2를 생성하면서 만들어진 새로운 그룹이 있다. 들어가서 인바운드 규칙 편집으로 8000포트를 열어준다.

탄력적 ip주소 할당으로 생성한 뒤 들어가서 만들어준 EC2 인스턴스와 프라이빗 IP까지 설정하여 연결해준다. 이로써 인스턴스에 고정ip 설정을 할 수 있다.

연결은 웹에서 바로 연결하거나 ssh를 이용한 연결 등을 사용할 수 있다. 명령어를 통해서 ssh 연결도 가능하다.

설정이 끝났으면 저번 포스트와 같은 방법으로 ssh 키를 이용해 연결해준다.

sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime 으로 한국 시간으로 맞춰준다. date로 확인한다.

git bash나 windows powershell에서도 주어진 ssh키 연결을 실행할 수 있다. 위에서 소개한 명령어를 이용한 연결은

ssh -i "aws_ec2.pem" ec2-user@ec2-98-83-239-96.compute-1.amazonaws.com

명령어를 사용했는데, 이 명령은 key가 있는 위치에서 해당 명령을 실행해야한다.

아마존 리눅스는 fedora계열이므로 데비안 계열인 우분투와 달리 yum 패키지 매니저를 사용한다. cat /etc/os-release로 확인할 수 있다.

파이썬 가상환경을 만들어준다.

pip install로 wheel, django, markdown을 설치한다. git이 없으므로 sudo yum install git -y로 설치한다.

sudo dnf로도 가능하다.

git에는 sqlite가 없으므로 python manage.py migrate로 마이그레이션을 진행해준다.

. start_server.sh로 실행하면 다음과 같이 만들었던 페이지가 잘 접속되는 것을 확인할 수 있다.

 

AWS 인프라 구축 가이드 책 > 버전 오류로 에러 발생 ==================================================

이제 서버 버전 관리를 편하기 하기 위한 버전 관리 툴인 asdf를 사용하기 위해 git에서 clone해온 뒤 이를 .bashrc에 설정한다.

 

GitHub - asdf-vm/asdf: Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more

Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more - asdf-vm/asdf

github.com

 

 

GitHub - asdf-vm/asdf-nodejs: Node.js plugin for asdf version manager

Node.js plugin for asdf version manager. Contribute to asdf-vm/asdf-nodejs development by creating an account on GitHub.

github.com

 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

글을 쓰는 기준 22.12.0이 최신 버전이다. 이를 설치해도 잘 동작한다. 이 링크에서 버전을 확인하고 설치한다.

 

 

GitHub - deopard/aws-exercise-a

Contribute to deopard/aws-exercise-a development by creating an account on GitHub.

github.com

https://s3.amazonaws.com/phusion-passenger/releases/passenger-6.0.12.tar.gz

wget을 통해 가져온다.

sudo yum install gcc gcc-c++ glibc glibc-common gd gd-devel openssl-devel libcurl-devel -y로 gcc 관련 패키지와 기타 루비를 설치에 필요한 패키지를 설치한다. **루비에서 오류 발생**

=========================================================================================

Nginx, Gunicorn, Django 사용하기(세팅에서 오류 발생)

https://www.linkedin.com/pulse/brief-overview-wsgi-usage-gunicorn-nginx-django-rashid-mahmood

Django, Nginx, Gunicorn을 위한 튜토리얼

 

03) Nginx, Gunicorn 배포

[TOC] # 시스템 구성 예시 * 우분투 16.04 * Django * nginx * Gunicorn 다음 설치 예제는 실제 물리서버가 아닌 vultr.com의 가상서버인…

wikidocs.net

pip install gunicorn을 해준다.

gunicorn --bind 0:8000 config.wsgi:application을 해주면 실행된다. 그러나 이 상태는 css와 js를 불러오지 못한다.

gunicorn --bind unix:/tmp/gunicorn.sock config.wsgi:application

이를 해결하기 위해 소켓으로 가져오면 서버가 필요하다.

sudo vim /etc/systemd/system/gunicorn.service 로 새로운 파일을 다음과 같이 입력해준다.

[Unit]
Description=gunicorn daemon for Django Project
After=network.target

[Service]
User=ec2-user                          # EC2 사용자 이름
Group=www-data
WorkingDirectory=/home/ec2-user/projects/skn5_lecture    # manage.py가 위치한 루트 디렉토리 경로
ExecStart=/home/ec2-user/venv/bin/gunicorn \
  --workers 2 \
  --bind unix:/tmp/gunicorn.sock \
  config.wsgi:application

[Install]
WantedBy=multi-user.target

 

sudo systemctl start gunicorn.service

sudo systemctl enable gunicorn.service

를 각각 실행하여 aws 시작시 실행되도록 설정해준다.

 

이제 sudo dnf install nginx -y를 해준다.

 

 

일단은 장고와 Gunicorn까지만 구현하였고 추후 Nginx를 이용해 마저 구현할 예정이다.

반응형