본문 바로가기
기타

[Django/Devroup] Django Docker 컨테이너 fly.io에 배포하는 법

by 항붕쿤 2025. 2. 19.

먼저 다음의 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 명령어를 터미널에 입력해주면

배포가 완료된다.