TechTogetWorld


 daviduino.co.kr

techtogetworld.com

 david201207.blog.me

cafe.naver.com/3dpservicedavid


[web sever 구축_파이선_DJANGO #3 ]Django WEB 배포하기


글의 순서는 아래와 같습니다.


===========================================================================


[ 장고 설치하기] ==> 기존글과 동일

[ 설정변경하기]

[ 데이터베이스 설정하기]

[ 어플리케이션 만들기]

[ 블로그글 모델 만들기]

[ 장고 관리자 등록]

[ 배포하기]

 -PythonAnywhere

[참고자료 ]  

https://tutorial.djangogirls.org/ko/deploy/

https://tutorial.djangogirls.org/ko/installation/

============================================================================


[ 장고 설치하기] ==> 기존글과 동일


아나콘다 콘솔화면에서 ==> pip install django

=> 장고설치는 비주얼한 화면등은 없음, 장고설치후 아래 명령어 실행시 프로젝트 틀을 만들어 주는 역할을 함

django-admin startproject <프로젝트이름> => mysite

=> "<c:\anaconda36>c:\>django-admin startproject mysite " 로 입력하면, c 드라이브에 mysite 폴더가 생성되면서, 

관련 파일들이 같이 생성이되어 디렉토리에 저장이 된다.

이 화일을들을 아래와 같이 수정해 나가면 됨

python manage.py runserver

웹브로우저 실행: http://127.0.0.1:8000/


[ 설정변경하기]

mysite/settings.py

    TIME_ZONE = 'Asia/Seoul'

mysite/settings.py

STATIC_URL = '/static/'

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

mysite/settings.py

ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com'] 


[ 데이터베이스 설정하기]

mysite/settings.py

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.sqlite3',

        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

    }

}


데이터베이스 생성 => 프롬프트에서 python manage.py migrate 실행


[ 어플리케이션 만들기]

python manage.py startapp blog =>blog라는 이름의 어플리케이션 만들기

mysite/settings.py 화일 수정

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'blog',


[ 블로그글 모델 만들기]

blog/models.py

from django.db import models

from django.utils import timezone

class Post(models.Model):

    author = models.ForeignKey('auth.User')

    title = models.CharField(max_length=200)

    text = models.TextField()

    created_date = models.DateTimeField(

            default=timezone.now)

    published_date = models.DateTimeField(

            blank=True, null=True)


    def publish(self):

        self.published_date = timezone.now()

        self.save()


    def __str__(self):

        return self.title

python manage.py makemigrations blog ==> 데이터베이스 반영전 마이그레이션 화일 준비함

python manage.py migrate blog ==> 글 모델이 데이터베이스에 저장됨


[ 장고 관리자 등록]

'settings.py'중 LANGUAGE_CODE = 'en-us'를 LANGUAGE_CODE = 'ko' ==> 관리자 화면 한국어로 변경

blog/admin.py ==> 화일수정

from django.contrib import admin

from .models import Post

admin.site.register(Post)==> 모델 등록하기

python manage.py createsuperuser : 아래는 예시임
command-line
(myvenv) ~/djangogirls$ python manage.py createsuperuser
Username: admin
Email address: admin@admin.com
Password:
Password (again):
Superuser created successfully.


사이트 접속하기
    - http://127.0.0.1:8000/admin/  으로 접속하고
    - 아이디로 로그인 하면 아래 위에서 만들었던 블로그 어플리케이션이 실행이 된다.


   상기내용들은 복습성격이 강함

[ 배포하기]==> PythonAnywhere

1. GIT, GITHUB를 설치하고, 저장소를 만들어서 저장한다

  - GIT 을 설치한다

  - 소스코드를 COMMIT하여, GIT에 버전관리 등록한다

  - GITHUB 설치한다

  - GITHUB에 저장소를 만들어, GIT의 화일을 싱크해 온다 ( GIT에서 PUSH 하기) 

  - 세부방법은 이전글 http://daviduino.co.kr/85 을 참고한다


