ارائه برنامه هاي 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 “
Hello There!
”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
نصب و پيكربندي Nextcloud در اوبونتو 20.04
نصب و پيكربندي Ansible در اوبونتو 20.04
مقدمه اي بر مديريت پيكربندي با Ansible
ارائه برنامه هاي Flask با uWSGI و Nginx در اوبونتو 18.04
نصب و پيكربندي Postfix در اوبونتو 20.04
خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريكا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –
برچسبها:Flask, Nginx, Python, uWSGI
برچسب: ،