1. 服務(wù)器的運行方式:
nignx服務(wù)器的作用:
什么是WSGI?
WSGI,全程 Web Server Gateway Interface,或者Python Web Server Gateway Interface,是為Python語言定義的Web服務(wù)器和Web 應(yīng)用程序或者框架之間的一種簡單接口.自從WSGI被開發(fā)出來以后,許多其他語言中也出現(xiàn)類似接口
WSGI就是一種標(biāo)準(zhǔn).譬如,一個德國人和一個法國人聊天,他們要想聊天可以通過過一個標(biāo)準(zhǔn)的國際語言:英語~
哪些框架自帶了WSGI Server
很多框架都自帶了WSGI Server,比如Flask,webpy,Django,CherryPy等等.當(dāng)然性能都不好,都不行,自帶的web server 更多的時候是我們測試的時候使用,發(fā)布時則使用生產(chǎn)環(huán)境的WSGI server或者聯(lián)合nginx 做 uwsgi
概念總結(jié)
WSGI是一種Web服務(wù)器網(wǎng)關(guān)接口.它是一個Web服務(wù)器(如Nginx)與應(yīng)用服務(wù)器(uWSGI服務(wù)器)通信的一種規(guī)范.
uWSGI是一個Web服務(wù)器,它實現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議.Nginx中HttpUwsgiModule的作用是與uWSGI服務(wù)器進(jìn)行交換
特別注意WSGI/uwsgi/uWSGI這三個概念的區(qū)別
1. WSGI我們已經(jīng)清楚是一種通信協(xié)議
2. uwsgi同WSGI一樣是一種通信協(xié)議
3. 而uWSGI是實現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務(wù)器
為什么有了uWSGI還需要Nginx?因為Nginx具備優(yōu)秀的靜態(tài)內(nèi)容處理能力,然后將動態(tài)內(nèi)容轉(zhuǎn)發(fā)給uWSGI服務(wù)器,這樣可以達(dá)到很好的客戶端響應(yīng)*
2.部署開始
1. 首先購買云服務(wù)器(根據(jù)自己電腦系統(tǒng)的不同,選擇不同的服務(wù)器系統(tǒng),這里使用騰訊云Ubuntu16.04)
進(jìn)入控制臺
2. 使用 ssh 用戶名@公網(wǎng)ip的方式連接遠(yuǎn)程的服務(wù)器(ubuntu服務(wù)器的默認(rèn)名稱是ubuntu)
ssh ubuntu@188.123.123.232
輸入密碼以后即可登錄
3.配置云服務(wù)器
1)更新
sudo apt update
sudo apt upgrade
2)下載pip3
sudo apt install python3-pip
3) 配置虛擬環(huán)境
# 安裝virtualenv
sudo pip3 install virtualenv
# 安裝virtualenvwrapper
sudo pip3 install virtualenvwrapper
# 配置bashrc文件
vi .bashrc
# 在bashrc文件中加入以下幾句命令
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
# 退出,并激活bashrc配置文件
source .bashrc
4)現(xiàn)在可以創(chuàng)建虛擬環(huán)境了
# 創(chuàng)建
mkvirtualenv 名稱
# 退出虛擬環(huán)境
deactivate
# 刪除虛擬環(huán)境
rmvirtualenv 名稱
5)下載mysql數(shù)據(jù)庫
sudo apt-get install mysql-server mysql-client
根據(jù)提示輸入密碼即可
選區(qū)_004.png
4.上傳項目和相關(guān)配置
---------------------------------------------
可以使用filezilla
sudo apt-get install filezilla
找到項目文件夾,填寫好遠(yuǎn)端的Host,Username,password,Port即可開始上傳
2)可以將本地運行項目的虛擬環(huán)境使用的庫同步到遠(yuǎn)端
2.1) 在本地運行項目的虛擬環(huán)境下,執(zhí)行命令
pip3 freeze > config.txt
2.2)通過filezilla上傳到服務(wù)器上,
2.3)進(jìn)入服務(wù)器創(chuàng)建的虛擬環(huán)境中,輸入命令
pip3 install -r config.txt
這樣即可配置好虛擬環(huán)境
5.配置項目部署的配置文件
5.1)在項目的目錄創(chuàng)建一個conf目錄,用來保存部署的配置文件
mkdir conf
5.2)在conf目錄下創(chuàng)建nignx.conf配置文件
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name www.long-road.cn; # substitute your machine's IP address or FQDN 遠(yuǎn)端的域名
server_name 188.131.242.174/ #你的遠(yuǎn)端服務(wù)器ip;
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/ubuntu/django_blog/media; # 指向django的media目錄
}
location /static {
alias /home/ubuntu/django_blog/static; # 指向django的static目錄
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
}
5.3)在conf目錄下創(chuàng)建uwsgi.ini配置文件
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /home/ubuntu/django_blog #chdir指向項目的目錄
# Django's wsgi file
module = blog.wsgi #module指向項目下的wsgi.py文件
# the virtualenv (full path)
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
virtualenv = /home/ubuntu/.virtualenvs/blog #虛擬環(huán)境的地址
#logto = /tmp/mylog.log
# save uwsgi's status 保存uwsgi的運行狀態(tài)
stats=%(chdir)/conf/uwsgi.status
# from restart/stop uwsgi 保存uwsgi的運行進(jìn)程號
pidfile=%(chdir)/conf/uwsgi.pid
5.4)修改項目的settings.py中的靜態(tài)文件的路徑文件
STATIC_URL = '/static/'
# 注釋掉下面的代碼
#STATICFILES_DIRS = (
# os.path.join(BASE_DIR,'static'),
#)
AUTH_USER_MODEL = 'userapp.BlogUser'
# 配置富文本的功能
MEDIA_URL = '/media/'
# 放在django項目根目錄,同時也需要創(chuàng)建media文件夾
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
CKEDITOR_UPLOAD_PATH = 'upload/'
# DRF的相關(guān)配置
# 所有跟rest framework有關(guān)的配置
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser',
],
'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 10,
}
STATIC_ROOT = os.path.join(BASE_DIR,'static/') # 配置部署時的靜態(tài)文件目錄
MEDIA_ROOT = os.path.join(BASE_DIR,'static/media/')
同時settings.py 文件中的ALLOWED_HOSTS = ["*"]和DEBUG = False
DEBUG = False # 項目上線后應(yīng)關(guān)閉debug模式
ALLOWED_HOSTS = ["*"] #應(yīng)該允許所有的ip地址可以訪問項目
5.5)安裝測試 nginx+uwsgi
安裝nginx
sudo apt-get install nginx
安裝uwsgi
pip3 install uwsgi
將conf目錄下的nginx的配置文件加入到啟動配置文件中
sudo ln -s /home/ubuntu/項目/conf/nignx.conf /etc/nginx/conf.d/
可以進(jìn)入/etc/nginx/conf.d目錄下查看是否成功
重啟nginx服務(wù)器,并查看是否運行成功
sudo service nginx restart #重啟nginx服務(wù)器
ps -aux | grep nginx # 查看nginx是否運行成功
5.6)進(jìn)入項目的虛擬環(huán)境中,收集靜態(tài)資源
python manage.py collectstatic # 收集靜態(tài)資
源文件
應(yīng)在服務(wù)器配置完成以后執(zhí)行,該命令只會執(zhí)行一次
5.7)進(jìn)入項目的conf目錄下,啟動uwsgi服務(wù)器
uwsgi -i uwsgi.ini #啟動uwsgi服務(wù)器
uwsgi --reload uwsgi.pid # 重啟uwsgi服務(wù)器