2. PythonAnywhere에 블로그 설정하기

  - 회원가입한다(무료)

3. GitHub에서 PythonAnywhere로 코드 가져오기

  - 배시(Bash)" 콘솔을 실행해서, 콘솔화면으로 들어간다

  - PythonAnywhere command-line

   . $ git clone https://github.com/<your-github-username/my-first-blog.git

   . $ tree my-first-blog 명령어를 입력  ==> 화일이 제대로 불러와졌는지 확인가능

PythonAnywhere command-line

$ 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


4. PythonAnywhere에서 가상환경(virtualenv) 생성하기

  - PythonAnywhere command-line

$ cd my-first-blog

$ virtualenv --python=python3.6 myvenv

Running virtualenv with interpreter /usr/bin/python3.6

[...]

Installing setuptools, pip...done.

$ source myvenv/bin/activate  ==> 위에서 설치한 가상환경을 활성화 함

(myvenv) $  pip install django~=1.11.0 => 가상환경 안에서 장고를 설치함

Collecting django

[...]

Successfully installed django-1.11.3

5분정도 시간이 소요될수 있음


5. PythonAnywhere에서 데이터베이스 생성하기

 - ythonAnywhere command-line

   . (mvenv) $ python manage.py migrate

Operations to perform:

[...]

     Applying sessions.0001_initial... OK

   . (mvenv) $ python manage.py createsuperuser


6. web app으로 블로그 배포하기

  - PythonAnywhere 대시보드 ==>Web==>Add a new web app

  - 도메인 이름을 확정한 후, 대화창에 수동설정(manual configuration)

  - Python 3.6을 선택하고 다음(Next)을 클릭하면 마법사가 종료됩니다.

    . Note "Django"가 아니라  "수동설정(Manual configuration)"을 선택해야함

    . 기본 PythonAnywhere Django 설정을 위해서 이방법이 유리함.



7. 가상환경(virtualenv) 설정하기

 - "가상환경(Virtualenv)" 섹션에서 가상환경 경로를 입력(Enter the path to a virtualenv) ==> /home/<your-username>/my-first-blog/myvenv/ 

    라고 입력

8. WSGI 파일 설정하기

 - "WSGI 설정 파일(WSGI configuration file)" ==> /var/www/<your-username>_pythonanywhere_com_wsgi.py부분) 클릭

 - 모든내용을 삭제==>아래 내용으로 기록

import os

import sys

path = '/home/david2012/my-first-blog/mysite2/'  # PythonAnywhere 계정으로 바꾸세요.(하기 청색부분 참고바람)

if path not in sys.path:

    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite2.settings'

from django.core.wsgi import get_wsgi_application

from django.contrib.staticfiles.handlers import StaticFilesHandler

application = StaticFilesHandler(get_wsgi_application())


** 특히 " path = '/home/david2012/my-first-blog/mysite2/'  # PythonAnywhere 계정으로 바꾸세요. " 요 부분을 설정할때 주의를 요한다

   본 글에서는 아래와 같이 설정했을때(/home/david20120720/mtsite, 정상작동을 했음 . 예전에 상기와 같이 했을때 정상작동을 했음

   즉 프로그램의 디렉토리 저장상태에 따라 결정하면 됨.

   아래 그림은

david20120720 계정의 mysite 프로젝트를 path 로 지정하고

path안의 폴더 mysite안의 setting (mysite.settings) 화일에 접근하는것을 나타내고 있음.




  - 저장=> WEB 클릭

  - 모두 끝았음. RELOAD 및 홈페이지 실행시 웹이 실행됨


9. 구현된 모습 : 정상작동중

http://david20120720.pythonanywhere.com/ 로 접속하면 아래 화면이 나오고


    david20120720.pythonanywhere.com/admin/으로 접속하고, 로긴 하면  아래와 같이 어플리케이션이 실행됨





    



[참고자료 ]


https://programmers.co.kr/learn/courses/6

http://daviduino.co.kr/85