Ngrok을 사용하여 Django 데모 앱을 인터넷에 노출하는 방법은 무엇입니까?
게시 됨: 2021-05-02Django 데모 앱을 인터넷에 노출하는 방법을 알아보겠습니다. 즉, 호스팅 서비스에 배포하지 않습니다.
Django 앱의 데모를 보여주기 위해 스테이징 배포 환경을 구성하는 것은 끔찍합니다. 더군다나 URL이 몇 분 동안만 필요하다면 클라이언트나 팀원에게 보여줄 수 있습니다.
가장 좋은 방법은 도구를 사용하여 현재 로컬 서버를 노출하는 것입니다. 정확히! 전 세계의 사람들이 로컬 호스트에서 무슨 일이 일어나고 있는지 볼 수 있습니다.
이를 위해 우리는 Ngrok을 사용할 것입니다. 이 도구를 사용하면 컴퓨터의 로컬 포트를 기반으로 공용 URL을 만들 수 있습니다. 이 모든 것이 터널의 마법 덕분입니다.
이 튜토리얼에서 작업한 모든 코드를 시작하기 전에 이 Github 저장소에서 사용할 수 있습니다.
사전 요구 사항
- 시스템에 설치된 Python 3.6+
- 명령줄 인터페이스에 대한 약간의 경험
- Django에 대한 기본 지식
- Django-admin 및 manage.py 스크립트 이해
이 모든 기본 사항을 아는 것이 좋습니다. 이 튜토리얼을 따라 할 수 있지만 더 이상의 문제는 없습니다.
Django 앱 만들기
단계별 튜토리얼을 만들기 위해 Django 프로젝트를 만드는 과정을 설명하겠습니다. 이미 있는 경우 이 섹션을 건너뛸 수 있습니다.
가상 환경
먼저 Python 가상 환경을 만들어 보겠습니다.
- 따라서 시스템 터미널(또는 셸)을 엽니다.
- 시스템 터미널을 여는 것이 너무 복잡하다고 생각되면 코드 편집기의 내장 터미널을 사용해 보십시오.

- 터미널>새 터미널 을 클릭하면 화면 하단에 셸이 나타납니다.
- 내장된 Python 도구를 사용하여 가상 환경을 생성하려면 다음 명령을 입력하십시오.
python -m venv .venv기본적으로 다음을 의미합니다.
Hey Python, .venv 라는 이름으로 가상 환경(-m venv) 명령을 만듭니다.
- 이제 현재 디렉토리의 파일을 나열하면 .venv 폴더가 표시되어야 합니다.
$ ls -l drwxr-xr-x - daniel 30 abr 23:12 .venv # Other files ...- 가상 환경을 활성화하기 위해 소스 명령을 호출합니다.
source .venv/bin/activate- 문제가 발견되면 공식 파이썬 문서에서 추출한 다음 표를 참조하십시오.
| 플랫폼 | 껍데기 | 가상 환경 활성화 명령 |
|---|---|---|
| 포식스 | 배쉬/zsh | $ 소스 <venv>/bin/activate |
| 물고기 | $ 소스 <venv>/bin/activate.fish | |
| csh/tcsh | $ 소스 <venv>/bin/activate.csh | |
| 파워쉘 코어 | $ <venv>/bin/Activate.ps1 | |
| 창 | cmd.exe | C:\> <venv>\Scripts\activate.bat |
| 파워쉘 | PS C:\> <venv>\Scripts\Activate.ps1 |
이제 올바른 명령을 실행했다면 셸에 가상 환경의 이름이 있어야 합니다.
$ source .venv/bin/activate.fish (.venv) $장고 설치
가상 환경을 활성화한 후 이제 원하는 Django 버전을 설치할 수 있습니다. 이 경우 최신 버전을 설치하는 것이 좋습니다.
$ pip install django Collecting django Using cached Django-3.2-py3-none-any.whl (7.9 MB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting asgiref<4,>=3.3.2 Using cached asgiref-3.3.4-py3-none-any.whl (22 kB) Collecting sqlparse>=0.2.2 Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB) Installing collected packages: pytz, asgiref, sqlparse, django Successfully installed asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1이제 노출하려는 Django 앱의 기본 프로젝트 구조를 만들 차례입니다.
$ django-admin startproject mytestingproject그러면 mytestingproject 라는 이름의 Django 프로젝트가 생성됩니다. 그것을 만든 후에는 프로젝트 구조가 있는 디렉토리를 입력하기를 원할 것입니다. 이제 CD를 넣고 Django 서버를 실행해 보겠습니다.
# Enter to the project directory (.venv)$ cd mytestingproject/ # Listing the files inside the project (.venv) $ ls mytestingproject manage.py이제 Django 서버를 실행하여 어떻게 보이는지 살펴보겠습니다.
(.venv) $python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. May 01, 2021 - 04:34:25 Django version 3.2, using settings 'mytestingproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.기본적으로 Django는 로컬 서버가 기본 포트인 8000에서 로컬 서버(127.0.0.1은 항상 이를 가리킴)에서 실행 중이라고 알려줍니다.

