انتشار وبسایت بر روی Heroku (همانند انتشار بر روی PythonAnywhere)
همیشه برای یک توسعه دهنده خوب است که گزینههای انتشار مختلفی در آستین داشته باشد. چرا انتشار وبسایت بر روی Heroku را امتحان نکنیم، همانطور که روی PythonAnywhere منتشر کردیم؟
هروکو هم برای اپلیکیشنهای کوچک که بازدیدکننده زیادی ندارند، رایگان است، اما انتشار وبسایت بر روی آن کمی ریزهکاری دارد.
ما از این آموزش استفاده خواهیم کرد: https://devcenter.heroku.com/articles/getting-started-with-django. اما آن را اینجا گذاشتهایم که استفاده از آن برای شما سادهتر باشد.
فایل requirements.txt
اگر قبلاً این فایل را نساختهاید الان باید یک فایل requirements.txt
بسازید تا به هروکو بگویید که کدام پکیجهای پایتون باید بر روی سرور نصب شود.
اما در ابتدا هروکو نیاز دارد که ما چند پکیج نصب کنیم. به کنسول خط فرمان بروید و درحالی virtualenv
فعال است خط زیر را تایپ کنید:
(myvenv) $ pip install dj-database-url gunicorn whitenoise
وقتی که پکیجها نصب شد به پوشه djangogirls
بروید و دستور زیر را اجرا کنید:
(myvenv) $ pip freeze > requirements.txt
این دستور فایلی به نام requirements.txt
میسازد که لیستی از پکیجهای نصب شده (کتابخانههای پایتونی که شما استفاده میکنید، مثلاً جنگو :)) در آن قرار دارد.
نکته: دستور
pip freeze
لیستی از تمام پکیجهای نصب شده در محیط مجازی شما را نشان میدهد و علامت>
، این خروجی را به یک فایل انتقال میدهد. سعی کنید از دستورpip freeze
بدون عبارت> requirements.txt
، استفاده کنید و ببینید چه اتفاقی میافتد!
این فایل را باز کنید و خط زیر را به انتهای آن اضافه کنید:
psycopg2==2.7.2
برای آنکه اپلیکیشن شما در هروکو کار کند، این خط مورد نیاز است.
Procfile
چیز دیگری که هروکو لازم دارد یک Procfile است. این فایل به هروکو میگوید که کدام دستورها به ترتیب اجرا شوند تا وبسایت ما شروع به کار کند. ویرایشگر کد خود را باز کنید و فایلی با نام Procfile
در پوشه djangogirls
بسازید و خط زیر را به آن اضافه کنید:
web: gunicorn mysite.wsgi --log-file -
این خط نشان میدهد که ما قصد داریم یک وب اپلیکیشن راهاندازی کنیم و این کار را با اجرای دستور gunicorn mysite.wsgi
(gunicorn
نرمافزاری است که شبیه به دستور runserver
در جنگو عمل می کند اما بسیار قویتر از آن است) انجام میدهیم.
حالا این فایل را ذخیره کنید، تمام!
فایل runtime.txt
ما نیاز داریم که به هروکو اعلام کنیم که از کدام نسخه پایتون میخواهیم استفاده کنیم. این کار به کمک فایلی به نام runtime.txt
در پوشه djangogirls
انجام میشود. به کمک ویرایشگر خود یک فایل جدید به این نام بسازید و فقط متن زیر (و نه چیز دیگری) را در آن وارد کنید:
python-3.6.4
mysite/local_settings.py
به خاطر اینکه هروکو محدودیتهای بیشتری نسبت به PythonAnywhere دارد، نیاز است که از تنظیماتی متفاوت از کامپیوتر شخصی خود برای راهاندازی آن استفاده کنیم. هروکو نیاز دارد تا از Postgres استفاده کند درحالی که ما از SQLite استفاده کرده بودیم. به خاطر همین نیاز است تا ما از فایل تنظیمات متفاوتی نسبت به فایل مورد استفاده در محیط لوکال خود، استفاده کنیم.
حالا یک فایل به نام 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
...
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'djangogirls',
'USER': 'name',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '',
}
}
...
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
این کار تنظیمات مورد نیاز برای هروکو را انجام میدهد!
حالا این فایل را ذخیره کنید.
mysite/wsgi.py
فایل mysite/wsgi.py
را باز کنید و این خطها را به آن اضافه کنید:
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
بسیار عالی!
اکانت هروکو
لازم است که جعبه ابزار هروکو را از آدرس https://toolbelt.heroku.com/ نصب کنید (اگر این کار را در مراحل راهاندازی انجام دادهاید میتوانید از این بخش رد شوید):
وقتی جعبه ابزار هروکو را بر روی ویندوز نصب میکنید مطمئن شوید که هنگامی که سؤال میکند چه کامپوننتهایی نصب شود، گزینه "Custom Installation" را انتخاب کنید. در لیست کامپوننتهایی که بعد از این نمایش داده میشود، گزینه "Git and SSH"را هم انتخاب کنید.
در ویندوز، شما باید دستور
setx PATH "%PATH%;C:\Program Files\Git\bin"
را نیز اجرا کنید تا Git و SSH بهPATH
خط فرمان شما اضافه شود. خط فرمان را ببندید و دوباره باز کنید تا تغییرات ایجاد شده، فعال شود.بعد از باز کردن خط فرمان فراموش نکنید که دوباره به پوشه
djangogirls
بروید و محیط مجازی پروژه را فعال کنید! (راهنمایی: بخش نصب و راه اندازی جنگو را دوباره مرور کنید)
در ضمن یک اکانت رایگان هروکو نیز در آدرس https://id.heroku.com/signup/www-home-top بسازید.
حالا با اجرای این دستور بر روی کامپیوتر خود، وارد اکانت هروکو شوید:
$ heroku login
اگر کلید SSH نداشته باشید، این دستور به صورت اتوماتیک یکی خواهد ساخت. کلید SSH برای ارسال کدها به هروکو مورد نیاز است.
Git commit
هروکو از گیت برای انتشار استفاده میکند. بر خلاف PythonAnywhere، شما میتوانید به صورت مستقیم و بدون استفاده از گیتهاب، کدها را به هروکو بفرستید. اما لازم است چند کار دیگر انجام دهیم.
فایل .gitignore
که در پوشه djangogirls
قرار دارد را باز کنید و عبارت local_settings.py
را به آن اضافه کنید. نیاز داریم که گیت، فایل local_settings
را در نظر نگیرد و آن را به هروکو ارسال نکند.
*.pyc
db.sqlite3
myvenv
__pycache__
local_settings.py
حالا تغییرات در گیت را کامیت میکنیم.
$ git status
$ git add -A .
$ git commit -m "additional files and changes for Heroku"
یک نام برای اپلیکیشن انتخاب کنید
ما وبلاگ شما را در آدرس [نام منتخب شما].herokuapp.com
منتشر خواهیم کرد، بنابراین لازم است که نامی را انتخاب کنیم که فرد دیگری آن را انتخاب نکرده باشد. این نام، لازم نیست که به نام اپ blog
در پروژه جنگو، یا نام mysite
که از آن برای پروژه استفاده کردهایم ربطی داشته باشد. این نام میتواند هرچیزی که شما دوست دارید باشد، اما هروکو نسبت به آنکه از چه کاراکترهایی استفاده کنید سختگیر است: شما اجازه دارید که فقط از حروف کوچک انگلیسی (حروف بزرگ و کاراکترهای خاص مانند حروف فارسی پذیرفته نیست)، اعداد و خط فاصله(-
) استفاده کنید.
وقتی یک اسم پیدا کردید، این دستور را اجرا کنید و djangogirlsblog
را با نام منتخب خودتان عوض کنید:
$ heroku create djangogirlsblog
نکته: به یاد داشته باشید که
djangogirlsblog
را با نام منتخب خود در هروکو جابجا کنید.
اگر نتوانستید اسمی انتخاب کنید، میتوانید فقط دستور زیر را اجرا کنید:
$ heroku create
هروکو یک اسم استفاده نشده را برای اپلیکیشن شما انتخاب خواهد کرد (چیزی شبیه به enigmatic-cove-2527
).
اگر هر زمان لازم داشتید که نام اپلیکیشن هروکو را تغییر دهید به کمک دستور زیر میتوانید این کار را انجام دهید (عبارت the-new-name
را با نام جدید جابجا کنید):
$ heroku apps:rename the-new-name
نکته: به یاد داشته باشید که بعد از تغییر نام اپلیکیشن، لازم است که برای دسترسی به وبسایت خود از آدرس
[the-new-name].herokuapp.com
استفاده کنید.
انتشار بر روی هروکو!
تنظیمات زیادی را تا الان انجام دادهایم، درست است؟ اما همه این کارها را فقط لازم است یک بار انجام دهیم. حالا میتوانیم اپلیکیشن را منتشر کنیم!
وقتی شما دستور heroku create
را اجرا میکنید، این دستور به صورت اتوماتیک، هروکو ریموت را برای اپ ما در مخزن گیت ما ایجاد میکند. حالا به سادگی با دستور گیت پوش، میتوانیم اپلیکیشن خود را منتشر کنیم:
$ git push heroku master
نکته: این دستور احتمالاً چیزهای زیادی را در هنگام اولین اجرا نشان میدهد، چرا که هروکو در حال کامپایل و نصب psycopg است. اگر پس از پایان کار و در انتهای خطوط نوشتهشده عبارتی شبیه به
https://yourapplicationname.herokuapp.com/ deployed to Heroku
ببینید یعنی کل عملیات موفقیتآمیز بوده است.
اپلیکیشن خود را بازدید کنید
شما کدهای خود را بر روی هروکو منتشر کردید و نوع فرآیند را در فایل Procfile
معرفی کردهاید (فرآیند ساخت web
را کمی قبلتر انتخاب کرده بودیم). حالا میتوانیم به هروکو بگوییم که این web process
را آغاز کند:
برای این کار دستور زیر را اجرا کنید:
$ heroku ps:scale web=1
این دستور به هروکو میگوید که فقط یک نسخه از فرآیند web
ما را اجرا کند. از آنجاکه اپلیکیشن بلاگ ما بسیار ساده است، ما نیاز به منابع بیشتری نداریم پس همین یک نسخه از فرآیند کافی است. میتوانید از هروکو بخواهید که نسخههای بیشتری از اپلیکیشن شما را اجرا کند (هروکو این نوع از فرآیندها را "Dynos" مینامد پس تعجب نکنید اگر این عبارت را دیدید) اما این بخش از خدمات هروکو رایگان نیست.
حالا میتوانیم این اپ را در مرورگر خود با دستور heroku open
باز کنیم.
$ heroku open
نکته: شما خطایی خواهید دید! تا دقایقی دیگر به آن خواهیم پرداخت.
این کار یک url شبیه به https://djangogirlsblog.herokuapp.com/ در مرورگر شما باز میکند. در اینجا ممکن است صفحه خطایی را ببینید.
خطایی که شما میبینید به خاطر آن است که وقتی ما کدها را بر روی هروکو منتشر کردیم یک دیتابیس جدید اما خالی ساختهایم. لازم است که دستورهای migrate
و createsuperuser
را همانند کاری که در PythonAnywhere انجام دادیم، اجرا کنیم. اما این بار این دستورات را به روش متفاوتی در خط فرمان کامپیوتر خودمان و به کمک heroku run
اجرا میکنیم:
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser
خط فرمان از شما خواهد خواست که یک نام کاربری و گذرواژه انتخاب کنید. این اطلاعات برای ورود شما به صفحه ادمین وبسایت منتشر شده استفاده خواهد شد.
مرورگر خود را دوباره بارگذاری کنید، نتیجه را خواهید دید! حالا شما دو روش مختلف برای میزبانی وبسایت خود بلد هستید. روش مورد علاقه خود را انتخاب کنید :)