در اين راهنما يک برنامه Python را با استفاده از ميکروفريم Flask در Ubuntu .04 ايجاد خواهيد کرد. بخش عمده اين مقاله در مورد نحوه تنظيم سرور مجازي برنامه uWSGI و نحوه راه اندازي و پيکربندي برنامه Nginx براي عمل به عنوان يک پروکسي مع front-end خواهد بود.
پيش نيازها
قبل از شروع اين راهنما ، بايد اين موارد را داشته باشيد:
سرور مجازي با اوبونتو .04 و يک کاربر غير ريشه با امتيازات sudo. براي راهنمايي ، مقاله ستاپ اوليه سرور مجازي ما را دنبال کنيد.
? Nginx نصب شده داشته باشيد، مراحل 1 و 2 نحوه نصب Nginx در اوبونتو .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 20-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 در اوبونتو .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 20-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 در اوبونتو .04


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


 


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