[Portfolio] AWS 환경 설정

2025. 1. 21. 16:29Etc Project/Portfolio

https://github.com/KwonGeneral/Kortfolio.git

 

GitHub - KwonGeneral/Kortfolio: 포트폴리오

포트폴리오. Contribute to KwonGeneral/Kortfolio development by creating an account on GitHub.

github.com

 

이번엔 AWS 환경 설정을 다루겠습니다~!

그 전에, settings.py에서 static 관련된 설정과 보안 옵션을 설정해줍시다.

 

settings.py를 마무리하셨다면

AWS 사이트로 접속한다음 AWS 계정을 생성하고, EC2에 접근한 다음에 새 인스턴스 생성으로 들어와줍니다.

 

 

이제는 한글도 지원하나 보네요. 우측 상단에 아시아 태평양 (서울)은 꼭 확인해주세요~

저는 프리티어로 사용할 것이기 때문에 따로 설정할 부분은 없습니다.

 

키 페어는 Windows에서 접근할 생각이라면 ppk로 리눅스로 접근하실거면 pem으로 설정하시면 됩니다.

 

네트워크 설정에서 '기존 보안 그룹 선택'으로 모든 트래픽을 허용하는 default vpc를 선택해주시고, 스토리지는 프리 티어인 경우 30GB까지 무료라고 하지만, 제 기억상 GB단위로 요금이 산정됬던것으로 기억이 납니다. 혹시 모르니까 기존값인 8GB로만 설정해줍시다. 이정도만해도 충분해요.

 

이제 인스턴스 시작을 통해 마무리해줍니다.


호스팅을 위해 탄력적 IP도 설정해줍시다. EC2는 재시작시 계속해서 IP가 변경이 되는데, 탄력적 IP를 설정해주면 IP가 고정이 되서, 도메인 연결과 SSL 인증을 위해서는 필수입니다~!

 

 

 

이제는 위에 초록색 퀵메뉴로 IP 주소 연결이 뜨네요. 눌러줍시다.

계정을 생성하고, EC2를 1개만 생성하셨다면 인스턴스와 프라이빗 IP주소가 1개밖에 없을 겁니다.

설정하고 연결해줍시다.

 

다음으로는 메뉴에서 '보안 그룹'으로 이동한 다음에, 인바운드 규칙 편집을 해줍니다.

인스턴스에 터미널로 접근하기 위해서는 SSH를 열어줘야합니다. 그리고 보안을 신경쓸 필요가 없기때문에 그냥 전체 0.0.0.0으로 설정해줍니다.

 

이제 인스턴스 메뉴로 돌아와서 '연결'을 해서 잘 동작하는지 확인해봅니다.

 

정상 동작을 확인했다면, sudo yum update를 통해 내부 패키지를 업데이트해줍니다. sudo는 관리자권한으로 실행하라는 뜻입니다.

 

 

다음으로는 'sudo yum install python3 python3-pip python3-devel nginx gcc -y' 명령어를 통해 파이썬과 개발 도구를 설치해줍니다.

 

 

이제 프로젝트 폴더 생성 및 파이썬 가상환경도 설정해줍시다.

mkdir ~/"프로젝트명"

cd ~/"프로젝트명"

python3 -m venv venv

source venv/bin/activate

 

그 다음으로 Django과 Gunicorn, Git도 설치해줍시다.

pip install django gunicorn

sudo yum install git -y

 

 

그다음으로 'Gunicorn' 서비스 파일을 생성합니다.

아래 명령어를 입력하면 편집창이 뜰겁니다.

sudo nano /etc/systemd/system/gunicorn.service

 

 

여기에 아래와 같이 입력해줍니다.

EC2를 기본값으로 생성하셨으면 User가 ec2-user일 겁니다. 다른걸로 설정하셨으면 바꿔주세요.

컨트롤+S로 저장하고 컨트롤+X로 나와줍니다.

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

[Service]
User=ec2-user
Group=ec2-user
RuntimeDirectory=gunicorn
WorkingDirectory=/home/ec2-user/"프로젝트명"
Environment="PATH=/home/ec2-user/'프로젝트명'/venv/bin"
ExecStartPre=/bin/mkdir -p /run/gunicorn
ExecStartPre=/bin/chown -R ec2-user:ec2-user /run/gunicorn
ExecStart=/home/ec2-user/"프로젝트명"/venv/bin/gunicorn \
          --workers 3 \
          --bind unix:/run/gunicorn/gunicorn.sock \
          --error-logfile /var/log/gunicorn/error.log \
          --access-logfile /var/log/gunicorn/access.log \
          "프로젝트명".wsgi:application

[Install]
WantedBy=multi-user.target

 

다음으로 Nginx를 설정해줍니다.

sudo nano /etc/nginx/conf.d/"프로젝트 폴더명".conf
server {
    listen 80;
    server_name "퍼블릭 IP 주소";

    location /static/ {
        alias "static 파일 경로";
        access_log off;
        expires max;
        add_header Cache-Control public;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/run/gunicorn/gunicorn.sock;
    }
}

 

다음으로 'python manage.py collectstatic' 명령어를 통해 static 파일들을 수집해줍니다.

 

 

그 다음으로, proxy_params파일을 생성하고, 내용을 추가해줍니다.

sudo nano /etc/nginx/proxy_params

 

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

 

그리고 static 파일들을 /var/www/static으로 이동시켜줍니다.

sudo mkdir -p /var/www/static
sudo cp -R /home/ec2-user/Kortfolio/static/* /var/www/static/
sudo chown -R nginx:nginx /var/www/static
sudo chmod -R 755 /var/www/static

 

이제 nginx와 gunicorn 서비스를 시작해줍니다.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl start gunicorn
sudo systemctl enable gunicorn

 


 

잘 동작 하네요~!

다음 포스트에서는 도메인 연결에 대한 글을 다루겠습니다~!