본문 바로가기

프로그래밍/Python

[Django] 장고프로젝트를 pythonanywhere.com 에 배포해보기

[Django] pythonanywhere.com에 프로젝트 배포(Deploy) 과정


파이썬 + 장고로 개발된 프로젝트를 배포하기 위해서는 다음 과정을 거친다.

프로젝트 구조는 다음과 같다고 가정한다.


1. settings.py 편집

○ 개발을 위해 설정한 "DEBUG" 옵션을 False로 지정한다.

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False


○ BASE_DIR : 프로젝트 기본경로를 설정한다

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


○ STATIC_ROOT 설정

# 기본값은 일단 비활성화
#STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, 'static'),
#]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')


○ 웹사이트 접근가능 호스트 설정

   myhost는 pythonanywhere.com 가입한 계정으로 

   myhost.pythonanywhere.com 계정을 사용할 수 있다.

ALLOWED_HOSTS = [
    'myhost.pythonanywhere.com' # * 로 지정하면 모든 웹사이트로 부터의 접근이 허용된다.
]

○ DATABASE 엔진 및 파일 설정

# Original
DATABASES = {
    'default': {
        'ENGINE''django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 배포용
DATABASES = {
    'default': {
        'ENGINE''django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

    배포용으로 하지 않으면 나중에 static 파일들을 수집(collect)하는 과정에서 오류가 발생한다.

           > python manage.py collectstatic 


○ STATIC_URL, STATIC_ROOT 설정

STATIC_URL = '/static/'

# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, 'static'),
# ]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')


2. pythonanywhere.com 사이트에 계정 등록

   (이미 등록되었으면 안해도 됨)

  pythonanywhere.com : 장고 파이썬 프로젝트 배포시 번거로운 설정을 최소화 시켜주고 쉽개 배포할 수 있게 해 주는 서비스로 회원가입시 mysite.pythonanywhere.com 도메인이 자동으로 부여되고, 이 도메인을 이용해 웹프로젝트를 배포해 볼 수 있다.


 Files로 이동



3. 파일 업로드를 위해 프로젝트 전체 파일 압축




4. "Upload a file" 버튼을 이용해 압축한 "fc_community.zip" 파일업로드


5. Upload한 압축파일 해제.

상단의 "Open Bash console here" 링크 클릭하면 bash console 창이 열린다.

이 창은 Unix/linux bash 콘솔창과 동일하다.

pythonanywhere.com에 가입한 계정별로 홈 경로가 지정되며 mysite인 경우의 홈 경로는

   /home/mysite 가 홈 경로가 된다.

홈경로에 프로젝트를 직접 해제 하면 홈디렉토리에 메인 웹프로젝트가 설정 되므로 프로젝트 경로를 미리 만들어 놓고 해당 경로에 압축을 해제 하도록 한다

이 디렉토리를 웹 파일 관리자에서 만들수도 있으며, 압축된 프로젝트 파일을 새로 생성한 프로젝트 경로에 직접 업로드할 수도 있다.

홈 경로에 업로드한 압축파일 "fc_community.zip" 파일이 있다면,

   > mkdir fc_community

   > mv fc_community.zip ./fc_community

위와 같이 하여 fc_community 경로로 압축파일을 옮겨 놓고 다음과 같이 압축 해제 한다.

   > cd fc_community

   ~ fc_community>unzip fc_community.zip

위와 같이 명령을 실행 하면 모든 파일이 압축 해제 된다.



6. 가상머신(Virtual Machine) 생성 / 활성화 / 장고(Django) 설치

  pythonanywhere에는 이미 가상머신을 사용할 수 있도록 세팅 되어 있어서 해당 프로젝트를 위한 가상머신을 생성후, 가상머신을 활성화 시키고, 프로젝트에서 사용할 장고(Django)를 설치한다.


~ $ virtualenv --python=python3.7 fc_env
~ $ source fc_env/bin/activate
~ (fc_env) $ pip install django


7.  프로젝트에서 사용된 static 파일 수집

  프로젝트에서 사용된 라이브러리, CSS등 원격이 아닌 로컬에서 호출될 수 있도록 종속된 static 파일들을 "static" 경로로 수집한다.

  예를 들어 부트스트랩 "bootstrap.min.css" Style Sheet 파일 및 장고가 기본으로 제공하는 admin 정보파일들


06:01 ~/fc_community $ python manage.py collectstatic File "manage.py", line 17 ) from exc ^ SyntaxError: invalid syntax

위와 같이 버전의 차이로 인해 python 명령으로 Syntax 오류가 발생하면 "python3" 로 실행한다.


06:01 ~/fc_community $ python3 manage.py collectstatic


8.  데이터베이스 모델 정보 마이그레이션

  이미 마이그레이션된 DB(sqlite3) 정보를 포함해서 올렸으면 안해도 된다.


06:01 ~/fc_community $ python manage.py magrate


9.  pythonanywhere에 웹 프로젝트 생성

   1) pythonanywhere 메인 메뉴바에서 "Web"을 클릭

   2) "Add a new web app" 클릭

   3) "Manual configuration" 클릭

   4) "Python version 선택(Python 3.7)


       5)  최종 생성된 사이트



10.  pythonanywhere 웹 프로젝트 상세설정


11.  wsgi 설정(웹서버 기본설정)

  

  1) WSGI configuration file "/var/www/mysite_pythonanywhere_com_wsgl.py" 

     > 파일 웹편집기가 열림


  2)  편집

       기본 값 비활성 (영역 선택 후 Ctrl+'/' --> 주석 처리)


      장고 영역 활성화 및 프로젝트에 따른 경로정보 수정



11.  배포완료 : 서비스테스트 : http://mysite.pythonanywhere.com