server





در اين راهنما يک برنامه 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 ارزان – 


 




برچسب‌ها:




در اين راهنما يک برنامه Python را با استفاده از ميکروفريم Flask در Ubuntu 20.04 ايجاد خواهيد کرد. بخش عمده اين مقاله در مورد نحوه تنظيم سرور برنامه Gunicorn و نحوه راه اندازي و پيکربندي برنامه Nginx براي عمل به عنوان يک پروکسي مع front-end خواهد بود.
پيش نيازها
قبل از شروع اين راهنما ، بايد اين موارد را داشته باشيد:
سروري با اوبونتو 20.04 و يک کاربر غير ريشه با امتيازات sudo. براي راهنمايي ، مقاله ستاپ اوليه سرور ما را دنبال کنيد.
? Nginx نصب شده داشته باشيد، مراحل 1 و 2 نحوه نصب Nginx در اوبونتو 20.04 را دنبال کنيد.
? نام دامنه پيکربندي شده براي اشاره به سرور شما. مي توانيد در Namecheap خريداري کنيد يا يکي از آنها را به صورت رايگان در Freenom دريافت کنيد. حتماً رکورهاي DNS زير را ايجاد کنيد:
o يک رکورد A با your_domain که به آدرس IP عمومي سرور شما اشاره مي کند.
o يک رکورد A با www.your_domain که به آدرس IP عمومي سرور شما اشاره کند.
? آشنايي با مشخصات WSGI ، که سرور برنامه Gunicorn براي ارتباط با برنامه Flask از آن استفاده خواهد کرد . اين بحث به تفصيل به تعاريف و مفاهيم مي پردازد.
مرحله 1 – نصب مولفه ها از مخازن اوبونتو
اولين قدم ما نصب تمام بخش هاي مورد نياز از مخازن اوبونتو خواهد بود. اين موارد شامل pip ، مدير بسته پايتون براي مديريت مولفه هاي پايتون خواهد بود. همچنين فايل هاي توسعه پايتون لازم براي ساخت برخي مولفه هاي Gunicorn دريافت خواهيم کرد.
ابتدا ، اجازه دهيد ايندکس بسته محلي را به روز کنيم و بسته هايي را نصب کنيم که به ما امکان مي دهد محيط 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 -m venv myprojectenv
?
با اين کار يک کپي محلي از Python و pip در ديرکتوري به نام myprojectenv درون ديرکتوري پروژه شما کپي ميشود.
قبل از نصب برنامه ها در محيط مجازي ، بايد آن را فعال کنيد. اين کار را با تايپ کردن دستور زير انجام دهيد:
? $ source myprojectenv/bin/activate
?
اعلان شما تغيير مي کند و نشان مي دهد که اکنون در محيط مجازي کار مي کنيد. چيزي شبيه به (myprojectenv)user@host:~/myproject$ به نظر مي رسد .
مرحله 3 – تنظيم يک برنامه Flask
اکنون که در محيط مجازي خود قرار داريد ، مي توانيد Flask و Gunicorn را نصب کرده و طراحي برنامه خود را شروع کنيد.
ابتدا بگذاريد wheel  را با نمونه محلي pip نصب کنيم تا اطمينان حاصل شود که بسته هاي ما حتي در صورت از دست دادن بايگاني wheel ، نصب مي شوند:
? $ pip install wheel
?


توجه داشته باشيد
صرفنظر از اينکه از کدام نسخه Python استفاده مي کنيد ، هنگامي که محيط مجازي فعال مي شود ، بايد از دستور pip استفاده کنيد (نه pip3)
سپس ، اجازه دهيد Flask و Gunicorn را نصب کنيم:
? (myprojectenv) $ pip install gunicorn 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
در مرحله بعدي ، فايلي را ايجاد ميکنيم که به عنوان نقطه ورود برنامه ما باشد. اين به سرور Gunicorn مي گويد که چگونه مي توان با آن تعامل برقرار کرد.
بياييد فايل wsgi.py را فراخواني کنيم:
? (myprojectenv) $ nano ~/myproject/wsgi.py
?


