Gravatar호환성 문제 해결
직접 구현해서 해결
Heroku와 Gunicorn
Publishing Our Flask Website
.gitignore 파일 추가하기
- posts.db파일이나 venv폴더, 숨겨진 Pycharm .idea폴더가 업로드 되는 것을 방지할 수 있음.
Git을 사용해 프로젝트 버전 관리하기
- 프로젝트의 버전 관리 활성화
-
Git
선택 -
추적되지 않은 파일 추가하고 커밋하기
- 작업이 성공적으로 완료되면 Git Log 패널에서 첫 번째 커밋 내역을 확인할 수 있다
환경 변수를 사용해 민감한 정보 저장하기
- os모듈 임포트
- 코드 대체
app.config['SECRET_KEY'] = '8BYkEfBA6O6donzWlSihBXox7C0sKR6b'
⇨ app.config['SECRET_KEY'] = os.environ.get('FLASK_KEY')
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///posts.db'
⇨ app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get("DB_URI", "sqlite:///posts.db")
Gunicorn으로 WSGI 서버 설정하기
- 앱 실행 시 개발 모드에서 프로덕션 모드로 전환해 웹사이트를 시작할 때 WSGI 서버를 사용해야 한다는 경고가 표시 됨
-
일반적인 웹 서버는 파이썬 애플리케이션을 실행할 수 없으므로, Flask 앱을 실행하기 위해 특별한 유형의 서버(WSGI)가 생성됨
-
WSGI서버의 핵심 기능은 파이썬 Flask 애플리케이션과 호스트 서버 간의 언어와 프로토콜을 표준화하는 것
requirements.txt
에gunicorn==21.2.0
추가하기- gunicorn 서버 정보, 앱 이름, Flask라는 설정 파일을 사용
Procfile 생성하기
- 최상위 폴더에
Procfile.
생성 -
Procfile에
web: gunicorn main:app
작성 : 호스팅 제공자가 HTTP요청을 수신할 수 있는 web작업자를 생성.
Procfile은 웹 앱이 gunicorn을 사용하도록 명시함
Procfile은 main.py파일이 app오브젝트라는 것을 명시
⇨ 호스팅 제공자가 앱의 진입점을 알고 어떤 앱이 호출되는지 알 수 있다. - 변경 사항 커밋
Github에 원격 저장소 푸시하기
- PyCharm에 GitHub 연결하기
- GitHub에 원격 저장소 푸시하기
Git을 사용하면 PyCharm에서 VCS메뉴가 ‘Git’으로 표시됨
Git -> GitHub -> Share project on Github를 선택해 원격 저장소에 코드를 푸시
- GitHub 사이트에서 프로젝트 확인 가능
호스팅 제공 서비스에 회원가입하고 웹 서비스 생성하기
- 호스팅 제공 서비스 계정 생성하기
앱을 인터넷에 배포하기 위해 다양한 호스팅 제공자를 사용할 수 있다.
호스팅 제공자마다 기능과 가격 정책이 다르며 가격 정책이 변경될 수 있음
- 호스팅 제공 서비스 계정 생성하기
- 호스팅 서비스에 GitHub 저장소 연결하기
- 호스팅 서비스에 PostgreSQL 데이터베이스 설정하기
- 호스팅 서비스에 환경 변수 키-값 쌍 저장하기
SQLite 데이터베이스를 PostgreSQL로 업그레이드하기
- SQLite는 파일 기반 데이터베이스이다.
데이터베이스 코드를 작성하고 디버깅할 때는 DB Viewer를 사용해 간단하게 SQLite파일을 열어 데이터를 확인할 수 있어서 편리했음 - 하지만 호스팅 제공자를 통해 배포한 후에는 파일 경로가 24시간 등의 주기에 따라 변하기 때문에 불편함. 메일 데이터베이스가 초기화될 수 있으므로 불편을 겪는 사용자가 생김
- 따라서 수많은 데이터 항목을 처리하고 사용자에게 안전하게 데이터를 전달할 수 있는 PostgreSQL로 업그레이드 하기
- 웹사이트 메뉴에서 새 PostgreSQL 데이터베이스 생성
- 내부 데이터베이스 URL 복사하기 : 데이터베이스 생성 후 정보탭에서 Internal Database URL을 확인
- SQLALCHEMY_DATABASE_URI 환경 변수 설정하기
- 웹서비스 Environment설정에서 main.py에서 사용하는 키 이름과 동일한 환경 변수 생성
- 키 값에 내부 데이터베이스 URL 붙여 넣기
키 값 앞부분postgres
를postgresql
로 변경
💡SQLite을 Postgres로 문제없이 전환할 수 있는 이유 :
SQLAlchemy와 함께 psycopg 패키지를 사용하기 때문
psycopg 모듈은 널리 사용되는 파이썬용 PostgreSQL 데이터베이스 어댑터이다.
(requirements.txt 의 목록에 psycopg 패키지가 들어 있음)
file : day-70-starting-files-blog-for-deployment