Як виставити демонстраційну програму Django в Інтернет за допомогою Ngrok?

Як зробити ваш Django-застосунок доступним в Інтернеті без розгортання

Розглянемо, як надати доступ до демонстраційної версії вашого Django-застосунку через Інтернет, обійшовши складний процес розгортання на хостингових сервісах.

Налаштування проміжного середовища для демонстрації Django-проєкту може бути надто складним, особливо якщо вам потрібно надати URL-адресу лише на короткий час для клієнта чи колеги.

Оптимальним варіантом у такому випадку є використання спеціального інструменту, який зробить ваш локальний сервер видимим у мережі. Так, користувачі з будь-якої точки світу зможуть переглядати ваш локальний хост.

Для цієї мети ми скористаємося ngrok. Цей інструмент дозволяє створювати публічні URL-адреси, які перенаправляють на локальні порти вашого комп’ютера. Все це відбувається завдяки технології тунелювання.

Перед початком роботи весь код, використаний у цьому посібнику, доступний у репозиторії Github.

Необхідні знання

Базові знання з розробки веб-застосунків на Python та Django будуть корисними. Однак ви зможете слідувати цьому посібнику, навіть якщо не володієте всіма необхідними навичками.

Створення Django-застосунку

Щоб наочно продемонструвати процес, я розповім про створення нового Django-проєкту. Якщо у вас вже є готовий проєкт, ви можете пропустити цей розділ.

Створення віртуального середовища

Спершу створимо віртуальне середовище Python.

  • Відкрийте системний термінал (або командний рядок).
  • Якщо відкриття системного терміналу викликає складнощі, скористайтеся вбудованим терміналом редактора коду.
  • Перейдіть до меню “Термінал” > “Новий термінал”. Внизу екрана з’явиться оболонка.
  • Введіть наступну команду для створення віртуального середовища за допомогою вбудованого інструменту Python.
python -m venv .venv

Це означає: “Python, створи віртуальне середовище (-m venv) з назвою .venv”

  • Після цього в каталозі з’явиться папка .venv.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Інші файли ...
  • Для активації віртуального середовища введіть команду source.
source .venv/bin/activate

Платформа
Оболонка
Команда активації

POSIX
bash/zsh
$ source <venv>/bin/activate

fish
$ source <venv>/bin/activate.fish

csh/tcsh
$ source <venv>/bin/activate.csh

PowerShell Core
$ <venv>/bin/Activate.ps1

Windows
cmd.exe
C:> <venv>\Scripts\activate.bat

PowerShell
PS C:> <venv>\Scripts\Activate.ps1

Після виконання правильної команди, назва віртуального середовища повинна відображатися в оболонці.

$ source .venv/bin/activate.fish

(.venv) $ 

Інсталяція Django

Після активації віртуального середовища встановіть бажану версію 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-сервер.

# Перехід до каталогу проекту
(.venv)$ cd mytestingproject/

# Перелік файлів у каталозі
(.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 повідомляє, що локальний сервер працює на локальному хості (127.0.0.1), на стандартному порту 8000.

Не хвилюйтеся щодо повідомлення про помилку. Спершу перевірте, чи все працює локально. Відкрийте веб-переглядач та введіть адресу:

http://localhost:8000/
# Зауважте, що localhost та 127.0.0.1 – це одне і те ж.

Якщо все гаразд, ви побачите початковий шаблон 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 
# URL-адреса для веб-сервера на порту 8000

Аргумент “http” створює URL-адресу, яка перенаправляє на порт 8000 локального хосту.

Ось приклад результату:

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-адресу на локальний хост. Відкрийте цю URL-адресу в браузері.

Редагування settings.py

Схоже, Django видає помилку через налаштування DisallowedHost. Перевірте термінал з Django-сервером та Ngrok, там з’явиться повідомлення.

# Повідомлення Django
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
HTTP Requests                                                            
-------------                                                            
                                                                         
GET /favicon.ico               400 Bad Request                           
GET /                          400 Bad Request                           
                                              

Як повідомляє Django, потрібно додати доменне ім’я до змінної конфігурації ALLOWED_HOSTS. Однак, доменне ім’я є занадто довгим і складним.

Для виправлення помилки змінимо налаштування Django. Відкрийте файл settings.py у папці проєкту.

# mytestingproject/settings.py

# Рядок 28

# Замініть:
ALLOWED_HOSTS = []

# На:
ALLOWED_HOSTS = ["*"]

Ми встановили шаблон, який дозволяє будь-які хости.

Перезавантажте веб-сторінку і перевірте результат.

Тепер все працює ідеально! Якщо ви будете додавати нові функції, URL-адреси та представлення, вони відображатимуться за новою публічною URL-адресою.

Примітка: Не забудьте змінити ALLOWED_HOSTS у продакшні, оскільки це може стати причиною проблем з безпекою.

Висновок

У цьому посібнику ви дізналися, як створити демонстраційну URL-адресу для Django-проєкту без необхідності його повного розгортання.

Ви навчилися запускати Django-проєкт та працювати з файлом settings.py.

Також ви ознайомилися з Ngrok та його можливостями для надання доступу до локальних серверів.

Далі дослідіть популярні фреймворки Python для створення API.