در اين فايل ، بياييد نمونه Flask را از برنامه خود وارد کنيم و سپس آن را اجرا کنيم:
~/myproject/wsgi.py
from myproject import app


if __name__ == “__main__”:
app.run()


پس از اتمام فايل را ذخيره کنيد و ببنديد.
مرحله 4 – پيکربندي Gunicorn
برنامه شما اکنون با يک نقطه ورود مشخص نوشته شده است. اکنون مي توانيم به سراغ پيکربندي Gunicorn برويم.
قبل از پيش روي، بايد بررسي کنيم که Gunicorn ميتواند به درستي برنامه را ارائه کند.
ما مي توانيم اين کار را به سادگي با وارد کردن نام نقطه ورودي خود انجام دهيم. اين نام با نام ماژول ساخته شده است (منهاي پسوند .py) به علاوه نام قابل فراخواني درون برنامه. در نمونه ما ، wsgi:app است.
رابط و پورت را نيز مشخص مي کنيم تا برنامه در يک رابط در دسترس عمومي شروع شود:
? (myprojectenv) $ cd ~/myproject
?
? (myprojectenv) $ gunicorn –bind 0.0.0.0:5000 wsgi:app
?
?
بايد خروجي زير را مشاهده کنيد
Output
[2020-05-20 14:13:00 +0000] [46419] [INFO] Starting gunicorn 20.0.4
[2020-05-20 14:13:00 +0000] [46419] [INFO] Listening at: http://0.0.0.0:5000 (46419)
[2020-05-20 14:13:00 +0000] [46419] [INFO] Using worker: sync
[2020-05-20 14:13:00 +0000] [46421] [INFO] Booting worker with pid: 46421


آدرس IP سرور خود را به همراه 5000 در ادامه اش بازديد کنيد
http: // your_server_ip: 5000
بايد دوباره خروجي برنامه خود را مشاهده کنيد:


وقتي تأييد کرديد که به درستي کار ميکند ، CTRL-C را در پنجره ترمينال خود فشار دهيد.
اکنون محيط مجازي خود را ايجاد کرده ايم ، بنابراين مي توانيم آن را غيرفعال کنيم:
? (myprojectenv) $ deactivate
?


هر دستور پايتون اکنون دوباره از محيط پايتون سيستم استفاده خواهد کرد.
در مرحله بعد بياييد فايل واحد سرويس سيستمي را ايجاد کنيم. ايجاد فايل واحد سيستمي به سيستم init  اوبونتو اجازه خواهد داد که به طور خودکار Gunicorn  را شروع کند و برنامه Flask  را در زمان بوت سرور ارائه نمايد.
براي شروع يک فايل واحد که به .serviceختم ميشود در ديرکتوري /etc/systemd/systemايجاد کنيد:
? $ sudo nano /etc/systemd/system/myproject.service
?


در داخل ، با بخش [unit ] شروع خواهيم کرد که براي تعيين متاديتا و متعلقات استفاده ميشود. بياييد توصيفي از سرويس را در اينجا قرار دهيم و به سيتم init بگوييم فقط پس از دستيابي به هدف شبکه شروع شود:
/etc/systemd/system/myproject.service
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target


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


[Service]
User=sammy
Group=www-data


