먼저 다음의 3가지 라이브러리를 설치해준다.
1. dj-database-url: database의 url로 django와 db를 연결할 때 필요
2. gunicorn: python의 wsgi 서버로서 http 요청을 수신하고 이를 서버 애플리케이션(django)으로 전달하여 처리하는 역할
3. python-dotenv: .env파일을 활용하여 환경변수를 쉽게 로드할 수 있게 해주는 모듈
그 후 아래의 명령어를 터미널에 입력한다.
# fly.io 다운로드
iwr https://fly.io/install.ps1 -useb | iex
# fly.io 회원가입
fly auth signup
# 또는 로그인
fly auth login
# 프로젝트 런치
fly launch
fly launch 명령어를 입력하고 좀 기다리면 dockfile, .dockerignore, fly.toml 파일을 덮어씌울 거냐는 질문이 나올텐데, 전부 y를 입력해준다. (y를 입력하면 파일 배포 설정을 알아서 다 해주지만 N을 입력하면 파일 설정을 일일이 다 해야한다.)
그 후

fly.io 사이트의 db App에 있는 Hostname을 복사해준 뒤

config 폴더의 .env 파일에
DATABASE_URL=복사한 Hostname
을 입력해준다.
그 후 settings.py에
import dj_database_url
from dotenv import load_dotenv
load_dotenv()
DATABASES['default'] = dj_database_url.parse(os.environ.get('DATABASE_URL'))
dj_database_url이랑 dotenv를 import 해준 뒤 DATABASES 디폴트를 .env에서 입력한 DATABASE_URL로 설정해준다.
여기서 나는
DATABASE_URL=postgresql://devroup-db.flycast
ENVIRONMENT=production
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DB_NAME', 'devroup_db'),
'USER': os.environ.get('DB_USER', 'devroup_user'),
'PASSWORD': os.environ.get('DB_PASSWORD', 'devroup_password'),
'HOST': os.environ.get('DB_HOST', 'db'),
'PORT': os.environ.get('DB_PORT', '5432'),
}
}
if os.environ.get('ENVIRONMENT') == 'production':
DATABASES['default'] = dj_database_url.parse(os.environ.get('DATABASE_URL'))
.env 파일에 ENVIRONMENT 환경변수를 추가해주어 ENVIRONMENT가 production 일때만 fly.io의 postgresql을 사용하도록 하고 로컬 환경에서는 docker의 postgresql을 사용하도록 설정했다.
그 다음 fly deploy 명령어를 터미널에 입력해주면

배포가 완료된다.
'기타' 카테고리의 다른 글
| [웹 해킹/드림핵] XSS와 CSRF의 차이 (0) | 2024.12.02 |
|---|---|
| [Django/Devroup] Devroup (0) | 2023.12.18 |
| [Django/Devroup] Mysql과 django의 unique 속성 호환 문제 (0) | 2023.12.18 |
| [Django/Devroup] django-allauth 로그인/로그아웃할 때 나오는 alert창 없애는 법 (2) | 2023.12.17 |
| [Django/Devroup] MYSQL에 이모지가 저장되지 않는 문제 (0) | 2023.12.17 |