📌Index
장고(Django)란 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션
프레임워크(web application framework)이다. 풀 스택 프레임워크이며, Python
을 통해 작성한다.
✔️ 환경 구성
tutorial에 따라 진행해보자
가상 환경 만들기
가상 환경을 사용하는 이유와 설명에 대해서는 여기에서 확인할 수 있다.
$ mkdir ~/python/hello-django
$ cd ~/python/hello-django
가상프로젝트/프로젝트를 생성
$ python3 -m venv venv
가상 환경 활성화
$ . venv/bin/activate
Django 설치
$ pip3 install Django
상태 보존해두기
freeze에 대한 설명은 여기에서 확인할 수 있다.
$ pip3 freeze > requirments.txt
✔️ Django Default Home Page 띄워보기
Django 프로젝트 만들기
여기서는 mysite
가 프로젝트 이름이다.
$ django-admin startproject mysite
tree
확인
$ tree mysite
mysite
├── manage.py
└── mysite
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
프로젝트 실행
python manage.py runserver 0.0.0.0:3000
- flask에서
flask run
과 동일한 것으로 보면됨
접속 확인
Django
는 default 포트가 8000번이고, 기본적으로 외부 접속은 허용하지 않는다 : curl
로는 확인 가능하다
$ curl localhost:8080
<!doctype html>
<html lang="en-us" dir="ltr">
<head>
<meta charset="utf-8">
<title>The install worked successfully! Congratulations!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/static/admin/css/fonts.css">
...
외부에서 접속하려하면 아래와 같이 차단되어 Invalid HTTP_HOST
화면이 나타나는 것을 확인할 수 있다.
그렇다면 외부에서 접속을 허용(외부에 노출)하도록 해보자!
mysite
장고 프로젝트 안에, 동일한 이름 mysite
디렉토리를 확인할 수 있는데, 이것은 Django App
이다.
기본적으로 프로젝트를 만들면, 프로젝트 이름과 동일한 App이 1개 생성되며 하나의 프로젝트 안에 여러개의 App을 만들 수 있다
mysite/settings.py
해당 파일에서 ALLOWD_HOSTS
를 모든 호스트(*)로 설정하자
...
ALLOWED_HOSTS = ['*']
...
$ python3 manage.py runserver 0.0.0.0:8000
접속 확인
다음과 같이 docker testing page를 확인할 수 있다
✔️ Polls app 배포하기
polls tutorial에 따라 진행해보자
polls app 생성하기
$ python manage.py startapp polls
$ tree polls
polls
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
여기를 참조하여 비어있는 polls/view.py
파일을 아래와 같이 작성한다.
polls/view.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
polls/urls.py
는 라우팅 파일로 여기를 참조하여 생성 및 작성하자.
polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
- path 경로(여기서는 root)로 들어오면
index
함수를 실행하라는 뜻
최상위 URLconf 에서 polls.urls
모듈을 바라보게 설정하자
mysite/urls.py
주의: mysite
프로젝트 안의 mysite
app 내부의 urls.py
이다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
$ python3 manage.py runserver 0.0.0.0:4000
접속 확인
“Hello, world. You’re at the polls index.” 문구가 잘 뜨는 것을 확인할 수 있다!
✔️ .dockerignore file이란?
.dockerignore file
COPY
및 ADD
를 할 때, 제외할 파일을 지정할 수 있으며,Dockerfile
과 동일한 위치에 생성한다.
파일명 .dockerignore
가 중요하고, 아래와 같이 제외할 목록을 나열한다.
# comment
*/temp*
*/*/temp*
temp?
.dockerfile
을 잘 사용하여, 들어가면 안되는 파일들이 제공되지 않도록 유의해야한다.
✔️ Django App으로 Docker 이미지 만들기
앞서 생성한 django app
을 이용하여 진행해보자
이미지를 빌드하기 위한 Dockerfile
을 다음과 같이 작성한다.
Dockerfile
FROM python:3.9-slim-buster
COPY . /app
WORKDIR /app
RUN python3 -m venv venv && . venv/bin/activate
RUN pip3 install -r requirements.txt
WORKDIR /app/mysite
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
EXPOSE 8000
.dockerignore
파일 에 복사되지 않을 항목들을 정의한다.
.dockerignore
venv/
Dockerfile
.dockerignore
mydjango
이미지를 빌드하자
$ docker build -t mydjango .
이미지 mydjango
로 docker run
해보자
$ docker run -d -p 80:8000 mydjango
접속 확인