ارائه برنامه های Flask با uWSGI و Nginx در اوبونتو 18.04

در این راهنما یک برنامه Python را با استفاده از میکروفریم Flask در Ubuntu 18.04 ایجاد خواهید کرد. بخش عمده این مقاله در مورد نحوه تنظیم سرور مجازی برنامه uWSGI و نحوه راه اندازی و پیکربندی برنامه Nginx برای عمل به عنوان یک پروکسی معکوس front-end خواهد بود.پیش نیازهاقبل از شروع این راهنما ، باید این موارد را داشته باشید:⦁ سرور مجازی با اوبونتو 18.04 و یک کاربر غیر ریشه با امتیازات sudo. برای راهنمایی ، مقاله ستاپ اولیه سرور مجازی ما را دنبال کنید.⦁ Nginx نصب شده داشته باشید، مراحل 1 و 2 نحوه نصب Nginx در اوبونتو 18.04 را دنبال کنید.⦁ نام دامنه پیکربندی شده برای اشاره به سرور مجازی شما. می توانید یکی از آنها را در Namecheap خریداری کنید یا یکی از آنها را به صورت رایگان در Freenom دریافت کنید. با دنبال کردن مستندات مربوط به دامنه ها و DNS می توانید یاد بگیرید که چگونه دامنه ها را به vpsgol نشان دهید. حتماً سوابق DNS زیر را ایجاد کنید:o یک رکورد A با your_domain که به آدرس IP عمومی سرور مجازی شما اشاره می کند.o یک رکورد A با www.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره کند.⦁ آشنایی با uWSGI ، سرور مجازی برنامه ما و مشخصات WSGI. این بحث به تفصیل به تعاریف و مفاهیم می پردازد.مرحله 1 – نصب مولفه ها از مخازن اوبونتواولین قدم ما نصب تمام بخش ها مورد نیاز از مخازن اوبونتو خواهد بود. pip ، مدیر بسته پایتون را برای مدیریت اجزای پایتون خود نصب خواهیم کرد. همچنین فایل های توسعه پایتون لازم برای ساخت uWSGI را دریافت خواهیم کرد.ابتدا ، اجازه دهید ایندکس بسته محلی را به روز کنیم و بسته هایی را نصب کنیم که به ما امکان می دهد محیط Python خود را بسازیم. این موارد شامل python3-pip ، همراه با چند بسته دیگر و ابزار توسعه لازم برای یک محیط برنامه نویسی قوی است:⦁ $ sudo apt update⦁⦁ $ sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptoolsبا استفاده از این بسته ها ، به سمت ایجاد یک فضای مجازی برای پروژه خود برویم.مرحله 2 – ایجاد یک محیط مجازی پایتوندر مرحله بعدی ، یک محیط مجازی تنظیم خواهیم کرد تا بتوانیم برنامه Flask خود را از سایر فایل های Python روی سیستم جدا کنیم.با نصب بسته python3-venv که ماژول venv را نصب خواهد کرد شروع کنید:⦁ $ sudo apt install python3-venv⦁در مرحله بعد ، بیایید یک دایرکتوری والد برای پروژه Flask تهیه کنیم. بعد از ایجاد آن وارد پوشه شوید:⦁ $ mkdir ~/myproject⦁⦁ $ cd ~/myprojectیک محیط مجازی ایجاد کنید تا نیازمندی های پایتون پروژه Flask خود را با تایپ کردن دستور زیر ذخیره کنید:⦁ $ python3.6 -m venv myprojectenv⦁با این کار یک کپی محلی از Python و pip در دیرکتوری به نام myprojectenv درون دیرکتوری پروژه شما کپی میشود.قبل از نصب برنامه ها در محیط مجازی ، باید آن را فعال کنید. این کار را با تایپ کردن دستور زیر انجام دهید:⦁ $ source myprojectenv/bin/activate⦁اعلان شما تغییر می کند و نشان می دهد که اکنون در محیط مجازی کار می کنید. چیزی شبیه به (myprojectenv)user@host:~/myproject$ به نظر می رسد .مرحله 3 – تنظیم یک برنامه Flaskاکنون که در محیط مجازی خود قرار دارید ، می توانید Flask و uWSGI را نصب کرده و طراحی برنامه خود را شروع کنید.ابتدا بگذارید wheel را با نمونه محلی pip نصب کنیم تا اطمینان حاصل شود که بسته های ما حتی در صورت از دست دادن بایگانی wheel ، نصب می شوند:⦁ $ pip install wheel⦁توجه داشته باشیدصرفنظر از اینکه از کدام نسخه Python استفاده می کنید ، هنگامی که محیط مجازی فعال می شود ، باید از دستور pip استفاده کنید (نه pip3)سپس ، اجازه دهید Flask و uWSGI را نصب کنیم:⦁ (myprojectenv) $ pip install uwsgi flask⦁ایجاد یک برنامه نمونهاکنون که Flask را در دسترس دارید ، می توانید یک برنامه ساده ایجاد کنید. Flask یک میکرو فریم ورک است. و بسیاری از ابزارهایی که ممکن است چهارچوبهای کامل تری داشته باشند را شامل نمیشود، و عمدتاً به عنوان ماژول وجود دارد که می توانید برای شروع برنامه های وب از کمک بگیرید تا بتوانید به پروژه های خود وارد شوید.در حالی که ممکن است برنامه شما پیچیده تر باشد ، ما برنامه Flask خود را در یک فایل واحد با نام myproject.py ایجاد خواهیم کرد:⦁ (myprojectenv) $ nano ~/myproject/myproject.py⦁کد برنامه در این فایل قرار دارد. Flask را وارد می کند و یک آبجکت Flask را معرفی می کند. شما می توانید از این ویژگی برای تعریف کارکردهایی استفاده کنید که باید هنگام درخواست یک مسیر خاص انجام شود:~/myproject/myproject.pyfrom flask import Flaskapp = Flask(__name__)@app.route(“/”)def hello():return “<h1 style=’color:blue’>Hello There!</h1>”if __name__ == “__main__”:app.run(host=’0.0.0.0′)این کد اساساً مشخص می کند که هنگام دستیابی به حوزه root ، چه محتوایی ارائه شود. پس از اتمام فایل را ذخیره کنید و ببندید.اگر راهنمای اولیه تنظیم سرور مجازی را دنبال کرده اید ، باید فایروال UFW را فعال کرده باشید. برای تست برنامه ، باید دسترسی به پورت 5000 را داشته باشید:⦁ (myprojectenv) $ sudo ufw allow 5000⦁اکنون می توانید برنامه Flask خود را با تایپ کردن دستور زیر تست کنید:⦁ (myprojectenv) $ python myproject.py⦁خروجی مانند این را مشاهده خواهید کرد ، که شامل یک هشدار مفید است که به شما یادآوری می کند از این ستاپ سرور مجازی در تولید استفاده نکنید:Output* Serving Flask app “myproject” (lazy loading)* Environment: productionWARNING: Do not use the development server in a production environment.Use a production WSGI server instead.* Debug mode: off* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)از آدرس IP سرور مجازی و به دنبال آن: 5000 در مرورگر وب خود بازدید کنید:http://your_server_ip:5000باید چیزی شبیه به این را ببینید:پس از اتمام ، CTRL-C را در پنجره ترمینال خود بزنید تا سرور مجازی توسعه Flask متوقف شود.ایجاد نقطه ورود WSGIدر مرحله بعدی ، فایلی را ایجاد میکنیم که به عنوان نقطه ورود برنامه ما باشد. این به سرور مجازی uWSGI می گوید که چگونه می توان با آن تعامل برقرار کرد.بیایید فایل wsgi.py را فراخوانی کنیم:⦁ (myprojectenv) $ nano ~/myproject/wsgi.py⦁در این فایل ، بیایید نمونه Flask را از برنامه خود وارد کنیم و سپس آن را اجرا کنیم:~/myproject/wsgi.pyfrom myproject import appif __name__ == “__main__”:app.run()پس از اتمام فایل را ذخیره کنید و ببندید.مرحله 4 – پیکربندی uWSGIبرنامه شما اکنون با یک نقطه ورود مشخص نوشته شده است. اکنون می توانیم به سراغ پیکربندی uWSGI برویم.تست سرویس UWSGIبیایید تست کنیم تا مطمئن شویم که uWSGI می تواند برنامه ما را ارائه کند.ما می توانیم این کار را با ساده تر کردن نام ورودی خود انجام دهیم. این با نام ماژول ساخته شده است (منهای پسوند .py) به علاوه نام قابل فراخوانی درون برنامه. در نمونه ما ، wsgi:app است.بیایید سوکت را نیز مشخص کنیم ، به طوری که آن را بر روی یک رابط در دسترس عمومی و همچنین پروتکل راه اندازی کنید تا از HTTP به جای پروتکل باینری uwsgi استفاده کند. ما از همان شماره پورت ، 5000 ، که قبلاً باز کردیم استفاده خواهیم کرد:⦁ (myprojectenv) $ uwsgi –socket 0.0.0.0:5000 –protocol=http -w wsgi:app⦁آدرس IP سرور مجازی خود را به همراه 5000 در ادامه اش بازدید کنیدhttp: // your_server_ip: 5000باید دوباره خروجی برنامه خود را مشاهده کنید:وقتی تأیید کرد که به درستی کار میکند ، CTRL-C را در پنجره ترمینال خود فشار دهید.اکنون محیط مجازی خود را ایجاد کرده ایم ، بنابراین می توانیم آن را غیرفعال کنیم:⦁ (myprojectenv) $ deactivate⦁هر دستور پایتون اکنون دوباره از محیط پایتون سیستم استفاده خواهد کرد.ایجاد یک فایل پیکربندی uWSGIآزمایش کرده اید که uWSGI قادر به ارائه برنامه شما است ، اما در نهایت برای استفاده طولانی مدت چیزی قوی تر می خواهید. می توانید با استفاده از گزینه های مربوطه ، یک فایل پیکربندی uWSGI ایجاد کنید.بیایید آن فایل را در فهرست پروژه خود قرار دهیم و آن را myproject.ini بنامیم:⦁ $ nano ~/myproject/myproject.ini⦁در داخل ، با عنوان [uwsgi] شروع خواهیم کرد تا uWSGI بداند که می تواند تنظیمات را اعمال کند. دو مورد را مشخص خواهیم کرد: خود ماژول با مراجعه به فایل wsgi.py منهای پسوند و فراخوانی در فایل ، app:~/myproject/myproject.ini[uwsgi]module = wsgi:appدر مرحله بعد ، به uWSGI خواهیم گفت که در حالت مستر راه اندازی شود و پنج فرآیند کارگر را برای ارائه درخواست های واقعی ایجاد کند:~/myproject/myproject.ini[uwsgi]module = wsgi:appmaster = trueprocesses = 5هنگام آزمایش ، uWSGI را در پورت شبکه قرار داده اید. با این حال ، می توانید از Nginx برای رسیدگی به اتصالات واقعی کلاینت استفاده کنید ، که سپس درخواست ها را به uWSGI منتقل می کند. از آنجا که این مولفه ها در همان رایانه کار می کنند ، سوکت یونیکس ترجیح داده می شود زیرا سریع تر و ایمن تر است. بیایید سوکت را myproject.sock بنامیم و در این دیرکتوری قرار دهیم.بیایید مجوزهای موجود در سوکت را نیز تغییر دهیم. بعداً به گروه Nginx مالکیت پروسه uWSGI را می دهیم ، بنابراین باید اطمینان حاصل کنیم که مالک گروه سوکت می تواند اطلاعاتی را از آن بخواند و برای آن بنویسد. ما همچنین با اضافه کردن گزینه vacuum ، سوکت را تمیز کنیم:~/myproject/myproject.ini[uwsgi]module = wsgi:appmaster = trueprocesses = 5socket = myproject.sockchmod-socket = 660vacuum = trueآخرین کاری که انجام خواهیم داد اینست که گزینه die-on-term را تنظیم کنیم. این می تواند اطمینان حاصل کند که سیستم init و uWSGI پیش فرض های یکسانی در مورد معنی هر سیگنال فرآیند دارند. تنظیم این دو مؤلفه سیستم ، رفتار مورد انتظار را اجرا می کند:~/myproject/myproject.ini[uwsgi]module = wsgi:appmaster = trueprocesses = 5socket = myproject.sockchmod-socket = 660vacuum = truedie-on-term = trueشاید متوجه شده باشید که ما پروتکلی مانند خط فرمان مشخص نکردیم. دلیل این است که به طور پیش فرض ، uWSGI با استفاده از پروتکل uwsgi ، یک پروتکل باینری سریع طراحی شده برای برقراری ارتباط با دیگر سرور مجازی ها ، ارتباط برقرار می کند. Nginx می تواند این پروتکل را به صورت بومی اجرا کند ، بنابراین بهتر است از این استفاده کنید به جای اینکه مجبور به برقراری ارتباط توسط HTTP شوید.پس از اتمام ، فایل را ذخیره کنید و ببندید.مرحله 5 – ایجاد یک فایل واحد سیستماتیکدر مرحله بعدی ، بیایید فایل واحد خدمات سیستمی سرویس را ایجاد کنیم. ایجاد یک فایل واحد سیستمی به سیستم اولیه Ubuntu امکان می دهد تا UWSGI را به طور خودکار شروع کرده و هر زمان که سرور مجازی بوت میشود ، سرویس Flask را ارائه دهد.برای شروع یک فایل واحد که به service . ختم میشود در دیرکتوری /etc/systemd/system ایجاد می کنیم:⦁ $ sudo nano /etc/systemd/system/myproject.service⦁در داخل ، با بخش [Unit] شروع خواهیم کرد ، که برای مشخص کردن ابرداده و متعلقات استفاده می شود. بیایید شرح خدمات خود را در اینجا قرار دهیم و به سیستم init بگوییم که فقط پس از رسیدن به هدف شبکه ، سیستم را شروع کند:/etc/systemd/system/myproject.service[Unit]Description=uWSGI instance to serve myprojectAfter=network.targetسپس ، اجازه دهید بخش [Service] را باز کنیم. با این کار کاربر و گروهی را که می خواهیم تحت روند کار قرار بگیرند مشخص می کند. بیایید مالکیت این فرآیند را به حساب کاربری معمول خود بدهیم زیرا این فایل در اختیار همه فایل های مربوطه است. همچنین بیایید مالکیت گروه را به گروه www-data واگذار کنیم تا Nginx بتواند به راحتی با فرآیندهای uWSGI ارتباط برقرار کند. به یاد داشته باشید که نام کاربری خود را در اینجا جایگزین کنید:/etc/systemd/system/myproject.service[Unit]Description=uWSGI instance to serve myprojectAfter=network.target[Service]User=sammyGroup=www-dataدر مرحله بعدی ، بگذارید دیرکتوری کار را مشخص کنیم و متغیر محیطی PATH را تنظیم کنیم تا سیستم اولیه بداند که موارد اجرایی این فرآیند در محیط مجازی ما قرار دارند. بیایید فرمان شروع سرویس را نیز مشخص کنیم. Systemd نیاز دارد که ما مسیر کامل را به uWSGI قابل اجرا که در محیط مجازی ما نصب شده است ، واگذار کنیم. نام فایل پیکربندی .ini را که در دیرکتوری پروژه خود ایجاد کرده ایم ، ارسال خواهیم کرد.به یاد داشته باشید که نام کاربری و مسیر پروژه را با اطلاعات شخصی خود جایگزین کنید:/etc/systemd/system/myproject.service[Unit]Description=uWSGI instance to serve myprojectAfter=network.target[Service]User=sammyGroup=www-dataWorkingDirectory=/home/sammy/myprojectEnvironment=”PATH=/home/sammy/myproject/myprojectenv/bin”ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.iniدر آخر ، بیایید یک بخش [Install] اضافه کنیم. اگر سیستم را فعال کنیم که در بوت شروع شود ، به چه سیستم میگوید که به این سرویس چه چیزی وصل کند. ما می خواهیم با شروع به کار سیستم معمولی چند کاربره ، این سرویس شروع شود:/etc/systemd/system/myproject.service[Unit]Description=uWSGI instance to serve myprojectAfter=network.target[Service]User=sammyGroup=www-dataWorkingDirectory=/home/sammy/myprojectEnvironment=”PATH=/home/sammy/myproject/myprojectenv/bin”ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.ini[Install]WantedBy=multi-user.targetبا این کار ، فایل سرویس سیستمی ما کامل است. اکنون آن را ذخیره کنید و ببندید.اکنون می توانیم سرویس uWSGI را که ایجاد کردیم شروع کنیم و آن را فعال کنیم تا در بوت شروع شود:⦁ $ sudo systemctl start myproject⦁⦁ $ sudo systemctl enable myprojectبگذارید وضعیت را بررسی کنیم:⦁ $ sudo systemctl status myproject⦁باید خروجی مانند این را مشاهده کنید:Output● myproject.service – uWSGI instance to serve myprojectLoaded: loaded (/etc/systemd/system/myproject.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2018-07-13 14:28:39 UTC; 46s agoMain PID: 30360 (uwsgi)Tasks: 6 (limit: 1153)CGroup: /system.slice/myproject.service├─30360 /home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.ini├─30378 /home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.ini├─30379 /home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.ini├─30380 /home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.ini├─30381 /home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.ini└─30382 /home/sammy/myproject/myprojectenv/bin/uwsgi –ini myproject.iniدر صورت مشاهده هر گونه خطا ، حتما آنها را قبل از ادامه آموزش برطرف کنید.مرحله 6 – پیکربندی Nginx در درخواستهای پروکسیسرور مجازی برنامه uWSGI ما باید اکنون به روز و در حال اجرا و منتظر درخواست هایی روی فایل سوکت در دیرکتوری پروزه باشد. بیایید Nginx را پیکربندی کنیم تا درخواست های وب را با استفاده از پروتکل uwsgi به آن سوکت منتقل کنیم.با ایجاد یک فایل پیکربندی بلوک جدید سرور مجازی در دیرکتوری sites-available Nginx شروع کنید. بیایید این پروژه را myproject بنامیم تا با بقیه راهنما مطابقت داشته باشد:⦁ $ sudo nano /etc/nginx/sites-available/myproject⦁یک بلوک سرور مجازی باز کنید و به Nginx بگویید که به پورت پیش فرض 80 گوش کند. بیایید به آن نیز بگوییم که از این بلوک برای درخواست های نام دامنه سرور مجازی ما استفاده کند:/etc/nginx/sites-available/myprojectserver {listen 80;server_name your_domain www.your_domain;}سپس ، بیایید یک بلوک موقعیت مکانی اضافه کنیم که مطابق با هر درخواست باشد. در این بلوک ، فایل uwsgi_params را وارد خواهیم کرد که پارامترهای کلی UWSGI مورد نیاز برای تنظیم را مشخص می کند. سپس درخواستها را به سوکت تعریف شده با استفاده از بخشنامه uwsgi_pass ارسال خواهیم کرد:/etc/nginx/sites-available/myprojectserver {listen 80;server_name your_domain www.your_domain;location / {include uwsgi_params;uwsgi_pass unix:/home/sammy/myproject/myproject.sock;}}پس از اتمام فایل را ذخیره کنید و ببندید.برای فعال کردن پیکربندی بلوک سرور مجازی Nginx که اخیراً ایجاد کرده اید ، فایل را به دیرکتوری sites-enabled پیوند دهید:⦁ $ sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled⦁با قرارگیری فایل در آن دیرکتوری ، می توانیم با تایپ کردن دستور زیر خطاهای نحوی را آزمایش کنیم:⦁ $ sudo nginx -t⦁اگر بدون نشان دادن مشکلی بازگشت ، فرایند Nginx را دوباره شروع کنید تا پیکربندی جدید را بخوانید:⦁ $ sudo systemctl restart nginx⦁در آخر ، اجازه دهید دوباره فایروال را تنظیم کنیم. دیگر نیازی به دسترسی از طریق پورت 5000 نداریم ، بنابراین می توانیم این قانون را حذف کنیم. سپس می توانیم به رسرور مجازی Nginx دسترسی داشته باشیم:⦁ $ sudo ufw delete allow 5000⦁⦁ $ sudo ufw allow ‘Nginx Full’اکنون باید بتوانید در مرورگر وب خود به نام دامنه سرور مجازی خود بروید:http: // your_domainباید خروجی برنامه خود را مشاهده کنید:اگر با خطایی مواجه شدید ، موارد زیر را بررسی کنید:⦁ sudo less /var/log/nginx/error.log ورودهای مربوط به خطای Nginx را بررسی می کند.⦁ sudo less /var/log/nginx/access.log ورودهای مربوط به دسترسی Nginx را بررسی می کند.⦁ sudo journalctl -u nginx ورود های مربوط به فرآیند Nginx را بررسی می کند.⦁ sudo journalctl -u myproject ورود های UWSGI برنامه Flask شما را بررسی می کند.مرحله 7 – امنیت برنامهبرای اطمینان از ایمن ماندن ترافیک به سرور مجازی شما ، اجازه دهید یک گواهی SSL برای دامنه شما دریافت کنیم. روش های مختلفی برای این کار وجود دارد ، از جمله دریافت گواهینامه رایگان از Let’s Encrypt ، تولید یک گواهی خود امضا شده یا خرید از ارائه دهنده دیگر و پیکربندی Nginx برای استفاده از آن با دنبال کردن مراحل 2 تا 6 نحوه ایجاد یک گواهی SSL خود امضا شده برای Nginx در اوبونتو 18.04. به خاطر صلاحدید ، گزینه ی اول را انتخاب میکنیم.ابتدا مخزن Certbot Ubuntu را اضافه کنید:⦁ $ sudo add-apt-repository ppa:certbot/certbot⦁برای قبول باید ENTER را فشار دهید.در مرحله بعدی ، بسته Nginx Certbot را با apt نصب کنید:⦁ $ sudo apt install python-certbot-nginx⦁Certbot روشهای مختلفی برای به دست آوردن گواهینامه های SSL از طریق افزونه ها ارائه می دهد. افزونه Nginx از پیکربندی مجدد Nginx و لود مجدد در صورت لزوم ، مراقبت خواهد کرد. برای استفاده از این افزونه ، دستور زیر را تایپ کنید:⦁ $ sudo certbot –nginx -d your_domain -d www.your_domain⦁این دستور certbot را با افزونه –nginx با استفاده از -d اجرا میکند تا نام هایی که می خواهیم گواهی برای آنها اعتبار داشته باشد ، مشخص شوند.اگر اولین بار است که certbot را اجرا میکنید ، از شما خواسته می شود که آدرس ایمیل را وارد کنید و با شرایط سرویس موافقت کنید. بعد از انجام این کار ، certbot با سرور مجازی Let’s Encrypt ارتباط برقرار می کند ، سپس برای تأیید اینکه دامنه مورد نظر خود را کنترل می کنید ، یک چالش را اجرا کنید.اگر موفقیت آمیز باشد ، certbot از شما می پرسد که می خواهید تنظیمات HTTPS خود را چگونه پیکربندی کنید.OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.——————————————————————————-1: No redirect – Make no further changes to the webserver configuration.2: Redirect – Make all requests redirect to secure HTTPS access. Choose this fornew sites, or if you’re confident your site works on HTTPS. You can undo thischange by editing your web server’s configuration.——————————————————————————-Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):انتخاب خود را مشخص کنید و سپس ENTER بزنید. پیکربندی به روز خواهد شد ، و Nginx مجدد لود می شود تا تنظیمات جدید را انتخاب کند. certbot با پیغامی همراه خواهد بود که به شما می گوید روند موفقیت آمیز بوده و گواهی نامه های شما در کجا ذخیره شده است:OutputIMPORTANT NOTES:– Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/your_domain/fullchain.pemYour key file has been saved at:/etc/letsencrypt/live/your_domain/privkey.pemYour cert will expire on 2018-07-23. To obtain a new or tweakedversion of this certificate in the future, simply run certbot againwith the “certonly” option. To non-interactively renew *all* ofyour certificates, run “certbot renew”– Your account credentials have been saved in your Certbotconfiguration directory at /etc/letsencrypt. You should make asecure backup of this folder now. This configuration directory willalso contain certificates and private keys obtained by Certbot somaking regular backups of this folder is ideal.– If you like Certbot, please consider supporting our work by:Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donateDonating to EFF: https://eff.org/donate-leاگر دستورالعمل نصب Nginx را در پیش شرط ها دنبال کردید ، دیگر نیازی به اجازه پروفایل HTTP نخواهید داشت:⦁ $ sudo ufw delete allow ‘Nginx HTTP’⦁برای تأیید پیکربندی ، اجازه دهید یکبار دیگر با استفاده از https: // به دامنه خود برویمhttps: // your_domainباید یک بار دیگر خروجی برنامه خود را همراه با نشانگر امنیتی مرورگر خود مشاهده کنید ، که باید نشانگر امنیت سایت باشد.نتیجهدر این راهنما ، یک برنامه ساده Flask را در یک محیط مجازی Python ایجاد و ایمن کرده اید. یک نقطه ورود WSGI ایجاد کردید تا هر سرور مجازی برنامه WSGI قادر به استفاده از آن باشد و سپس سرور مجازی برنامه uWSGI را برای ارائه این عملکرد پیکربندی نمودید. پس از آن ، یک فایل خدمات سیستمی ایجاد کردید تا سرور مجازی برنامه به صورت خودکار راه اندازی شود. همچنین یک بلوک سرور مجازی Nginx ایجاد کردید که ترافیک کلاینت وب را به سرور مجازی برنامه منتقل می کند ، درخواست های خارجی را منتقل می کند و با Let’s Encrypt ، سرور مجازی شما را ایمن نماید.Flask یک چارچوب بسیار ساده اما بسیار انعطاف پذیر به معنای ارائه برنامه ها با قابلیت های زیاد بدون محدودیت در ساختار و طراحی است. می توانید از خدمات پشته عمومی که در این راهنما تشریح شده است استفاده کنید تا بتوانید کاربردهای Flask را که طراحی کرده اید ارائه دهید.برچسب‌ها:Flask, Nginx, Python, uWSGI