티스토리 뷰

Django

TBC - AWS 장고 배포

daylee de vel 2021. 7. 10. 18:20

출처: https://nerogarret.tistory.com/45

인덱스

인스턴스 생성
키페어 설정 (pem 키)
AWS EC2 서버 원격 접속
AWS EC2 서버 기본 세팅

Github repository로 프로젝트 업로드

 

uWSGI 연결

환경: windows git bash 사용

Part1 AWS 서버 대여 프로젝트 준비

 

인스턴스 생성

1-7 단계에서 1,2,7 단계만 선택. 보안 그룹 등 나머지는 추후에 설정 변경 예정

키페어 설정 (pem 키)

컴퓨터에 저장하는 키, 잃어버리면 재발급 불가

홈폴더의 .ssh 를 만들고 pem키 이동

ssh는 외부 컴퓨터와 원격 통신을 할 때 쓰는 명령어

$ mkdir ~/.ssh/

or 이동
cd ~/.ssh/

키페어 파일의 권한을 소유주만 읽을 수 있도록 변경.

chmod는 파일 읽기 쓰기 실행 권한 변경 명령어

(처음에만 설정해주면 됨)
$ chmod 400 ~/.ssh/deploy_test.pem

AWS EC2 서버 원격 접속

서버에 접속하기

ssh -i [키 페어 경로] [유저 이름]@[퍼블릭 DNS 주소]

ssh -i ~/.ssh/tutorial_base.pem ubuntu@ec2-13-125-55-179.ap-northeast-2.compute.amazonaws.com

유저이름은 ubuntu 퍼블릭 DNS 주소는 퍼블릭 IPv4 DNS 에서 확인가능

The authenticity of host '---' can't be established. 하면서 권한 확인 yes

이 화면은 접속 성공한 화면!

AWS EC2 서버 기본 세팅

EC2 컴퓨터의 기본 패키지 설치

패키지 정보 업데이트
sudo apt-get update

패키지 의존성 검사 및 업그레이드
sudo apt-get dist-upgrade

Python3 패키지 매니저 (pip3) 설치
sudo apt-get install python3-pip

60 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 75.1 MB of archives.
After this operation, 174 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

물어보면 YES

 

Part2: Github repository로 프로젝트 업로드

프로젝트 배포를위해 서버에 파일 옮기는 과정

장고 [배포 체크리스트](https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/)를 보고 알맞은 설정한 뒤 git clone

시크릿키와 각종 설정

http://recordingbetter.com/django/2017/06/29/Django-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-AWS%EC%97%90-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-(%EC%A0%84%EC%B2%B4) 

 

 

 

https://grape-blog.tistory.com/17?category=473970

AWS EC2 서버에서 git clone 하기

프로젝트 파일들은 모두 /srv/ 폴더에 다운로드 받을 것입니다. 따라서 이 폴더를 현재 유저인 ubuntu의 폴더로 소유권을 바꾸어 줍니다.

 sudo는 관리자 권한으로 명령함을 의미하고, chown은 change owner의 줄임말로 폴더의 소유권을 변경할 때 사용

sudo chown -R ubuntu:ubuntu /srv/

소유권이 잘 바뀌었는지 확인하려면 루트 폴더(/) 로 이동 -> cd /

파일 리스트를 자세히 표시 (ls -al)하면 srv 폴더의 소유자가 ubuntu로 변경 확인

 

/srv/ 폴더로 이동하여 github 리모트 리포지토리 파일 서버에 다운

$ cd /srv
$ git clone [레포지토리 주소]

ls 명령어를 사용했을 때 레포지토리 이름과 동일한 폴더가 생겼으면 업로드 성공

 

Part3: uWSGI 연결

Django 앱은 웹 서버와 직접 통신을 할 수 없어서 중간에서 이어줄 WSGI(Web Server Gateway Interface) server가 필요하다. uWSGI라는 Python 패키지를 설치하고 Django와 연결해 주는 과정.

runserver 해보기

지금 서버 컴퓨터에는 프로젝트를 실행하기 위한 패키지들이 깔려 있지 않으니, 로컬 컴퓨터에서와 동일하게 가상환경을 만들어 주고 패키지 버전들을 저장한 requirements.txt를 통해 패키지를 깔아보도록 하겠습니다.

가상환경을 만들기 전에 python3-venv를 설치

sudo apt-get install python3-venv

가상환경 위치는 유저 ubuntu의 홈 폴더에
cd ~
python3 -m venv myvenv

가상환경 활성화
source myvenv/bin/activate

 

프로젝트에 필요한 패키지 설치: requirements.txt 

cd /srv//2021_Tutorial_Base
pip3 install -r requirements.txt

프로젝트에 필요한 패키지 설치: requirements.txt 

이슈1:

requirment 설치중 다음과 같은 에러 발생

해결

heroku 관련 /psycopg2 에러 나는 듯. 헤로쿠 관련은 일단 코멘트 아웃.

rm -r 2021tutorial~ 로 전체 삭제후 다시 푸시

    Complete output from command python setup.py egg_info:
    running egg_info
    creating pip-egg-info/psycopg2.egg-info
    writing pip-egg-info/psycopg2.egg-info/PKG-INFO
    writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
    writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
    writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'

    Error: pg_config executable not found.

    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    If you prefer to avoid building psycopg2 from source, please install the PyPI
    'psycopg2-binary' package instead.

    For further information please check the 'doc/src/install.rst' file (also at
    <https://www.psycopg.org/docs/install.html>).


    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-1eyjw54u/psycopg2/

이슈2: 시크릿키 문제 

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

해결

 

runserver하면 로딩만 하고 페이지가 뜨지 않는 이유는 포트가 열려있지 않기 때문. 보안 그룹 설정에서 변경

로컬 컴퓨터 settings.py에서 ALLOWED_HOSTS 주소 추가 하고 remote로 push - 개발용이기 때문에 배포용은 nginx라는 웹서버를 이용해야한다. 

uWSGI 서버 연결하기

 

 

 

 

 

 

 

 

 

https://velog.io/@daylee/Deploy-webapp-using-Heroku 

헤로쿠에서 에러들 정리한 뒤 aws 배포하자
헤로쿠에서 마이그레이션 실패했었음.. 모델 설정에서 에러날까봐 흠.. 뷰랑 이것저것 충돌 났던 것으로 기억
secretkey config?
검색어: AWS RDS 생성
https://zamezzz.tistory.com/302
DB : https://velog.io/@hyunju-song/AWS%EB%A1%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0RDSDB
PART 2 아랫부분 따라하기 이전에 시크릿키나 각종설정 궁금

 

 

 

 

Part4: nginx 와 uwsgi를 연결 

클라이언트 요청은 웹 서버가 받아야지 uwsgi가 받아 처리하는 것은 적절하지 않음. 웹서버 어플리케이션인

nginx를 사용할 것임.

Django 와 연결해둔 uWsgi서버와 nginx로 1차 배포하기

nginx 와 uwsgi를 연결하기

nginx는 대표적인 웹 서버 어플리케이션. nginx와 django app을 연결하면 request를 받아 response를 해줄 수 있음

서버 컴퓨터에서 nginx를 설치

Static 파일 연결

정적인 파일 로드

 

 

 

 

 

 

 

댓글