مرحله منتشر کردن!
توجه داشته باشید که قسمتهای پیش رو ممکن است کمی سخت به نظر برسد. نا امید نشوید و این بخش را تا آخر ادامه دهید، یکی از مهمترین قسمتهای توسعه وب سایت منتشرکردن یا Deploy میباشد. این فصل در وسط آموزش قرار گرفته است، بنابراین مربی شما میتواندبه شما در راه اندازی آنلاین وبسایتتان کمک کند. این به این معنی است که شما میتوانید به تنهایی ادامهی تمرین خود را به اتمام برسانید حتی اگر زمان کارگاه به پایان برسد.
تا به اینجا وب سایت شما فقط در رایانه شما قابل مشاهده است. حالا شما یاد خواهید گرفت که چگونه آن را دیپلوی کنید! دیپلوی یعنی فرآیند انتشار پروژه شما در اینترنت، تا سایرین بتوانند در نهایت پروژه شما را ببینند. :)
همانطور که یاد گرفتید، وب سایت باید بر یک سرور جای بگیرد. سرورهای زیادی در اینترنت وجود دارد، ما قصد داریم از PythonAnywhere استفاده نماییم. PythonAnywhere برای پروژههای کوچک که بازدیدکنندگان خیلی زیادی ندارند رایگان است بنابراین در حال حاضر برای شما مناسب است.
سرویس خارجی دیگری که ما استفاده میکنیم گیت هاب است که سرویس میزبانی کد است. سرویسهای دیگری نیز وجود دارد، اما تقریباً این روزها همه برنامه نویسان اکانت گیت هاب دارند و الان شما هم خواهید داشت!
این سه مکان برای شما مهم خواهد بود. کامپیوتر محلی شما جایی است که شما در حال توسعه و تست هستید. هنگامی که شما تغییرات را اعمال کردید، یک نسخه از برنامه خود را در گیت هاب قرار میدهید. وب سایت شما در PythonAnywhere خواهد بود و شما آن را با یک کپی جدید از کدهای خود که از گیت هاب گرفتهاید، به روز رسانی خواهید کرد.
گیت
نکته اگر بخش نصب و راهاندازی را انجام دادهاید، نیازی نیست که دوباره این بخش را انجام دهید. میتوانید از این بخش رد شده و ساختن مخزن گیت را شروع کنید.
گیت یک "سیستم کنترل نسخه" است که توسط بسیاری از برنامهنویسان مورد استفاده قرار میگیرد. این نرمافزار میتواند تغییرات روی فایلها را در طول زمان دنبال کند بنابراین میتوانید نسخه خاصی را بعداً بازیابی کنید. این قابلیت تقریباً شبیه ابزار "track changes" در برنامههای ویرایش متن (مانند Microsoft Word و LibreOffice Writer) است اما به مراتب از آنها قویتر است.
نصب گیت
برای نصب گیت میتوانید آن را از git-scm.com دانلود کنید. همه جا میتوانید کلید next را بزنید به غیر از دو جا: جایی که در مورد ویرایشگر متن از شما میپرسد شما باید ویرایشگر Nano را انتخاب کنید و در مرحلهای که عنوان آن "Adjusting your PATH environment" است، گزینه "Use Git and optional Unix tools from the Windows Command Prompt" (گزینه آخر) را انتخاب کنید. در بقیه موارد، پیش فرضها مناسب هستند. گزینه "Checkout Windows-style, commit Unix-style line endings" را انتخاب کنید.
فراموش نکنید که بعد از اینکه نصب به پایان رسید command prompt یا PowerShell را از نو باز کنید.
گیت را از git-scm.com دانلود کنید و دستورالعملها را دنبال کنید.
نکته اگر شما از OS X نسخه 10.6، 10.7 یا 10.8 استفاده میکنید باید GIT را از اینجا نصب کنید: نصب Git برای OS X Snow Leopard
ایجاد مخزن گیت
نرم افزار گیت تغییرات یک مجموعه فایل که در جایی به نام مخزن (به طور مخفف repo) وجود دارند را ردگیری میکند. بیایید یکی برای پروژه خودمان بسازیم. کنسول خود را باز کنید و این دستورات را در پوشه djangogirls
اجرا کنید:
توجه قبل از شروع به کار موقعیت پوشهای را که در آن هستید با دستور
pwd
(در سیستم عامل macOS / Linux) یاcd
(در ویندوز) بفهمید. شما باید در پوشهdjangogirls
باشید.
خط فرمان
$ git init
Initialized empty Git repository in ~/djangogirls/.git/
$ git config --global user.name "Your Name"
$ git config --global user.email you@example.com
راه اندازی مخزن گیت کاری است که ما برای هر پرژه فقط یک بار انجام میدهیم (لازم نیست مجدداً نام کاربری و ایمیل را وارد کنید).
گیت هاب تغییرات روی تمام فایلها و پوشه های زیرمجموعه این پوشه را پیگیری میکند، اما برخی فایلهایی که میخواهیم آنها را نادیده بگیریم نیز وجود دارند. ما این کار را با ایجاد یک فایل به نام .gitignore
در پوشه پایه انجام میدهیم. ویرایشگر خود را باز کنید و یک فایل جدید با محتویات زیر ایجاد کنید:
.gitignore
# Python
*.pyc
*~
__pycache__
# Env
.env
myvenv/
venv/
# Database
db.sqlite3
# Static folder at project root
/static/
# macOS
._*
.DS_Store
.fseventsd
.Spotlight-V100
# Windows
Thumbs.db*
ehthumbs*.db
[Dd]esktop.ini
$RECYCLE.BIN/
# Visual Studio
.vscode/
.history/
*.code-workspace
و آن را در پوشه "djangogirls" با نام .gitignore
ذخیره کنید.
توجه نقطه در ابتدای نام فایل مهم است! اگر مشکلی در ایجاد آن دارید (به عنوان مثال Mac شما دوست ندارد فایل هایی را بسازید که با نقطه شروع میشود)، پس از ویژگی save as استفاده کنید که به کمک آن میتوانید این نوع فایلها را ذخیره کنید. و مطمئن باشید که هیچ پسوندی مانند
.txt
یا.py
در انتهای فایل نگذاشته باشید نام این فایل فقط باید.gitignore
باشد تا توسط Git شناسایی شود. لینوکس و MacOS با فایلهایی که با.
شروع شوند (مانند.gitignore
) مانند یک فایل مخفی شده برخورد میکند و دستورls
به طور معمول آنها را نشان نمیدهد. به جای آن از دستورls -a
برای دیدن فایل.gitignore
استفاده کنید.توجه یکی از فایلهایی که در فایل
.gitignore
مشخص شده است فایلdb.sqlite3
است. این فایل پایگاه داده محلی شماست جایی که تمام اطلاعات مربوط به کاربر و پستهای وبلاگ شما در آن ذخیره میشود. ما از روش استاندارد برنامه نویسی استفاده خواهیم کرد به این معنی که ما از پایگاه دادههای متفاوتی برای توسعه بر روی کامپیوتر محلی و سپس وبسایت اصلی که روی PythonAnywhere هست استفاده خواهیم کرد. پایگاه داده بر روی PythonAnywhere میتواند SQLite باشد همانند آنچه بر روی کامپیوتر خود از آن استفاده میکنید اما معمولاً از پایگاه داده MySQL برای وبسایت اصلی استفاده میکنیم که میتواند تعداد بسیار زیاد بازدیدکننده از سایت را مدیریت کند. علاوه بر این حذف کردن فایل SQLite در کپی مربوط به GitHub به این معنی است که تمام پستهای وبلاگی و superuser هایی که تا الان ساختهاید فقط روی کامپیوتر خودتان مورد استفاده خواهد بود و برای محیط اصلی وبسایت باید دوباره آنها را بسازید. شما باید از پایگاه داده محلی خود به عنوان یک زمین بازی خوب استفاده کنید که در آن میتوانید چیزهای مختلف را آزمایش کنید و نگرانی پاک کردن پستهای اصلی از وبلاگ را نداشته باشید.
ایده خوبی است که همیشه قبل از زدن دستور git add
یا هر وقت که مطمئن نیستید چه چیزی تغییر کرده، دستور git status
را بزنید. این کار کمک میکند که از هر نوع غافلگیری مانند اضافه کردن یا commit کردن فایل اشتباه، جلوگیری شود. دستور git status
اطلاعاتی در مورد فایلهای ردگیری نشده untracked، اصلاح شده modified، استیج شده staged و نیز درمورد وضعیت شاخه ای که در آن هستیم میدهد. خروجی باید شبیه به موارد زیر باشد:
خط فرمان
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
blog/
manage.py
mysite/
requirements.txt
nothing added to commit but untracked files present (use "git add" to track)
و در نهایت ما تغییرات را ذخیره میکنیم. به کنسول خود بروید و این دستورات را اجرا کنید:
خط فرمان
$ git add .
$ git commit -m "My Django Girls app, first commit"
[...]
13 files changed, 200 insertions(+)
create mode 100644 .gitignore
[...]
create mode 100644 mysite/wsgi.py
کدهای خود را به GitHub انتقال دهید
به GitHub.com بروید و یک حساب کاربری رایگان برای خود بسازید. اگر این کار را در کارگاه برای اولین بار انجام میدهید حواستان باشد که رمز عبور خود را حفظ کنید یا به نرمافزار مدیریت رمز عبور خود بسپرید.
حالا یک مخزن یا repository بسازید و نام آن را "my-first-blog" بگذارید. گزینه "initialize with a README" را علامت نخورده باقی بگذارید و هم چنین گزینه .gitignore را هم خالی بگذارید (ما بعداً آن را اضافه خواهیم کرد). هم چنین گزینه License را None بگذارید.
توجه نام
my-first-blog
مهم است. شما میتوانید اسم دیگری انتخاب کنید اما از این اسم زیاد استفاده خواهیم کرد و به یاد داشته باشید که اگر اسم دیگری گذاشتید هرجا لازم بود اسم انتخابی خود را استفاده کنید. احتمالاً راحتتر است که از همین اسمmy-first-blog
استفاده نمایید.
در صفحه بعد شما URL مخزن خود را خواهید دید که در برخی دستورات بعدی از آن استفاده خواهیم کرد:
حالا وقت آن است که مخزن Git روی کامپیوتر شما را به مخزن موجود در Github وصل کنیم.
خط زیر را در کنسول خود تایپ کنید (<your-github-username>
را با نام کاربری و گذر واژه خود که در GitHub تعریف کرده اید عوض کنید. علامتهای کوچکتر و بزرگتر را استفاده نکنید. URL باید دقیقاً همان آدرسی باشد که کمی قبلتر دیدهاید):
خط فرمان
$ git remote add origin https://github.com/<your-github-username>/my-first-blog.git
$ git push -u origin master
وقتی شما فایلی را به GitHub میفرستید یا push میکنید نام کاربری و گذرواژه از شما پرسیده میشود (ممکن است در همان کنسول خط فرمان یا در یک پنجره جدید از شما پرسیده شود) پس از وارد کردن اطلاعات ورود، چیزی شبیه به این خواهید دید:
خط فرمان
Counting objects: 6, done.
Writing objects: 100% (6/6), 200 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ola/my-first-blog.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
کد شما الان روی GitHub است. بروید و آن را کنترل کنید! خواهید دید که کدهای شما در جای خوبی است. پروژه Django، دوره آموزشی Django Girls و بسیاری نرمافزارهای متن باز فوق العاده دیگر هم، کدهایشان را در GitHub قرار دادهاند. :)
تنظیم کردن وبلاگ بر روی PythonAnywhere
یک حساب کاربری بر روی PythonAnywhere بسازید
توجه شما ممکن است کمی قبلتر و در مراحل نصب یک حساب کاربری در PythonAnywhere درست کرده باشید. اگر چنین است نیاز نیست که حساب کاربری دیگری بسازید.
PythonAnywhere سرویسی است که برای اجرای کدهای نوشته شده با پایتون در سرورهای ابری استفاده میشود. ما از آن برای میزبانی سایت خود و قرار دادن آن بر روی اینترنت استفاده خواهیم کرد.
بلاگی که در حال ساختن آن هستیم را بر روی PythonAnywhere قرار خواهیم داد. برای استفاده از سرویس PythonAnywhere میتوانید به صورت رایگان به عنوان تازه کار در آن ثبت نام کنید (ثبت نام به صورت تازه کار برای کار ما کفایت می کند. نیازی به ورود کارت اعتباری نیست).
نکته: هنگام انتخاب نام کاربری خود به این نکته توجه داشته باشید که آدرس بلاگ شما با نام کاربری شما به صورت
yourusername.pythonanywhere.com
مشخص خواهد شد. بنابراین علاوه بر استفاده از نام خود به عنوان نام کاربری، میتوانید از یک اسم دلخواه برای بلاگ خود استفاده کنید. هچینین رمز عبور خود را به خاطر داشته باشید.
ایجاد API توکن PythonAnywhere
این کار را فقط یکبار هنگام شروع انجام خواهید داد. پس از اینکه در PythonAnywhere ثبت نام کردید به داشبورد خود هدایت خواهید شد. در سمت راست بالای صفحه بر روی Account خود کلیک کنید:
سپس به تب "API token" رفته و "Create new API token" را بزنید.
وبسایتمان را بر روی PythonAnywhere تنظیم کنیم
با کلیک کردن بر روی لوگو و انتخاب گزینه شروع یک کنسول "Bash" به داشبورد PythonAnywhere بروید. این محیط خط فرمان مخصوص PythonAnywhere است، شبیه آنچه در کامپیوتر خود دارید.
توجه PythonAnywhere بر مبنای لینوکس است، بنابراین اگر روی ویندوز کار میکنید این محیط خط فرمان با آنچه در ویندوز دارید کمی متفاوت است.
منتشر کردن یک اپلیکیشن تحت وب بر روی PythonAnywhere شامل آوردن کدها از GitHub و تنظیم کردن PythonAnywhere برای تشخیص آن و اجرا کردنش به عنوان یک برنامه تحت وب است. روشهای غیرخودکار برای این کار وجود دارد اما PythonAnywhere یک ابزار کمکی دارد که همه این کارها را برای شما انجام میدهد. اجازه بدهید اول از همه این ابزار را نصب کنیم:
خط فرمان PythonAnywhere
$ pip install --user pythonanywhere
این دستور باید چیزهایی شبیه به Collecting pythonanywhere
بر روی صفحه نشان دهد و در انتها نیز این پیغام Successfully installed (...) pythonanywhere- (...)
نمایش داده خواهد شد.
حالا ما برنامه کمکی را اجرا میکنیم تا به طور اتوماتیک برنامه ما را از GitHub بخواند. خطوط زیر را در کنسول PythonAnywhere بنویسید (فراموش نکنید که نام کاربری GitHub را به جای <your-github-username>
بنویسید در نتیجه URL شما مانند URL اختصاصی شما در GitHub میشود):
خط فرمان PythonAnywhere
$ pa_autoconfigure_django.py --python=3.10 https://github.com/<your-github-username>/my-first-blog.git
همینطور که به اجراشدن آن نگاه میکنید میتوانید بفهمید که چه کاری انجام میدهد:
- دانلود کردن کد شما از GitHub
- ساختن یک محیط مجازی virtualenv بر روی PythonAnywhere شبیه آنچه که بر روی کامپیوتر خود داشتید
- به روزرسانی برخی از تنظیمات شما با تنظیمات مورد نیاز برای انتشار
- تنظیم کردن یک دیتابیس در PythonAnywhere با استفاده از دستور
manage.py migrate
- تنظیم کردن فایلهای ثابت شما (بعداً درمورد آنها یاد خواهیم گرفت)
- و در نهایت تنظیم کردن PythonAnywhere برای ارائه اپلیکیشن شما از طریق API خودش
در PythonAnywhere تمام این مراحل اتوماتیک انجام میشود اما برای سایر سرورها شما باید دقیقا تمام این اقدامات را انجام دهید.
مهمترین چیزی که اینجا باید به آن توجه کنید آن است که پایگاه داده شما در اینجا از چیزی که بر روی کامپیوتر خود دارید کاملا مستقل است در نتیجه ممکن است اینجا حساب کاربری ادمین یا پستهای متفاوتی نسبت به کامپیوتر شخصی خود داشته باشید. در نتیجه همان طور که بر روی کامپیوتر خودمان انجام داده ایم باید یک کاربر admin با دستور createsuperuser
بسازیم. PythonAnywhere به صورت اتوماتیک محیط مجازی یا virtulenv شما را فعال کرده است درنتیجه تنها چیزی که لازم دارید این است که خط زیر را اجرا کنید:
خط فرمان Python Anywhere
(ola.pythonanywhere.com) $ python manage.py createsuperuser
مشخصات کاربر ادمین را وارد کنید. میتوانید این اطلاعات را شبیه اطلاعات ادمین که قبلاً در کامپیوتر خود زدهاید در نظر بگیرید مگر اینکه بخواهید گذره واژه امنتری در PythonAnywhere در نظر بگیرید.
حالا اگر بخواهید میتوانید نگاهی به کدهای خود در PythonAnywhere بیندازید دستور ls
را بزنید:
خط فرمان PythonAnywhere
(ola.pythonanywhere.com) $ ls
blog db.sqlite3 manage.py mysite requirements.txt static
(ola.pythonanywhere.com) $ ls blog/
__init__.py __pycache__ admin.py apps.py migrations models.pytests.py static
templates views.py
علاوه بر این میتوانید به صفحه File بروید و به کمک مرورگر فایل پیشساخته که در PythonAnywhere قرار داده شده به فایلهای خود نگاهی بیاندازید. از صفحه کنسول و به کمک کلید منو در گوشه بالا و سمت راست، می توانید به سایر صفحات PythonAnywhere بروید. وقتی شما در یک صفحه هستید، نزدیک به بالای صفحه، لینکهایی به سایر صفحات وجود دارد.
اکنون آنلاین هستید!
وبسایت شما باید الان به طور عمومی در اینترنت منتشر شده باشد! از طریق صفحه "Web" در PythonAnywhere لینک به این صفحه را پیدا کنید. شما میتوانید این صفحه را با هر کسی به اشتراک بگذارید. :)
توجه این یک تمرین ابتدایی است و ما در هنگام انتشار، برخی میانبرهایی را استفاده کردهایم که از جنبه امنیت وبسایت، روشهای ایدهآلی نیستند. هرگاه تصمیم گرفتید که این پروژه یا پروژه دیگری را بسازید، باید به راهنماییهای امنیتی موجود در چک لیست انتشار جنگو نگاهی بیندازید.
نکات عیبیابی
اگر شما با خطایی در هنگام اجرا کردن دستور pa_autoconfigure_django.py
مواجه شدید ممکن است به دلایل زیر باشد:
- فراموشی در ساخت توکن API در PythonAnywhere.
- اشتباه در URL مربوط به GitHub
- اگر خطایی با این مضمون "Could not find your settings.py" مشاهده کردید، احتمالاً تمام فایلهای خود را به Git اضافه نکردهاید یا همه آنها را (به کمک دستور push) به GitHub نفرستادهاید. به بخش Git در بالا نگاهی دوباره بیندازید
- اگر قبلاً حساب کاربری در PythonAnywhere داشتهاید و خطای collectstatic دریافت میکنید احتمالاً نسخههای قدیمیتر SQLite (مثلاً 3.8.2) را در حساب کاربری خود دارید. در این موارد، یک حساب کاربری جدید بسازید و دستورات مربوط به PythonAnywhere را دوباره بزنید.
اگر هنگام مراجعه به وبسایت خطایی مشاهده کردید اولین جا برای بررسی و عیب یابی نگاه کردن به بخش error log است. حتماً در صفحه "Web" در PythonAnywhere لینکی به این بخش پیدا خواهید کرد. نگاه کنید که آیا پیغام خطایی در این صفحه وجود دارد؛ آخرین پیغامها در پایینترین خط ها است.
علاوه بر این دستورالعملهای عیبیابی عمومیتری هم در صفحه راهنمای سایت PythonAnywhere وجود دارد.
و به یاد داشته باشید که مربی شما اینجاست تا به شما کمک کند!
وبسایت خود را بررسی کنید!
صفحه اصلی سایت شما باید "It worked" را نشان دهد همانطور که بر روی کامپیوتر خودتان کار میکرد. سعی کنید /admin/
را به انتهای آدرس اینترنتی اضافه کنید و به سایت مدیریت برسید. با نام کاربری و گذرواژه خود وارد شوید خواهید دید که میتوانید پست جدیدی ایجاد کنید. به یاد داشته باشید که پستهایی که در پایگاه داده کامپیوتر خود ایجاد کرده اید بر روی وبسایت آنلاین شما منتقل نشده است.
وقتی چند پست جدید ایجاد کردید به تنظیمات بر روی کامپیوتر خود (local و نه تنظیمات روی PythonAnywhere) برگردید. از اینجا میتوانید تنظیمات محلی را تغییر دهید. این یک روش رایج در توسعه وبسایت است؛ تغییرات را روی کامپیوتر خود اعمال کنید، آنها را به GitHub بفرستید و سپس این تغییرات را از گیتهاب، بر روی وب سرور کپی کنید. این روش کمک میکند که بدون ایجاد خرابی در وبسایت آنلاین بتوان آن را به روز رسانی کرد. جالب نیست؟
یک خسته نباشید حسابی به خودتان بگویید! راه اندازی سرور یکی از مهارتیترین بخشهای توسعه وبسایت است و گاهی برای برخی افراد روزها زمان میبرد تا بتوانند آن را راه اندازی کنند. اما شما توانستید سایت خود را بر روی اینترنت واقعی راه اندازی کنید!