Ubuntu 18.04

ارائه برنامه های 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.py
from flask import Flask
app = 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: production
WARNING: 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.py
from myproject import app

if __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:app

master = true
processes = 5

هنگام آزمایش ، uWSGI را در پورت شبکه قرار داده اید. با این حال ، می توانید از Nginx برای رسیدگی به اتصالات واقعی کلاینت استفاده کنید ، که سپس درخواست ها را به uWSGI منتقل می کند. از آنجا که این مولفه ها در همان رایانه کار می کنند ، سوکت یونیکس ترجیح داده می شود زیرا سریع تر و ایمن تر است. بیایید سوکت را myproject.sock بنامیم و در این دیرکتوری قرار دهیم.
بیایید مجوزهای موجود در سوکت را نیز تغییر دهیم. بعداً به گروه Nginx مالکیت پروسه uWSGI را می دهیم ، بنابراین باید اطمینان حاصل کنیم که مالک گروه سوکت می تواند اطلاعاتی را از آن بخواند و برای آن بنویسد. ما همچنین با اضافه کردن گزینه vacuum ، سوکت را تمیز کنیم:
~/myproject/myproject.ini
[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

آخرین کاری که انجام خواهیم داد اینست که گزینه die-on-term  را تنظیم کنیم. این می تواند اطمینان حاصل کند که سیستم init و uWSGI پیش فرض های یکسانی در مورد معنی هر سیگنال فرآیند دارند. تنظیم این دو مؤلفه سیستم ، رفتار مورد انتظار را اجرا می کند:
~/myproject/myproject.ini
[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

die-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 myproject
After=network.target

سپس ، اجازه دهید بخش [Service] را باز کنیم. با این کار کاربر و گروهی را که می خواهیم تحت روند کار قرار بگیرند مشخص می کند. بیایید مالکیت این فرآیند را به حساب کاربری معمول خود بدهیم زیرا این فایل در اختیار همه فایل های مربوطه است. همچنین بیایید مالکیت گروه را به گروه www-data واگذار کنیم تا Nginx بتواند به راحتی با فرآیندهای uWSGI ارتباط برقرار کند. به یاد داشته باشید که نام کاربری خود را در اینجا جایگزین کنید:
/etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=sammy
Group=www-data

در مرحله بعدی ، بگذارید دیرکتوری کار را مشخص کنیم و متغیر محیطی PATH را تنظیم کنیم تا سیستم اولیه بداند که موارد اجرایی این فرآیند در محیط مجازی ما قرار دارند. بیایید فرمان شروع سرویس را نیز مشخص کنیم. Systemd نیاز دارد که ما مسیر کامل را به uWSGI قابل اجرا که در محیط مجازی ما نصب شده است ، واگذار کنیم. نام فایل پیکربندی .ini را که در دیرکتوری پروژه خود ایجاد کرده ایم ، ارسال خواهیم کرد.
به یاد داشته باشید که نام کاربری و مسیر پروژه را با اطلاعات شخصی خود جایگزین کنید:
/etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment=”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 myproject
After=network.target

[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment=”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 myproject
Loaded: loaded (/etc/systemd/system/myproject.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-07-13 14:28:39 UTC; 46s ago
Main 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/myproject
server {
listen 80;
server_name your_domain www.your_domain;
}

سپس ، بیایید یک بلوک موقعیت مکانی اضافه کنیم که مطابق با هر درخواست باشد. در این بلوک ، فایل uwsgi_params را وارد خواهیم کرد که پارامترهای کلی UWSGI مورد نیاز برای تنظیم را مشخص می کند. سپس درخواستها را به سوکت تعریف شده با استفاده از بخشنامه uwsgi_pass ارسال خواهیم کرد:
/etc/nginx/sites-available/myproject
server {
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 خود را چگونه پیکربندی کنید.
Output
Please 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 for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration.
——————————————————————————-
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):

انتخاب خود را مشخص کنید و سپس ENTER بزنید. پیکربندی به روز خواهد شد ، و Nginx مجدد لود می شود تا تنظیمات جدید را انتخاب کند. certbot با پیغامی همراه خواهد بود که به شما می گوید روند موفقیت آمیز بوده و گواهی نامه های شما در کجا ذخیره شده است:
Output
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2018-07-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the “certonly” option. To non-interactively renew *all* of
your certificates, run “certbot renew”
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making 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/donate
Donating 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 را که طراحی کرده اید ارائه دهید.

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

چگونه به Ubuntu 20.04 Focal Fossa ارتقا دهید

نحوه ایجاد نماها (Views) برای توسعه وب Django

نصب Mount NFS در اوبونتو 20.04

نحوه توسعه برنامه ها در Kubernetes با Okteto

نصب و پیکربندی Laravel با Nginx در اوبونتو 20.04

نحوه تنظیم Jupyter Notebook با پایتون در Ubuntu 20.04

نصب Jitsi Meet در Debian 10

نصب و پیکربندی Nextcloud در اوبونتو 20.04

نصب و پیکربندی Ansible در اوبونتو 20.04

مقدمه ای بر مدیریت پیکربندی با Ansible

نحوه نصب R روی اوبونتو 20.04

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

نصب و پیکربندی Postfix در اوبونتو 20.04

 

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان – 


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/