در مرحله بعدي ، بگذاريد ديرکتوري کار را مشخص کنيم و متغير محيطي PATH را تنظيم کنيم تا سيستم init بداند که موارد اجرايي اين فرآيند در محيط مجازي ما قرار دارند. اجازه دهيد فرمان شروع سرويس را نيز مشخص کنيم. فرمان موارد زير را انجام ميدهد:
? 3 فرآيند کارگر را شروع ميکند (اگرچه لازم است اين بخش را در صورت وم تنظيم کنيد)
? يک فايل سوکت يونيکس myproject.sock ، در ديرکتوري پروژه ما ايجاد کرده و به آن وصل ميشود. ما يک مقدار umask 007 تنظيم مي کنيم تا فايل سوکت ايجاد شود و دسترسي به مالک و گروه را ايجاد کند در حاليکه دسترسي ديگر را محدود مي کند .
? نام فايل نقطه ورود WSGI را به همراه پايتون قابل فراخواني در آن فايل مشخص ميکند (wsgi: app)
Systemd مستم اين است که ما مسير کاملي را به Gunicorn ، که در محيط مجازي ما نصب شده است ، بدهيم.
به ياد داشته باشيد که نام کاربري و مسير پروژه را با اطلاعات شخصي خود جايگزين کنيد:
/etc/systemd/system/myproject.service
[Unit]
Description=Gunicorn 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/gunicorn –workers 3 –bind unix:myproject


در آخر ، بياييد يک بخش [Install] اضافه کنيم. اگر سيستم را فعال کنيم که در بوت شروع شود ، به systemd ميگويد که به اين سرويس چه چيزي را لينک بدهد. نياز داريم اين سرويس در زمان اجراي سيستم معمولي چند کاربره شروع به کار کند:
/etc/systemd/system/myproject.service
[Unit]
Description=Gunicorn 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/gunicorn –workers 3 –bind unix:myproject.sock -m 007 wsgi:app


[Install]
WantedBy=multi-user.target


با اين کار ، فايل سرويس سيستمي ما کامل است. اکنون آن را ذخيره کنيد و ببنديد.
اکنون مي توانيم سرويس Gunicorn را که ايجاد کرديم شروع کنيم و آن را فعال کنيم تا در بوت شروع شود:
? $ sudo systemctl start myproject
?
? $ sudo systemctl enable myproject


بگذاريد وضعيت را بررسي کنيم:
? $ sudo systemctl status myproject
?
بايد خروجي مانند اين را مشاهده کنيد:
Output
? myproject.service – Gunicorn instance to serve myproject
Loaded: loaded (/etc/systemd/system/myproject.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-05-20 14:15: UTC; 1s ago
Main PID: 46430 (gunicorn)
Tasks: 4 (limit: 2344)
Memory: 51.3M
CGroup: /system.slice/myproject.service
??46430 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn –workers 3 –bind unix:myproject.sock -m 007 wsgi:app
??46449 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn –workers 3 –bind unix:myproject.sock -m 007 wsgi:app
??46450 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn –workers 3 –bind unix:myproject.sock -m 007 wsgi:app
??46451 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn –workers 3 –bind unix:myproject.sock -m 007 wsgi:app


در صورت مشاهده هر گونه خطا ، حتما آنها را قبل از ادامه آموزش برطرف کنيد.
مرحله 5 – پيکربندي Nginx به درخواستهاي پروکسي
سرور برنامه Gunicorn ما بايد اکنون به روز و در حال اجرا و منتظر درخواست هايي روي فايل سوکت در ديرکتوري پروژه باشد. بياييد Nginx را پيکربندي کنيم تا درخواست هاي وب را با استفاده از پروتکل Gunicorn به آن سوکت منتقل کنيم.
با ايجاد يک فايل پيکربندي بلوک جديد سرور در ديرکتوري 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;
}


