DevHyun

[DevHyun's Blog] Django&Python으로 만든 Blog를 가상환경(pythonanywhere)에서 배포하기! 본문

Web/Django&Python Blog Projecct

[DevHyun's Blog] Django&Python으로 만든 Blog를 가상환경(pythonanywhere)에서 배포하기!

D3V3L0P3R 2020. 10. 16. 20:35

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다.

 

tutorial.djangogirls.org/ko

 

 

1. 가상환경 사이트 선택(pythonanywhere,heroku 등등)

* pythonanywhere 사용!

 

2. pythonanywhere 가입!

www.pythonanywhere.com/

 

Host, run, and code Python in the cloud: PythonAnywhere

Batteries included With Python versions 2.7, 3.3, 3.4, 3.5 and 3.6, and all the goodies you normally find in a Python installation, PythonAnywhere is also preconfigured with loads of useful libraries, like NumPy, SciPy, Mechanize, BeautifulSoup, pycrypto,

www.pythonanywhere.com

 

3. github에 DevhyunDjangoBlog Project Commit-Push!

 

4. pythonanywhere - Console에서 bash로 열기

 

5. github에 있는 DevhyunDjangoBlog(본인의 repository명) Project 복사하기

* 본인의 github id 입력

$ git clone https://github.com/<user-name>/DevhyunDjangoBlog.git

 

6. tree 명령어로 Project가 잘 복사되었는지 확인

* 본인의 프로젝트 명

$ tree DevhyunDjangoBlog

 

7. 가상환경 생성하기

* 본인의 프로젝트 명

$ cd DevhyunDjangoBlog
$ virtualenv --python=python3.7 myvenv
Running virtualenv with interpreter /usr/bin/python3.7
[...]
Installing setuptools, pip...done.
$ source myvenv/bin/activate
(myvenv) $ pip install django~=2.0
Collecting django
[...]
Successfully installed django-2.0.xx

8. 데이터 베이스 생성(migrate) 후 superuser생성

(mvenv) $ python manage.py migrate
Operations to perform:
[...]
Applying sessions.0001_initial... OK
(mvenv) $ python manage.py createsuperuser
...
..
.
finish

 

9. web app으로 배포

 

- 배포하기! 에서 인용

tutorial.djangogirls.org/ko/deploy/

로고를 클릭해 PythonAnywhere 대시보드로 와서 Web을 클릭하고 Add a new web app를 선택하세요.

도메인 이름을 확정한 후, 대화창에 수동설정(manual configuration) ("Django"옵션이 아니에요) 을 클릭하세요. 다음, Python 3.6을 선택하고 다음(Next)을 클릭하면 마법사가 종료됩니다.

 

10. 가상 환경 설정

 

빨간색 글자 클릭 후 아래와 같이 입력

* pythonanywhere 유저 명

* 프로젝트 명

 

/home/<user-name>/<prjoject-name>/myvenv/

 

11. WSGI 파일 설정 - 빨간 박스 클릭 후 열리는 wsgi 파일에서 내용 전부 삭제 후 아래와 같이 입력

 

* pythonanywhere 유저 명

* 프로젝트 명

import os 
import sys

path = 
'/home/<user-name>/<prjoject-name>'
if path not in sys.path:
   sys.path.append(path)

os.environ[
'DJANGO_SETTINGS_MODULE'] = '<prjoject-name>.settings' 

from django.core.wsgi import get_wsgi_application 
from django.contrib.staticfiles.handlers import StaticFilesHandler

application = StaticFilesHandler(get_wsgi_application())

* StaticFilesHandler는 CSS를 다루기 위한 것입니다.

 

 

12. save 후 pythonanywhere - web 페이지에서 reload 버튼 클릭 후 생성된 도메인으로 들어가기!

 

13. 여기서 부터는 내가 겪었던 error 및 해결방법

 

14. error.log 페이지에서 아래와 같은 에러 발생

* Local에서는 문제없이 Run 되었는데 가상환경에서만 발생하는 오류인듯?

* 가상환경에서만 발생하는 에러이기 때문에 pythonanywhere에 있는 file만 수정했음

* pythonanywhere 자체 편집기 사용( pythonanywhere - file)

 

14-1. PosixPath

 

/home/<user-name>/<prjoject-name>/settings.py에서 에러 발생 

TypeError: argument of type 'PosixPath' is not iterable Then you have to convert the path to be a string:

BASE_DIR 앞에 str 붙여준 후 해결

DATABASES = { 
	'default': { 
    	'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': str(BASE_DIR / 'db.sqlite3'), 
        } 
  }

 

14-2. No such file or directory

 

/home/<user-name>/<prjoject-name>/setting.py에서 에러 발생

Github에 Project 공유 시 Django SECRET_KEY 를 암호화? 하기 위해서 추가했던 json file를 못찾아서 에러 발생

FileNotFoundError: [Errno 2] No such file or directory: 'secret.json'

문제가 되는 구문인 open('secret.json')을 가상환경의 절대경로를 붙여준 후 해결

with open("/home/devhyun/DevhyunDjangoBlog/secret.json","r") as f:
    secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
    try :
        return secrets[setting]
    except KeyError :
        error_msg = f"set the {setting} enviroment variable"
        raise ImproperlyConfigured(error_msg)

 

14-3. Invalid ALLOWED_HOSTS

 

/home/<user-name>/<prjoject-name>/settings.py의 마지막 줄에 

ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]', '.pythonanywhere.com'] 를 추가 한 뒤에 다시 Web 탭에서 Reload!

* [::1] 은 IPv6에서의 localhost를 의미한다

 

Comments