기타/Django & Web

Heroku 배포하기

yujindonut 2021. 7. 8. 02:03
728x90

AWS

Amazon Web Service 의 약자인 AWS는 아마존의 자회사로 2006년 설립됐다. 주력 제품은 클라우드 서비스다. 구글이나 네이버 클라우드는 일반 소비자를 대상으로 서비스를 제공하여 저장공간에 접근하는 등의 서비스를 이용하는데 아마존의 주요 고객은 개발자 엔지니어 등 IT 관계자이며, AWS가 제공하는 서비스는 '인프라'다.


배포 전 사전준비

-환경변수

-시스템에 저장되어 있는 변수

보통 비밀키 등 유출되면 안되는 정보

또는 환경에 차이를 둘 때 사용(테스트/프로덕션 구별 등)

os.environ에서 dict 형식으로 불러올 수 있음

os.environ.get('변수명','기본값')으로 사용

 

 

 

-requirements.txt

내 파이썬 앱을 실행하기 위해 우선 설치되어야 하는 패키지들

Django, Pillow등

패키지명 == 벼전으로 저장

pip freeze명령어는 해당 환경에 설치된 모든 패키지를 보여줌

>는 프록램의 출력을 파일에 저장한다는 뜻

pip freeze>requirements.txt로 생성

 

IAM

Identity and Access Management의 줄임말

IAM에서 계정을 만든 후 해당 계정 로그인 정보 (엑세스키& 시크릿 키)를 이용하여 AWS의 API활용

보안을 위해 권한을 최대한 보수적으로 잡음

 

S3

Simple Storage Service의 줄임말

AWS에서 제공하는 구글드라이브 정도로 생각할 수 있음

최초 용량 지정 없이 사용한 만큼만 과금되므로 용량 예측할 필요X

여러 서버에서 동시에 접속 가능(부하 분산 유리)

 

settings.py

pip freeze : 설치된 가상환경 모두 표시

pip freeze > requirements.txt 

 

AWS Console에서 로그인 후

사용자 추가

터미널에 가서

settings.py

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

다시 AWS console로 간다

s3검색 후 -> 버킷 만들기

모든 퍼블릭 엑세스 차단 누른다 = 버킷 생성

 

settings.py

pip install boto3 : AWS관련 API를 파이썬에서 쉽게 활용할 수 있도록 AWS측에서 직접만든 패키지

python manage.py runserver 하고 생성하면 맞게 돌아감


1. Heroku 회원가입 - https://www.heroku.com

2. Heroku CLI 설치 - https://devcenter.heroku.com/articles/heroku-cli

3. 환경 변수 적용-

  Debug 는 아래 값 사용

     DEBUG = (os.environ.get('DEBUG', 'True') != 'False')

4. .gitignore 파일 적용 (파일 생성)

gitignore.io 에서 Django 선택 후 '생성' 클릭

페이지에 나온 텍스트를 모두 복사후 .gitignore 파일로 저장

5. Heroku 용 파일 작성

 Procfile 이라는 파일을 만들어 아래 내용 작성 - manage.py있는 폴더안에 Procfile을 생성

web: gunicorn 프로젝트명.wsgi --log-file - 

runtime.txt 파일에 아래 내용 작성 - manage.py있는 폴더안에 생성

python-3.X.X / 내 버전 적어준다 

6. 필요한 Dependency 설치

pip install gunicorn whitenoise dj-database-url psycopg2-binary

7. settings.py 수정

Whitenoise 설치

MIDDLEWARE 에서 제일 SecurityMiddleware 바로 아래 내용 추가

'whitenoise.middleware.WhiteNoiseMiddleware',

'*' : 모든 주소에서 접근을 허용한다는 뜻

-ALLOWED_HOSTS 수정

ALLOWED_HOSTS = [] 를 ALLOWED_HOSTS = ['*'] 로 수정

 

-DB 관련 코드 수정

settings.py 제일 밑에 아래 내용 추가

 

import dj_database_url

db_from_env = dj_database_url.config(conn_max_age=500)

DATABASES['default'].update(db_from_env)

 


requirements.txt 생성

pip freeze > requirements.txt

git에 수정된 파일들 추가   

git add -A

git commit -m "add files for deploying to heroku"

Heroku 관련 명령어들 실행

더보기

오류: bash : heroku : 명령을 찾을 수 없습니다

[git bash에 path구성이 등록되어 있지 않아 생긴 오류]

/c/Program\ Files/Heroku/bin/heroku login 이렇게 치면 오류X

PATH="$PATH:/c/Program Files/Heroku/bin"

heroku login

heroku create

내 앱이 배포가 될 주소가 나온다

git push heroku main 수정이 되면 여기부터 다시 git push를 해야 heroku에 반영이 된다

여기까지 실행하고 주소로 가면 이러한 오류

ProgrammingError at /

relation "must_go_mustgo" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "must_go_mustgo"

-아직 migration이 되지 않아서 db가 존재하지 않는다는 오류

heroku run python manage.py migrate

heroku run python manage.py createsuperuser

heroku open

Heroku 에서 환경 변수 설정

https://dashboard.heroku.com 에서 앱 선택

Settings

Config Vars > Reveal Config Vars

KEY VALUE 값에 입력후 저장

 

728x90