Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 사이킷런
- SQL
- CROSS JOIN
- data preprocessing
- ML
- sklearn
- 명령어
- 머신러닝
- django
- 기본
- Cartesina Product
- Machine Learning
- 레이블 인코딩
- partition
- 원핫인코딩
- PARTITION BY
- Python
- SQLD
Archives
- Today
- Total
Programming Blog
7. 배포하기 본문
배포하기
- 웹 사이트를 온라인으로 배포하기 위해 웹 사이트 개발의 가장 중요한 부분인 배포에 대해서 다룬다.
- 배포란?
: 애플리케이션을 인터넷에 올려놓아 다른 사람들도 볼 수 있게 해주는 것을 말한다. - 로컬 컴퓨터, GitHub, Pythonanywhere 중 로컬 컴퓨터는 개발 및 테스트를 수행하는 곳이고, 개발이 완료되면
프로그램 복사본을 GitHub에 저장한다. 웹 사이트는 PythonAnywhere에 있고 GitHub에서 코드 사본을 업데이트 한다.
Git 설치하기
- Git이란 '버전 관리 시스템'으로 많은 프로그래머들이 사용하고 있다. 이 S/W는 시간 경과에 따른 파일 변경을 추적이
가능하여 나중에라도 특정 버전을 다시 불러올 수 있다. - Windows에서 설치하는 방법이라는 것을 염두할 것.
Git은 https://git-scm.com/ 에서 다운받을 수 있고 설치 중 5번째 PATH 환경 설정(Adjusting your PATH environment)
화면에서 윈도우 커맨드라인에서 Git과 유닉스 도구를 사용
(Use Git and optional Unix tools from the Windows Command Prompt) 을 선택한다. 그 외에 나머지는 모두 기본 설정
윈도우 스타일로 체크아웃, 유닉스 스타일로 라인엔딩 커밋하기
(Checkout Windows-style, commit Unix-style line endings)를 체크하는 것도 좋다.
Git 저장소 만들기
- Git은 코드 저장소(repository)에 특정한 파일들 집합의 변화를 추적하여 관리한다.
- 프로젝트 시작하기
- 콘솔 창을 열고 dt디렉토리에서 아래 명령어를 실행한다.1234$ git initInitialized empty Git repository in ~/djangogirls/.git/$ git config --global user.name "Your Name"$ git config --global user.email you@example.comcs
git 저장소 초기화는 프로젝트 시작 시 한 번만 필요로 한다.
- git은 디렉터리에 모든 파일과 폴더들의 변경 점을 추적할 건데, 특정 파일들을 무시하여
추적하지 않게 할 수 있다. 기본 디렉터리에 .gitignore 라는 파일을 만들면 된다.
에디터를 열어 아래 내용을 작성한다.1234567*.pyc*~__pycache__myvenvdb.sqlite3/static.DS_Storecs 그리고 dt(본인이 만든 폴더) 폴더의 맨 위에다 .gitignore 라는 파일로 저장한다.
파일명 앞에 마침표로 시작하는 것이 중요하다.
.gitignore 파일에 있는 db.sqlite3 라는 파일은 모든 게시물이 저장된 로컬 DB이다.
PythonAnywhere는 다른 DB를 사용하기 때문에 저장소에 추가될 필요가 없고 다른 DB로는
SQLite로도 사용하지만 보통 SQLite보다 훨씬 많은 방문자를 보유한 웹사이트일 경우 MySQL을 사용한다.
※로컬 데이터베이스는 데이터가 삭제되도 괜찮은 테스트 공간으로만 사용할것!
- git add 하기 전이나 변경된 것이 있는지 잘 모를 때마다 git status 명령어를 사용하는 것은 좋은 방법이다.
잘못된 파일이 추가되거나 커밋된 경우, 이를 복구할 수 있다. git status 명령은 미추적/수정된/스테이지된 파일, 브랜치 상태와 그 외 많은 정보를 보여준다. - 우리가 만든 코드들을 저장소에 넣는 명령어를 아래와 같이 실행한다.1234567$ git add --all .$ git commit -m "My Django Girls app, first commit"[...]13 files changed, 200 insertions(+)create mode 100644 .gitignore[...]create mode 100644 mysite/wsgi.py
cs
GitHub에 코드 배포하기
- - 새로운 무료 계정을 만든다
- 왼쪽에 new를 클릭하여 새 저장소(new repository)를 "my-first-blog"라는 이름으로 생성한다.
- "README 파일과 초기화 하기(initialize with a README)" 체크박스는 체크 안 한 상태로 두고
.gitignore 옵션도 비어있는 상태로 놔두고 라이센스도 비워둔다.
※저장소 이름은 원하는 이름으로 바꿀 수 있지만, 매번 변경해서 사용하면 불편하므로 되도록
my-first-blog로 사용 요망.
그리고 다음 화면에서 저장소 복제 URL(repo's clon URL)을 볼 수 있다.
"HTTPS"버전을 선택해서 그 주소를 복사하고 터미널에 붙여넣기 한다.
그 다음 내 컴퓨터의 Git 저장소를 GitHub에 있는 저장소로 연결해야 하므로
콘솔에 아래와 같이 입력한다.12$ git remote add origin https://github.com/(GitHub 사용자 이름)/my-first-blog.git$ git push -u origin master
cs
그리고 로그인 화면이 나오면 GitHub 사용자이름과 암호를 입력한다.
그럼 방금까지 작성한 코드가 gitHub에 저장되었다.
PythonAnywhere에 블로그 설정하기
- PythonAnywhere에 로그인 후 사용자 이름은 블로그 주소의 일부가 된다.
예를 들어, 사용자 이름이 name이면 URL은 name.pythonanywhere.com 이 된다.
GitHub에서 PythonAnywhere로 코드 가져오기
- 대시보드 또는 콘솔 페이가 있는데 "배시(Bash)" 콘솔로 시작하는 옵션을 선택한다.
- PythonAnywhere 버전의 콘솔로 PC에 있는 커맨드라인 같은 것으로 생각해도 된다. - GitHub에 있는 코드를 끌어와 저장소를 "복제"해 PythonAnywhere로 탑재하는 방법은
PythonAnywhere 콘솔에 아래와 같이 입력한다.
그럼 PythonAnywhere에 코드 복사본을 올리게 된다.1git clone https://github.com/<your-github-username>/my-first-blog.gitcs
그 후 PythonAnywhere에 tree my-first-blog 명령어를 입력하면$ tree my-first-blog my-first-blog/ ├── blog │ ├── __init__.py │ ├── admin.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 다음과 같이 복사가 된 것을 확인할 수 있다.
PythonAnywhere에서 가상환경 생성하기
- PythonAnywhere 에서도 내 컴퓨터에 있는 것과 같이 작동할 수 있게 가상환경을 생성할 수 있다.
PythonAnywhere 배시 콘솔에 아래와 같이 입력한다.
pip install은 설치되는데 5분정도 걸린다.12345678910111213$ cd my-first-blog$ virtualenv --python=python3.7 myvenvRunning virtualenv with interpreter /usr/bin/python3.6[...]Installing setuptools, pip...done.$ source myvenv/bin/activate(myvenv) $ pip install django~=1.11.0Collecting django[...]Successfully installed django-1.11.3cs
PythonAnywhere에서 데이터베이스 생성하기
- 컴퓨터와 서버가 또 하나의 다른 점은 다른 데이터베이스를 사용한다는 점이다. 그래서 사용자 계정과 글은 서버와 해당 컴퓨터와 다를 수 있다.
- 서버에서도 똑같이 데이터베이스를 초기화 시켜준다.
migrate와 createsuperuser를 사용한다.12345(mvenv) $ python manage.py migrateOperations to perform:[...]Applying sessions.0001_initial... OK(mvenv) $ python manage.py createsuperusercs
web app으로 블로그 배포하기
- 웹 앱으로 배포할 준비가 다 됐으며 이제 로고를 클릭하여 PythonAnywhere 대시보드로 와서 Web을 클릭하고 Add a new web app을 선택한다.
도메인 이름을 지어주고, 대화창에 수동설정(manual configuration)을 클릭한다.
다음, Python 3.7을 선택하고 다음을 클릭하면 마법사가 종료된다.
※"Django"가 아니라 꼭 "수동설정(manual configuration)을 선택해야 기본 설정이 더 좋다.
가상환경(virtualenv) 설정하기
- 서버 앱에 변경사항이 있을 때 PythonAnywhere 설정 화면으로 이동해야 한다.
- virtualenv 섹션에서 Enter the path to a virtualenv 라고 쓰여 있는 빨간색 글씨를 클릭하고
/home/(본인 등록 이름)/my-first-blog/myvenv/
라고 입력합니다.
이동 경로를 저장하려면 파란색 박스에 체크표시를 하고 클릭한다.
WSGI 파일 설정하기
장고는 "WSGI 프로토콜"을 사용하여 작동한다. 이 프로토콜은 파이썬을 이용한 웹사이트를 서비스하기 위한 표준으로
PythonAnywhere에서도 지원한다.
WSGI 설정을 위해 파일을 수정하여 내가 만든 장고 블로그를 PythonAnywhere에서 인식하게 할 것이다.
"WSGI 설정 파일(WSGI configuration file)" 링크(페이지 상단에 있는
"코드(Code)" 섹션 내에 /var/www/(사용자 이름)_pythonanywhere_com_wsgi.py 부분)를 클릭하면 에디터를 볼 수 있다.
모든 내용을 삭제하고 아래 내용을 추가한다.
※반드시 PythonAnywhere 사용자 이름으로 바꿀것! 그렇지 않으면 Import 오류 로그 발생한다.123456789101112import osimport syspath = '/home/(PythonAnywhere사용자 이름)/my-first-blog' # PythonAnywhere 계정으로 바꾸세요.if path not in sys.path:sys.path.append(path)os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'from django.core.wsgi import get_wsgi_applicationfrom django.contrib.staticfiles.handlers import StaticFilesHandlerapplication = StaticFilesHandler(get_wsgi_application())cs
이 파일은 PythonAnywhere에게 웹 애플리케이션의 위치와 Django 설정 파일명을 알려주는 역할을 한다.
StaticFilesHandler는 CSS를 다루기 위한 것이다. runserver명령으로 로컬 개발 중에 자동으로 처리되고,
튜토리얼 뒷 부분에서 CSS를 작성할 때 정적 파일에 대해 알아볼 것이다.
저장(Save)을 누르고 웹(Web) 탭을 누른다.
큰 녹색 다시 불러오기(Relaod) 버튼을 누르면 내가 만든 애플리케이션을 볼 수 있다.
페이지 최상단에 가는 링크를 발견할 수 있다.
디버깅 팁
- 내 사이트에서 접속할 때 오류가 보이면 제일 먼저 error log에서 디버깅 정보를 찾아본다.
PythonAnywhere Web tab(.https://www.pythonanywhere.com/web_app_setup/) 에서 이 링크를 찾을 수 있다,
여기서 오류 메세지를 확인하고 최근 오류 메세지는 맨 하단에 위치하고 일반적으로 많이 일어나는 문제들은 아래와 같다.
- virtualenv를 생성하고 활성화할 때, Django를 설치할 때, Collestac을 돌릴 때, 데이터베이스를 설치할 때 같은 각 단계를 위한 콘솔 작업을 할 때 한 단계를 빼먹는 경우
- web tab에서 virtualenv 경로를 쓸 때 오타가 났을 때 - 이런 경우 빨간 작은 에러 메시지가 뜰 것입니다.
- WSGI 설정 파일에 실수가 있을 때 -- my-first-blog-folder 폴더의 경로를 올바르게 입력했었나요?
- Web app에서 그랬듯이 virtualenv에도 같은 파이썬 버전을 선택했나요? 둘 다 같은 버전이어야 한다.
- 만약Invalid HTTP_HOST header: <your-site-name> . You may need to add <your-site-name> to ALLOWED_HOSTS.
라는 오류메세지가 나온다면/mysite/settings.py
의 마지막 줄에ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]', '.pythonanywhere.com']
를 추가 한 뒤에 다시 Web 탭에서Reload <your-site-name
이라는 녹색 버튼을 눌러 주세요.
사이트의 기본 페이지는 로컬 컴퓨터와 마찬가지로 "It worked"라고 보여준다
URL 끝에 /admin/ 을 추가하면 관리자 사이트로 이동한다. 사용자 이름과 암호로 로그인하여 서버에 새 게시물 추가가 가능하다.
<중요!>
몇 개의 게시물을 작성하고 나면 PythonAnywhere가 아닌 로컬 설정으로 돌아갈 수 있고, 여기에서 로컬 설정을 변경해야 한다.
이것이 공통적인 웹 개발의 작업과정이다. 로컬에서 변경하고, 변경 사항을 GitHub에 적용하고, 변경 사항을 실제 웹서버로 가져온다.
이를 통해 실제 웹 사이트를 손상시키지 않고 작업하고 테스트 해볼 수 있다.
<github에 파일 옮기는 코드 - 로컬 콘솔 창에서>
$ git status (변경된 파일 빨간색)
$ git add --all .
$ git status (변경될 파일 녹색)
$ git commit -m "설명"
$ git push
<github에서 PythonAnywhere로 파일 복사하는 코드 - PythonAnywhere 배시 콘솔 창에서>
$ cd ~/my-first-blog $ git pull |
'Python' 카테고리의 다른 글
9, 장고 뷰 만들기 (0) | 2019.01.25 |
---|---|
8. 장고 urls (0) | 2019.01.25 |
6. 장고 관리자 (0) | 2019.01.24 |
5. Django 프로젝트 (2) (0) | 2019.01.24 |
5. Django 프로젝트 (1) (0) | 2019.01.24 |
Comments