
مقدمه در این راهنما، شما یک اپلیکیشن پایتون با استفاده از میکروفریمورک Flask روی اوبونتو 24.04 ایجاد خواهید کرد. بخش عمده این مقاله به نحوه راهاندازی سرور اپلیکیشن Gunicorn، نحوه اجرای اپلیکیشن و پیکربندی Nginx به عنوان یک پروکسی معکوس (Reverse Proxy) در فرانتاند میپردازد.
پیشنیازها پیش از شروع این راهنما، باید موارد زیر را داشته باشید:
- یک سرور با سیستمعامل اوبونتو 24.04 و یک کاربر غیر روت (non-root) با دسترسی sudo. برای این کار میتوانید راهنمای راهاندازی اولیه سرور در پارمین کلود (Parmin Cloud) را دنبال کنید.
- وبسرور Nginx روی سرور شما نصب باشد.
- یک نام دامنه که به سرور شما اشاره (Point) شده باشد. میتوانید با مراجعه به مستندات مربوط به دامنهها و DNS در پارمین کلود، نحوه اتصال دامنهها به سرورهای خود را یاد بگیرید. این آموزش فرض میکند که شما رکوردهای DNS زیر را ایجاد کردهاید:
- یک رکورد A با نام
your_domainکه به آدرس IP عمومی سرور شما اشاره دارد. - یک رکورد A با نام
www.your_domainکه به آدرس IP عمومی سرور شما اشاره دارد.
- یک رکورد A با نام
- آشنایی اولیه با مشخصات WSGI، که سرور Gunicorn از آن برای ارتباط با اپلیکیشن Flask شما استفاده میکند.
مرحله ۱ — نصب کامپوننتها از مخازن اوبونتو
اولین قدم شما نصب تمام قطعات مورد نیاز از مخازن اوبونتو خواهد بود. این پکیجها شامل pip (مدیریت پکیج پایتون) برای مدیریت کامپوننتهای پایتون شماست. شما همچنین به فایلهای توسعه پایتون که برای ساخت برخی از اجزای Gunicorn لازم هستند، نیاز خواهید داشت.
ابتدا ایندکس پکیجهای محلی را بهروزرسانی کنید:
سپس پکیجهایی را نصب کنید که به شما اجازه میدهند محیط پایتون خود را بسازید. این پکیجها شامل python3-pip و چندین ابزار توسعه دیگر برای یک محیط برنامهنویسی قوی هستند:
با نصب این پکیجها، شما آماده هستید تا یک محیط مجازی (Virtual Environment) برای پروژه خود ایجاد کنید.
مرحله ۲ — ایجاد یک محیط مجازی پایتون
در مرحله بعد، یک محیط مجازی راهاندازی میکنیم تا اپلیکیشن Flask خود را از سایر فایلهای پایتون روی سیستم ایزوله کنیم.
ابتدا پکیج python3-venv را نصب کنید:
سپس، یک دایرکتوری اصلی برای پروژه Flask خود ایجاد کرده و وارد آن شوید:
با تایپ دستور زیر، یک محیط مجازی برای ذخیره نیازمندیهای پایتون پروژه Flask خود ایجاد کنید:
این کار یک نسخه محلی از پایتون و pip را در دایرکتوری به نام myprojectenv درون دایرکتوری پروژه شما نصب میکند.
پیش از نصب اپلیکیشنها در محیط مجازی، باید آن را فعال کنید. این کار را با تایپ دستور زیر انجام دهید:
پرامپت شما تغییر میکند تا نشان دهد اکنون در محیط مجازی در حال کار هستید. چیزی شبیه به این خواهد بود: (myprojectenv)user@host:~/myproject$.
مرحله ۳ — راهاندازی اپلیکیشن Flask
اکنون که در محیط مجازی خود هستید، میتوانید Flask و Gunicorn را نصب کرده و سپس طراحی اپلیکیشن خود را آغاز کنید.
ابتدا wheel را با نمونه محلی pip نصب کنید تا اطمینان حاصل کنید پکیجها حتی در صورت نداشتن آرشیو wheel نیز نصب میشوند:
نکته: مهم نیست از کدام نسخه پایتون استفاده میکنید، وقتی محیط مجازی فعال است، باید از دستور pip (نه pip3) استفاده کنید.
سپس، Flask و Gunicorn را نصب کنید:
ایجاد یک اپلیکیشن نمونه اکنون که Flask را در اختیار دارید، میتوانید یک اپلیکیشن ساده ایجاد کنید. Flask یک میکروفریمورک است و ابزارهای زیادی که فریمورکهای کاملتر دارند را شامل نمیشود.
در این مثال، اپلیکیشن Flask خود را در یک فایل واحد به نام myproject.py ایجاد میکنید:
کد اپلیکیشن در این فایل قرار میگیرد. این کد Flask را ایمپورت کرده و یک آبجکت Flask نمونهسازی میکند:
~/myproject/myproject.py
این کد در واقع تعیین میکند که هنگام دسترسی به دامنه ریشه (root domain)، چه محتوایی نمایش داده شود. پس از اتمام، فایل را ذخیره کرده و ببندید.
اگر راهنمای راهاندازی اولیه سرور را دنبال کرده باشید، فایروال UFW شما فعال است. برای تست اپلیکیشن، باید اجازه دسترسی به پورت 5000 را بدهید:
اکنون میتوانید اپلیکیشن Flask خود را با تایپ دستور زیر تست کنید:
خروجی مشابه زیر را خواهید دید که شامل یک هشدار مفید است که یادآوری میکند از این تنظیمات سرور در محیط پروداکشن استفاده نکنید:
آدرس IP سرور خود را به همراه :5000 در مرورگر وب خود وارد کنید. شما پیام Hello There! را خواهید دید. پس از اتمام، کلید CTRL + C را در پنجره ترمینال خود بزنید تا سرور توسعه Flask متوقف شود.
ایجاد نقطه ورود WSGI در مرحله بعد، فایلی ایجاد کنید که به عنوان نقطه ورود (Entry Point) اپلیکیشن شما عمل کند. این فایل به سرور Gunicorn میگوید که چگونه با اپلیکیشن شما تعامل داشته باشد.
فایل را wsgi.py نامگذاری کنید:
در این فایل، نمونه Flask را از اپلیکیشن خود ایمپورت کرده و سپس آن را اجرا کنید:
~/myproject/wsgi.py
فایل را ذخیره کرده و ببندید.
مرحله ۴ — پیکربندی Gunicorn
اپلیکیشن شما اکنون با یک نقطه ورود ایجاد شده است. اکنون میتوانید به پیکربندی Gunicorn بپردازید.
پیش از ادامه، باید تست کنیم که Gunicorn میتواند اپلیکیشن را به درستی سرو کند. این کار را با پاس دادن نام نقطه ورود خود انجام میدهیم. این نام از ترکیب نام ماژول (بدون پسوند .py) به علاوه نام قابل فراخوانی (Callable) در اپلیکیشن تشکیل میشود. در مورد ما، این نام wsgi:app است.
همچنین رابط و پورتی را برای Bind کردن مشخص میکنیم تا اپلیکیشن روی یک رابط در دسترس عموم شروع به کار کند:
خروجی مشابه زیر را خواهید دید:
آدرس IP سرور خود را با :5000 در مرورگر وب خود دوباره وارد کنید. باید خروجی اپلیکیشن خود را دوباره ببینید. پس از تایید عملکرد صحیح، CTRL + C را در ترمینال خود فشار دهید.
اکنون کار شما با محیط مجازی تمام شده است، بنابراین میتوانید آن را غیرفعال کنید:
سپس، فایل سرویس systemd را ایجاد میکنیم. ایجاد یک فایل سرویس systemd به سیستم init اوبونتو اجازه میدهد تا Gunicorn را به طور خودکار راهاندازی کرده و اپلیکیشن Flask را هر زمان که سرور بوت میشود، سرو کند.
یک فایل سرویس با پسوند .service در دایرکتوری /etc/systemd/system ایجاد کنید:
داخل فایل، با بخش [Unit] شروع کنید تا متادیتا و وابستگیها را مشخص کنید. توضیحات سرویس را در اینجا قرار دهید و به سیستم init بگویید که این سرویس را تنها پس از رسیدن به هدف شبکه (Networking Target) شروع کند:
سپس بخش [Service] را باز کنید. این بخش کاربر و گروهی را که میخواهید پردازش تحت آن اجرا شود مشخص میکند. مالکیت پردازش را به حساب کاربری معمولی خود بدهید و گروه را www-data تنظیم کنید تا Nginx بتواند به راحتی با پردازشهای Gunicorn ارتباط برقرار کند. (به جای sammy نام کاربری خود را وارد کنید):
سپس، دایرکتوری کاری (Working Directory) را مشخص کرده و متغیر محیطی PATH را تنظیم کنید تا سیستم init بداند که فایلهای اجرایی پردازش در محیط مجازی شما قرار دارند. دستور شروع سرویس را نیز مشخص کنید. این دستور کارهای زیر را انجام میدهد:
- شروع ۳ پردازش Worker (که میتوانید این عدد را بر اساس نیاز خود تنظیم کنید).
- ایجاد و اتصال به یک فایل سوکت یونیکس (
myproject.sock) در دایرکتوری پروژه شما. مقدارumaskرا روی007تنظیم میکنیم تا فایل سوکت دسترسی مالک و گروه را بدهد و دسترسی سایرین را محدود کند. - مشخص کردن نام فایل نقطه ورود WSGI به همراه قابل فراخوانی پایتون (
wsgi:app).
(به جای sammy و مسیرهای پروژه، اطلاعات خود را وارد کنید):
فایل سرویس systemd شما کامل شد. آن را ذخیره کرده و ببندید.
اکنون میتوانید سرویس Gunicorn را استارت کرده و آن را فعال کنید تا در زمان بوت استارت شود:
وضعیت آن را بررسی کنید:
خروجی باید نشان دهد که سرویس active (running) است.
مرحله ۵ — پیکربندی Nginx برای پروکسی درخواستها
سرور اپلیکیشن Gunicorn شما اکنون در حال اجرا است و منتظر درخواستها روی فایل سوکت است. در این مرحله، Nginx را پیکربندی میکنید تا درخواستهای وب را به آن سوکت ارسال کند.
ابتدا یک فایل پیکربندی Server Block جدید در دایرکتوری sites-available ایجاد کنید:
یک Server Block باز کنید و به Nginx بگویید که به پورت 80 گوش دهد و از این بلاک برای درخواستهای دامنه شما استفاده کند:
سپس، یک بلاک location اضافه کنید که با هر درخواستی مطابقت داشته باشد. در این بلاک، فایل proxy_params را включ کنید تا برخی از پارامترهای عمومی پروکسی تنظیم شوند. سپس درخواستها را با استفاده از دستور proxy_pass به سوکتی که تعریف کردیم ارسال کنید:
فایل را ذخیره کرده و ببندید. (مسیر سوکت را با نام کاربری خود تنظیم کنید).
برای فعال کردن این پیکربندی، یک لینک نمادین (Symbolic Link) به دایرکتوری sites-enabled ایجاد کنید:
سپس خطاهای نحوی (Syntax) را تست کنید:
اگر مشکلی نبود، Nginx را ریاستارت کنید:
در نهایت، فایروال را تنظیم کنید. دیگر نیازی به پورت 5000 ندارید، بنابراین آن قانون را حذف کرده و دسترسی کامل به Nginx را باز کنید:
اکنون میتوانید به نام دامنه سرور خود در مرورگر وب بروید. باید خروجی اپلیکیشن خود را ببینید.
مرحله ۶ — ایمنسازی اپلیکیشن
برای اطمینان از امنیت ترافیک سرور خود، یک گواهی SSL برای دامنه خود دریافت کنید. در این آموزش نحوه دریافت گواهی رایگان از Let’s Encrypt را توضیح میدهیم.
ابتدا پکیج Nginx مربوط به Certbot را نصب کنید:
برای استفاده از این پلاگین، دستور زیر را تایپ کنید:
این دستور Certbot را با پلاگین --nginx اجرا میکند و با استفاده از -d نامهایی که میخواهید گواهی برای آنها معتبر باشد را مشخص میکند. اگر این اولین بار است که Certbot را اجرا میکنید، از شما خواسته میشود یک آدرس ایمیل وارد کرده و با شرایط خدمات موافقت کنید.
سپس Certbot از شما میپرسد که چگونه میخواهید تنظیمات HTTPS خود را پیکربندی کنید. گزینه ۲ (Redirect) را برای هدایت تمام درخواستها به HTTPS انتخاب کنید. Nginx مجدداً بارگذاری میشود تا تنظیمات جدید را اعمال کند.
پس از موفقیتآمیز بودن فرآیند، میتوانید برای تایید پیکربندی، یک بار دیگر با استفاده از https:// به دامنه خود بروید. باید خروجی اپلیکیشن خود را همراه با نشانگر امنیتی مرورگر خود ببینید که نشان میدهد سایت ایمن شده است.
نتیجهگیری در این راهنما، شما یک اپلیکیشن ساده Flask را در یک محیط مجازی پایتون ایجاد و ایمنسازی کردید. سپس یک نقطه ورود WSGI ایجاد کردید تا سرورهای اپلیکیشن سازگار با WSGI بتوانند با آن ارتباط برقرار کنند، و سرور اپلیکیشن Gunicorn را پیکربندی کردید. پس از آن، یک فایل سرویس systemd برای راهاندازی خودکار سرور اپلیکیشن در زمان بوت ایجاد کردید. شما همچنین یک Server Block در Nginx ایجاد کردید که ترافیک کلاینتهای وب را به سرور اپلیکیشن هدایت میکند و ترافیک سرور خود را با Let’s Encrypt ایمنسازی کردید. اکنون میتوانید از این معماری برای سرو کردن اپلیکیشنهای Flask که طراحی میکنید، استفاده کنید.
از همراهی شما با پارمین کلود سپاسگزاریم.