سپس ، بياييد يک بلوک موقعيت مکاني اضافه کنيم که مطابق با هر درخواست باشد. در اين بلوک ، فايل proxy_params را وارد خواهيم کرد که پارامترهاي کلي پروکسي مورد نياز براي تنظيم را مشخص مي کند. سپس درخواستها را به سوکت تعريف شده با استفاده از بخشنامه proxy _pass ارسال خواهيم کرد:
/etc/nginx/sites-available/myproject
server {
listen 80;
server_name your_domain www.your_domain;


location / {
include proxy_params;
proxy_pass http://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 ورود هاي GUNICORN برنامه Flask شما را بررسي مي کند.
مرحله 6 – امنيت بخشي به برنامه
براي اطمينان از ايمن ماندن ترافيک رو به سرور شما ، اجازه دهيد يک گواهي SSL براي دامنه تان دريافت کنيم. روش هاي مختلفي براي اين کار وجود دارد ، از جمله دريافت گواهينامه رايگان از Let’s Encrypt ، توليد يک گواهي خود امضا شده يا خريد از ارائه دهنده ديگر و پيکربندي Nginx براي استفاده از آن با دنبال کردن مراحل 2 تا 6 نحوه ايجاد يک گواهي SSL خود امضا شده براي Nginx در اوبونتو 20.04. بنابر صلاح ديد ، گزينه ي اول را انتخاب ميکنيم.
ابتدا بسته Certbot Nginx را نصب کنيد:
? $ sudo apt install python3-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 2020-08-. 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 قادر به استفاده از آن باشد و سپس سرور برنامه Gunicorn را براي ارائه اين عملکرد پيکربندي نموديد. پس از آن ، يک فايل سرويس سيستمي ايجاد کرديد تا سرور برنامه در زمان بوت به صورت خودکار راه اندازي شود. همچنين يک بلوک سرور Nginx ايجاد کرديد که ترافيک کلاينت وب را به سرور برنامه منتقل مي کند ، درخواست هاي خارجي را منتقل مي کند و با Let’s Encrypt ، سرور شما را ايمن نمايد.
Flask يک چارچوب بسيار ساده اما بسيار انعطاف پذير به معناي ارائه برنامه ها با قابليت هاي زياد بدون محدوديت در ساختار و طراحي است. مي توانيد از خدمات پشته عمومي که در اين راهنما تشريح شده است استفاده کنيد تا بتوانيد کاربردهاي Flask را که طراحي کرده ايد ارائه دهيد.


نحوه ارائه برنامه هاي کاربردي فلاش با Gunicorn و Nginx در اوبونتو 20.04
مقدمه
در اين راهنما يک برنامه Python را با استفاده از ميکروفون Flask در Ubuntu 20.04 ايجاد خواهيد کرد. بخش عمده اين مقاله در مورد نحوه تنظيم سرور برنامه Gunicorn و نحوه راه اندازي برنامه و پيکربندي Nginx براي عمل به عنوان يک پروکسي مع جلويي خواهد بود.
پيش نيازها
قبل از شروع اين راهنما ، بايد اين موارد را داشته باشيد:
• سروري با اوبونتو 20.04 نصب شده و يک کاربر غير ريشه با امتيازات sudo. براي راهنمايي ، راهنماي تنظيم اوليه سرور ما را دنبال کنيد.
• Nginx نصب شده ، مراحل زير 1 و 2 نحوه نصب Nginx در اوبونتو 20.04 را دنبال کنيد.
• نام دامنه پيکربندي شده براي اشاره به سرور شما. مي توانيد يکي از آنها را در Namecheap خريداري کنيد يا يکي از آنها را به صورت رايگان در Freenom دريافت کنيد. با دنبال کردن مستندات مربوط به دامنه ها و DNS مي توانيد ياد بگيريد که چگونه دامنه ها را به DigitalOcean نشان دهيد. حتماً سوابق DNS زير را ايجاد کنيد:
o يک ضبط با your_domain که به آدرس IP عمومي سرور شما نشان مي دهد.
o ضبط با www.your_domain که به آدرس IP عمومي سرور شما نشان مي دهد.
• آشنايي با مشخصات WSGI ، که سرور Gunicorn براي ارتباط با برنامه Flask شما استفاده خواهد کرد. اين بحث WSGI را با جزئيات بيشتري پوشش مي دهد.
مرحله 1 – نصب قطعات از مخازن اوبونتو
اولين قدم ما نصب تمام قطعات مورد نياز از مخازن اوبونتو خواهد بود. اين شامل پيپ ، مدير بسته پايتون است که اجزاي پايتون ما را مديريت مي کند. ما همچنين پرونده هاي توسعه پايتون را براي ساختن برخي از اجزاي Gunicorn لازم دريافت خواهيم کرد.
ابتدا ، اجازه دهيد شاخص بسته محلي را به روز کنيم و بسته هايي را نصب کنيم که به ما امکان مي دهد محيط Python خود را بسازيم. اين موارد شامل python3-pip ، همراه با چند بسته ديگر و ابزار توسعه لازم براي يک محيط برنامه نويسي قوي است:
با استفاده از اين بسته ها ، به سمت ايجاد يک فضاي مجازي براي پروژه خود برويم.
مرحله 2 – ايجاد يک محيط مجازي پايتون
در مرحله بعدي ، ما يک محيط مجازي تنظيم خواهيم کرد تا بتوانيم برنامه Flask خود را از ساير پرونده هاي Python روي سيستم جدا کنيم.
با نصب بسته python3-venv که ماژول venv را نصب خواهد کرد شروع کنيد:
در مرحله بعد ، بياييد يک دايرکتوري والدين براي پروژه Flask تهيه کنيم. بعد از ايجاد آن وارد پوشه شويد:
يک محيط مجازي ايجاد کنيد تا نيازهاي پايتون پروژه Flask خود را با تايپ کردن ذخيره کنيد:
با اين کار يک کپي محلي از Python نصب مي شود و به پوشه اي به نام myprojectenv درون فهرست پروژه شما مي پيوندد.
قبل از نصب برنامه ها در محيط مجازي ، بايد آن را فعال کنيد. اين کار را با تايپ کردن انجام دهيد:
اعلان شما تغيير مي کند و نشان مي دهد که اکنون در محيط مجازي کار مي کنيد. چيزي شبيه به اين خواهد بود: (myprojectenv) user @ host: ~ / myproject $.
مرحله 3 – تنظيم يک برنامه فلاسک
اکنون که در محيط مجازي خود قرار داريد ، مي توانيد Flask و Gunicorn را نصب کنيد و در طراحي برنامه خود شروع کنيد.
ابتدا بگذاريد چرخ را با نمونه محلي پيپ نصب کنيم تا اطمينان حاصل شود که بسته هاي ما حتي در صورت وجود بايگاني چرخ هاي چرخي نصب نمي شوند:
توجه داشته باشيد
صرفنظر از اينکه از کدام نسخه Python استفاده مي کنيد ، هنگامي که محيط مجازي فعال مي شود ، بايد از دستور pip استفاده کنيد (نه pip3).


بعد ، اجازه دهيد Flask و Gunicorn را نصب کنيم:
ايجاد يک برنامه نمونه
اکنون که Flask را در دسترس داريد ، مي توانيد يک برنامه ساده ايجاد کنيد. فلاسک يک ميکرو فريم ورک است. اين شامل بسياري از ابزارهايي نيست که ممکن است چهارچوبهاي کامل تري داشته باشند ، و عمدتاً به عنوان ماژول وجود دارد که مي توانيد براي شروع برنامه هاي وب به شما کمک کنند تا بتوانيد به پروژه هاي خود وارد شويد.
در حالي که ممکن است برنامه شما پيچيده تر باشد ، ما برنامه Flask خود را در يک پرونده واحد با نام myproject.py ايجاد خواهيم کرد:
کد برنامه در اين پرونده زندگي مي کند. اين فلاسک را وارد مي کند و يک شيء فلاسک را فوراً مي کند. شما مي توانيد از اين کار براي تعريف کارکردهايي استفاده کنيد که بايد هنگام درخواست يک مسير خاص انجام شود:
اين اساساً مشخص مي کند که هنگام دستيابي به حوزه root ، چه محتوايي ارائه شود. پس از اتمام پرونده را ذخيره و بسته کنيد.
اگر راهنماي اوليه تنظيم سرور را دنبال کرديد ، بايد فايروال UFW را فعال کنيد. براي تست برنامه ، بايد دسترسي به درگاه 5000 را داشته باشيد:
اکنون مي توانيد برنامه Flask خود را با تايپ کردن تست کنيد:
خروجي مانند موارد زير را مشاهده خواهيد کرد ، از جمله يک هشدار مفيد که به شما يادآوري مي کند از اين تنظيم سرور در توليد استفاده نکنيد:
به آدرس IP سرور خود مراجعه کنيد و به دنبال آن: 5000 در مرورگر وب خود:
http: // your_server_ip: 5000
شما بايد چيزي شبيه به اين را ببينيد:
پس از اتمام ، CTRL-C را در پنجره ترمينال خود بزنيد تا سرور توسعه Flask متوقف شود.
ايجاد نقطه ورود WSGI
در مرحله بعدي ، بگذاريد فايلي را ايجاد کنيم که به عنوان نقطه ورود برنامه ما باشد. اين به سرور Gunicorn ما مي گويد که چگونه با برنامه ارتباط برقرار کنيد.
بياييد با پرونده wsgi.py تماس بگيريم:
در اين پرونده ، اجازه دهيد نمونه Flask را از برنامه ما وارد کنيم و سپس آن را اجرا کنيم:
پس از اتمام پرونده را ذخيره و بسته کنيد.
مرحله 4 – پيکربندي Gunicorn
برنامه شما اکنون با يک نقطه ورود تأسيس نوشته شده است. ما ميتوانيم
اکنون به پيکربندي Gunicorn برويد.
قبل از حرکت ، بايد بررسي کنيم که Gunicorn مي تواند به درستي برنامه را ارائه دهد.
ما مي توانيم اين کار را با ساده تر کردن نام ورودي خود انجام دهيم. اين به عنوان نام ماژول ساخته شده است (منهاي پسوند .py) ، به علاوه نام تماس گيرنده درون برنامه. در مورد ما ، اين wsgi است: برنامه.
ما همچنين مي خواهيم رابط و پورت را به هم متصل کنيم تا برنامه در يک رابط در دسترس عمومي شروع شود:
شما بايد خروجي مانند موارد زير را ببينيد:
آدرس IP سرور خود را با بازديد کنيد: 5000 بار ديگر در پايان در مرورگر وب خود اضافه کنيد:
http: // your_server_ip: 5000
بايد خروجي برنامه خود را مشاهده کنيد:
وقتي تأييد کرد که عملکرد مناسب دارد ، CTRL-C را در پنجره ترمينال خود فشار دهيد.
ما اکنون با محيط مجازي خود انجام داده ايم ، بنابراين مي توانيم آن را غيرفعال کنيم:
هر دستور پايتون اکنون دوباره از محيط پايتون سيستم استفاده خواهد کرد.
در مرحله بعدي ، بياييد پرونده واحد خدمات سيستم شده را ايجاد کنيم. ايجاد يک فايل واحد سيستمي به سيستم اوليه Ubuntu اجازه مي دهد تا هر زمان که سرور بوت شود ، Gunicorn را به طور خودکار شروع کرده و به برنامه Flask سرويس دهد.
براي شروع يک فايل واحد که در قسمت service استفاده مي شود در فهرست / etc / systemd / system ايجاد کنيد:
در داخل ، ما با بخش [Unit] شروع خواهيم کرد ، که براي مشخص کردن ابرداده و وابستگي ها استفاده مي شود. بياييد شرح خدمات خود را در اينجا قرار دهيم و به سيستم init بگوييم که فقط پس از رسيدن به هدف شبکه ، اين کار را شروع مي کند:


 


 




برچسب‌ها:


آخرین ارسال ها

آخرین جستجو ها


فردایی روشن 100764098 وب کلیپ بانک لینک های دانلود فیلم ، دانلود سریال و دانلود آهنگ میباشد. حسابداری AC30 و حسابر30، پایان نامه، از هنرستان تا دانشگاه luemardekind neginerline frektaletart قلب قلم neginkavirest رژیم غذایی و تناسب اندام ایرانی