오류 메시지에 대해 걱정하지 마십시오. 먼저 로컬 서버에서 모든 것이 제대로 작동하는지 확인하겠습니다. 그렇게 하려면 웹 브라우저로 이동하여 다음 방향을 붙여넣습니다.
http://localhost:8000/ # Do you note that localhost and 127.0.0.1 are the same?모든 것이 잘 작동한다면 Django의 아름다운 템플릿이 보일 것입니다.

이것이 Django 설치에 관한 모든 것입니다.
이제 이 Django 프로젝트를 노출해 보겠습니다. 더 복잡한 프로젝트에서 작업하는 경우 Django 앱을 노출하는 다음 방법도 작동합니다.
Ngrok으로 Django 앱 노출
앞서 말했듯이 Ngrok은 로컬 서버를 인터넷에 연결할 수 있는 도구 중 하나입니다. 따라서 먼저 공식 웹 사이트에서 Ngrok을 다운로드하십시오.
설치가 완료되면 필요한 명령을 진행해 보겠습니다.
Django 서버가 현재 실행 중인 터미널을 유지하면서 다른 셸을 열고 입력합니다.
$ ngrok help NAME: ngrok - tunnel local ports to public URLs and inspect traffic More commands ....이렇게 하면 Ngrok에서 제공하는 사용 가능한 명령을 빠르게 살펴보고 설치 프로세스가 올바르게 진행되었는지도 확인할 수 있습니다.
사람들이 우리 서버에 접근할 수 있는 URL을 만들기 위해 실행해보자.
$ ngrok http 8000 # secure public URL for port 8000 web serverhttp 인수를 실행하여 localhost의 포트 8000 에 연결할 URL을 만듭니다.
다음은 아마도 얻을 수 있는 결과입니다.
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 1 hour, 59 minutes Update update available (version 2.3.39, Ctrl-U to update) Version 2.3.35 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cac2165aa7f8.ngrok.io -> http://localhost:8000 Forwarding https://cac2165aa7f8.ngrok.io -> http://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00 그것이 말했듯이 Ngrok은 그 이상하고 못생긴 URL을 우리의 localhost 전달하고 있습니다. 그러나 Ngrok이 제공한 URL로 브라우저에 도달하면 마법이 일어납니다.

settings.py 변경
와우, 방금 무슨 일이?
DisallowedHost 설정으로 인해 Django에서 오류가 발생하는 것 같습니다. Django 서버를 실행 중인 셸과 Ngrok 세션이 있는 셸을 확인하면 디버그 메시지가 표시됩니다.
# Django messages Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. Bad Request: / [01/May/2021 05:07:46] "GET / HTTP/1.1" 400 65196 Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. # Ngrok messages HTTP Requests ------------- GET /favicon.ico 400 Bad Request GET / 400 Bad RequestDjango가 말하듯이 연결하려는 도메인을 ALLOWED_HOSTS 구성 변수에 추가해야 합니다. 하지만 문제는 도메인 이름이 너무 크고 혼란스럽다는 것입니다.
이 오류를 해결하기 위해 Django 설정을 약간 변경해 보겠습니다. 프로젝트 폴더에 있는 settings.py 파일을 엽니다.
# mytestingproject/settings.py # Line 28 # Change from ALLOWED_HOSTS = [] # To ALLOWED_HOSTS = ["*"]일부 정규식을 알고 있다면 모든 호스트가 허용되는 와일드카드를 설정하고 있음을 알 수 있습니다.
이제 사이트를 다시 로드하고 결과를 확인하십시오.

이제 모든 것이 완벽하게 작동합니다! 그리고 프로젝트에 대한 응용 프로그램을 만들고 URL과 보기를 설정하기 시작하면 모두 해당 공개 URL에 반영됩니다.
참고: 프로덕션에서 ALLOWED_HOSTS 를 변경하는 것을 잊지 마십시오. 큰 보안 허점이 생길 수 있기 때문입니다.
결론
이 튜토리얼에서는 Django 프로젝트를 배포할 필요 없이 데모 URL을 생성하는 방법을 배웠습니다.
Django 프로젝트를 시작하고 Django에서 settings.py 파일로 작업하는 방법을 연습했습니다.
마지막으로 Ngrok을 사용하는 방법과 Ngrok을 사용하여 로컬 서버를 노출하는 방법을 배웠습니다.
다음으로 인기 있는 Python 프레임워크 중 일부를 탐색하여 API를 빌드합니다.
