Розгортання!
Зауваження Даний розділ інколи може даватись трохи складно для освоєння. Наполегливо продовжуйте і дійдіть до кінця; розгортання -- важлива частина процесу розробки веб-сайту. Цей розділ розміщено всередині даного практичного посібника, отже ваш наставник зможе допомогти із цим дещо хитрим процесом випуску вашого веб-сайту в Інтернет. Це означає, що ви все ще можете завершити цей курс самостійно, якщо раптом не встигаєте.
До цього часу ваш веб-сайт був доступний лише локально на вашому комп'ютері, тепер ви дізнаєте як його розгорнути! Розгортання -- це процес публікації вашого додатку в Інтернеті таким чином, що люди можуть зрештою зайти і побачити його :).
Як ви вже знаєте, веб-сайт має бути розміщений на сервері. Існує багато провайдерів, однак ми будемо користуватися таким, що має найпростіший процес розгортання: Heroku. Heroku є безкоштовним для невеликих додатків, які не мають дуже багато відвідувачів, однозначно наразі цього буде достатньо для вас.
Ми будемо слідувати згідно цього посібника: https://devcenter.heroku.com/articles/getting-started-with-django, але ми розмістили його тут, отже вам буде простіше.
Файл requirements.txt
Нам потрібно створити файл requirements.txt
щоб повідомити Heroku які пакети Python повинні бути встановлені на нашому сервері.
Але спочатку, Heroku потребує встановлення декількох пакетів. Перейдіть до вашої консолі із активованою virtualenv
та наберіть наступне:
(myvenv) $ pip install dj-database-url gunicorn whitenoise
По завершенню інсталяції перейдіть до папки djangogirls
та запустіть цю команду:
(myvenv) $ pip freeze > requirements.txt
Створиться файл із назвою requirements.txt
, який міститиме список встановлених пакетів (тобто бібліотек Python, якими ви користуєтесь, наприклад Django :)).
Зауваження:
pip freeze
виводить список усіх Python бібліотек встановлених у вашому virtualenv, а>
перенаправляє вихідpip freeze
до файлу. Спробуйте запуститиpip freeze
без> requirements.txt
щоб побачити що трапиться!
Відкрийте цей файл і додайте наступний рядок в самий кінець:
psycopg2==2.5.4
Цей рядок потрібен для того, щоб ваш додаток працював на Heroku.
Procfile
Інша річ, яку ми повинні створити -- Procfile. Це дозволить Heroku знати які команди виконувати для того, щоб запустити наш веб-сайт. Відкрийте кодовий редактор, створіть файл із назвою Procfile
у папці djangogirls
і додайте цей рядок:
web: gunicorn mysite.wsgi
Цей рядок означає що ми збираємось розгорнути web
додаток, і ми зробимо це шляхом запуску команди gunicorn mysite.wsgi
(gunicorn
-- програма на зразок більш потужної версії Django команди runserver
).
Далі збережіть файл. Є!
Файл runtime.txt
Нам треба повідомити Heroku яку версію Python ми бажаємо використовувати. Це можна зробити створивши файл runtime.txt
в папці djangogirls
скориставшись командою редактора "new file", і помістивши в нього наступний текст (і нічого більше!):
python-3.4.2
mysite/local_settings.py
Є різниця між локальними налаштуваннями (на вашому комп'ютері) і налаштуваннями для нашого серверу. Heroku використовує одну базу даних, а ваш комп'ютер використовує різні бази даних. Саме тому потрібно створювати окремі файли для налаштувань, котрі будуть доступними лише для нашого локального середовища.
Створіть файл mysite/local_settings.py
. Він має містити налаштування для бази даних DATABASE
з файлу mysite/settings.py
. Так як тут:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DEBUG = True
Далі просто збережіть файл! :)
mysite/settings.py
Інша річ, яку нам потрібно зробити це модифікувати файл налаштувань settings.py
для нашого веб-сайту. Відкрийте mysite/settings.py
у вашому редакторі і додайте наступні рядки вкінці файлу:
import dj_database_url
DATABASES['default'] = dj_database_url.config()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
ALLOWED_HOSTS = ['*']
STATIC_ROOT = 'staticfiles'
DEBUG = False
Вкінці mysite/settings.py
, скопіюйте та вставте це:
try:
from .local_settings import *
except ImportError:
pass
Таким чином, усі ваші локальні налаштування буде імпортовано, якщо такий файл існує.
Далі збережіть файл.
mysite/wsgi.py
Відкрийте файл mysite/wsgi.py
та додайте ці рядки вкінці:
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
Порядок!
Heroku акаунт
Вам треба встановити Heroku toolbelt, який ви можете знайти тут (можете пропустити цей крок, якщо ви вже виконали встановлення під час налаштування): https://toolbelt.heroku.com/
При запуску інсталяційної програми Heroku toolbelt на Windows оберіть пункт "Custom Installation" коли буде запит на те, які компоненти інсталювати. У списку компонентів, що має з'явитися після цього, перевірте, будь ласка, додатково чи є галочка в пункті "Git and SSH".
На Windows ви також повинні запустити наступну команду щоб додати Git і SSH до змінної
PATH
вашого командного рядку:setx PATH "%PATH%;C:\Program Files\Git\bin"
. Перезапустіть після цього командний рядок щоб активувати зміни.
Створіть, будь ласка, також Heroku акаунт на цьому сайті: https://id.heroku.com/signup/www-home-top
Далі активуйте ваш Heroku акаунт на вашому комп'ютері запустивши цю команду:
$ heroku login
У випадку якщо у вас немає SSH ключа ця команда автоматично його створить. SSH ключі необхідні для того, щоб експортувати код на Heroku.
Git
Git -- це система контролю версій, що використовується багатьма програмістами - програмне забезпечення, котре відслідковує зміни у файлах що відбуваються з часом, таким чином ви можете пізніше відкликати специфічні версії. Heroku використовує git репозиторій щоб керувати файлами вашого проекту, отже ми також ним скористаємось.
Створіть файл із назвою .gitignore
в папці djangogirls
і наступним змістом:
myvenv
__pycache__
staticfiles
local_settings.py
db.sqlite3
*.py[co]
та збережіть його. Крапка на початку імені файлу є важливою! Як можна побачити, ми повідомляємо Heroku про те що треба ігнорувати local_settings.py
і не завантажувати цей файл, отже він є доступним лише на вашому комп'ютері (локально).
Наступним кроком створимо новий git репозиторій і збережемо наші зміни. Перейдіть до консолі і запустіть ці команди:
$ git init
Initialized empty Git repository in ~/djangogirls/.git/
$ git add .
$ git commit -m "My Django Girls app"
[master (root-commit) 2943412] My Django Girls
7 files changed, 230 insertions(+)
create mode 100644 .gitignore
create mode 100644 Procfile
create mode 100644 mysite/__init__.py
create mode 100644 mysite/settings.py
create mode 100644 mysite/urls.py
create mode 100644 mysite/wsgi.py
create mode 100644 manage.py
create mode 100644 requirements.txt
create mode 100644 runtime.txt
Підберіть ім'я для додатку
Зробимо ваш блог доступним в Інтернеті за адресою [назва блогу].herokuapp.com
, отже потрібно підібрати ім'я, яке ще ніхто не взяв. Це ім'я не повинно бути пов'язаним із Django додатком blog
, або з mysite
або з чимось, що ми до цього часу встигли створити. Ім'я може будь-яким на ваш вибір, але Herokuє досить вимогливим щодо допустимих символів: дозволяється використовувати лише прості маленькі літери (жодних прописних літер чи акцентів), чисел, а також дефісів (-
).
По тому як ви придумали ім'я (можливо щось щось пов'язане із вашим ім'ям або нікнеймом), запустіть наступну команду, замінивши djangogirlsblog
на ім'я свого додатку:
$ heroku create djangogirlsblog
Зауваження: Не забудьте замінити
djangogirlsblog
на ім'я вашого додатку на Heroku.
Якщо ж не можете придумати ім'я, просто можна запустити
$ heroku create
і Heroku підбере для вас невикористовуване ім'я (можливо щось на зразок enigmatic-cove-2527
).
Якщо раптом захочете змінити ім'я вашого Heroku додатку, то це можна зробити у будь-який час за допомогою команди (замінює на бажане нове ім'я the-new-name
):
$ heroku apps:rename the-new-name
Зауваження: Пам'ятайте, що після того як ви змінили ім'я додатку, треба відвідати
[the new name].herokuapp.com
щоб побачити ваш сайт.
Розгортання на Heroku!
Було багато налаштувань і встановлень, правда ж? Але це треба зробити лише один раз! Тепер можна починати процес розгортання!
Коли ви запускаєте heroku create
, Heroku об'єкт для нашого додатку автоматично додається до нашого репозиторію. Тепер ми можемо за допомогою простою операції git push розгорнути (опублікувати) наш додаток:
$ git push heroku master
Зауваження: Можливо під час найпершого запуску в результаті буде багато інформації на виході, оскільки Heroku компілює та встановлює psycopg. Ви дізнаєтеся про успішне завершення команди якщо по завершенню побачите щось на зразок
https://yourapplicationname.herokuapp.com/ deployed to Heroku
в останніх рядках вихідної інформації на консолі.
Відвідайте ваш сайт
Ви щойно опублікували ваш код на Heroku, і визначили типи процесів у файлі Procfile
(раніше ми обрали процес типу web
). А зараз можемо повідомити Heroku, що хочемо розпочати цей процес web process
.
Щоб це зробити запустіть наступну команду:
$ heroku ps:scale web=1
Heroku повідомляється про те, що треба запустити лише одну копію нашого web
процесу. Оскільки додаток для нашого блогу цілком простий, не треба дуже багато потужностей, а отже буде добре якщо запустимо лише один процес. Цілком можливо попросити Heroku запустити більше процесів (доречі, Heroku називає ці процеси "Dynos"отже не дивуйтесь якщо зустрінете даний термін) але надалі це не буде безкоштовно.
А зараз можемо відвідати сайт у нашому браузері за допомогою команди heroku open
.
$ heroku open
Зауваження: ви побачите сторінку із помилкою! Поговоримо про це через хвилину
Відкриється сторінка із адресою https://djangogirlsblog.herokuapp.com/, і через мить ви мабуть побачите сторінку з помилкою. Оскільки ми створили лише вид для адмінки (admin view), додайте admin/
до адресного рядку (наприклад, https://djangogirlsblog.herokuapp.com/admin/) щоб побачити робочу сторінку нашого веб додатку.
Помилку, яку ви побачили, викликана тим, що коли ми здійснювали публікацію на Heroku, то створили нову базу даних і вона є наразі пустою. Треба запустити команду ~ migrate~ як ми вже робили на самому початку коли починали відповідно налаштовувати базу даних для нашого проекту:
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser
Тепер ви маєте змогу побачити ваш веб-сайт у браузері! Вітаємо :)!