ubuntu上web項目的部署,:uwsgi, uwsgi + nginx, uwsgi+nginx分佈式部署

Ubuntu中pip和pip3區別:
pip默認給python2用,pip3默認給Python3使用

django中有runserver可以運行項目爲什麼還要部署:
因爲runserver是一個單線程的服務器,不支持多線程訪問

項目部署有三種方式:
1. uwsgi
2. uwsgi + nginx(充當靜態資源服務器和反向代理)
3. uwsgi + nginx分佈式部署(充當靜態資源服務器和負載均衡)

##########################################################################################
項目部署需要在ubuntu服務器上安裝的東西:
1. python
2. Django
3. MySQL
4. 項目依賴的庫

win需要安裝的東西:
xshell, xftp
##########################################################################################
Ubuntu:
可以先更新一下軟件包:
sudo apt-get update
1.安裝python3:
sudo apt-get instal python3
2.安裝pip3:
sudo apt-get install pip3
如果無法定位軟件包:
apt install python3-pip
3.安裝MySQL數據庫:
sudo apt-get install mysql-server
4. 安裝Django
sudo apt-get install django==1.11
5.也可以一次性安裝所有的依賴庫:
進入本機項目開發的環境下,把文件通過xftp傳送到ubuntu中:
pip freeze > requirements.txt
到ubunu的環境下:
pip3 install -r requirements.txt

6.uWSGI項目部署,uwsgi是python的一個模塊,要確保它的安裝
pip3 instal uwsgi
##########################################################################################
4. 在ubuntu上安裝xshell和xftp的服務器實現遠程訪問和文件傳輸。
ubuntu上實現遠程訪問:
1.sudo apt-get install  openssh-server
2.cd /etc/ssh
3.sudo vim sshd_config
4.修改:PermitRootLogin yes
5.重啓服務 service sshd restart
6.ifconfig  查看IP 遠程連接
7.在另一臺電腦上可以通過xsheel這樣的工具輸入ubuntu的IP和設置的root密碼即可訪問!

ubuntu上實現xftp遠程傳輸
1. sudo apt-get install vsftpd
2.cd /etc/
3.sudo vim vsftpd.conf
4.修改以下(把前面的#刪掉):
    write_enable=YES
    local_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
5.重啓服務
    service vsftpd restart
6.在另一臺電腦上可以通過xftp這樣的工具輸入ubuntu的IP和設置的root密碼即可進行文件傳輸!
##########################################################################################
一:將項目部署在uwsgi服務器上:
首先在ubuntu的主目錄下創建一個文件夾用於放置項目:
mkdir work
修改部署文件的文件夾權限chmod 777 work
將本機的整個項目壓縮成一個壓縮包通過xftp放到work文件夾下
解壓zip文件, unzip 壓縮包名,檢查項目完整性
進入項目的setting文件查看項目連接的是哪種數據庫以及數據庫名稱:more setting.py, 如果是mysql
進入Mysql: mysql -u root -p 連接接入數據庫
創建setting文件中指定的數據庫:create database 數據庫名稱 default charset 'utf8';
show databases;
use 數據庫名稱

同步數據,切換到項目主目錄下:
python manage.py makemigrations
python manage.py migrate

如果有初始數據需要先從本機數據庫的可視化工具中以SQL格式導出數據,查看的時候只需用inset語句,用於同步完遷移文件生成表後,mysql命令行執行insert語句插入原始數據

查看錶,查看插入的原始數據
select * from 表明; 查看所有的插入數據

ubuntu在主項目下創建靜態文件夾用於收集靜態文件:
mkdir static_file
使用pwd複製絕對路徑,在setting文件的靜態文件區域添加,讓django知道靜態文件應該去哪裏找:
STATIC_ROOT='將靜態文件的絕對路徑複製過來'
保存退出之後運行命令收集靜態文件:
python manage.py collectstatic

兩種項目運行方式:
1.uwsgi --http=本機Ip:port --file=shopping/wsgi.py --static-map=/static=static_file
2.uwsgi --http=本機Ip:port --file=shopping/wsgi.py --static-map=/static=static_file & 表示在後臺運行,前臺就看不到了
##########################################################################################
但是這樣運行太過繁瑣,推薦使用的方式:
在項目的主目錄下創建usigi.ini文件,通過配置所需要的選項啓動uwsig服務:
vim uwsgi.ini 
[uwsgi]
http: 192.168.37.128:8000
chdir = /home/damu/work/shopping(寫自己項目主目錄)
wsgi-file = shopping/wsgi.py(wsgi文件的路徑)
processes = 4 (開啓四個進程)
threads = 2(每個進程開啓兩個線程)
master = true
pidfile=uwsgi.pid
daemonize = uwsgi.log(記錄日誌)
static-map=/static=static_file
wq! 保存退出
運行:
uwsgi --ini uwsgi.ini
可以去usgi的官方文檔查看更詳細的配置
##########################################################################################
二:uwsgi + nginx(反向代理)項目部署
使用第一種方式對靜態文件支持不是太友好
uwsgi: 用於部署web程序應用
nginx作用: 反向代理,靜態文件服務器
使uwsgi服務器停止運行:
uwsgi --stop uwsgi.pid
檢查服務是否停止:
ps -ef|grep uwsgi

修改uwsgi.ini文件:
將http註釋掉,修改爲:
socket: 127.0.0.1:8000
static-map註釋掉
wq! 保存退出

安裝nginx:
apt-get install nginx
也可以下載nginx源代碼(nginx.tar.gz)->解壓->make & make install

1.修改nginx配置文件:
/etc/nginx/nginx.conf
添加虛擬服務器配置[server]:
    添加反向代理路由配置[location - uwsgi_pass]
    添加靜態文件服務器路由配置[location - alias]
重啓nginx
修改nginx配置文件具體步驟:
vim nginx.conf找到http{}這一個模塊,配置服務器,直接在模塊內部的最後追加:
server{
    listen 80;
    server_name 服務器ip或者域名;
    # 下面是反向代理的配置
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
    }
    # 下面是靜態文件的配置
    location / static{
        alias /home/damu/work/shopping/static_file;(前面收集的靜態文件的文件夾路徑)
    }
}
wq!保存退出
輸入nginx啓動nginx服務器
ps -ef|grep nginx 查看服務是否啓動

然後在地址欄輸入服務器Ip不需要加端口就可以直接訪問

備註:
nginx對於靜態文件的處理優於uwsgi
uwsgi對於動態請求的操作非常優秀,所以用nginx反向代理讓uwsgi處理動態請求
也可以把django項目單獨部署在nginx服務器上,但是步驟非常繁瑣
##########################################################################################

三:uwsgi + nginx 分佈式部署
當併發請求數據特別巨大的情況下,第二種部署方式就不一定能滿足!
此時就需要分佈式項目部署操作
1.單服務器模式[僞分佈式]
在一臺服務上邊用uwsgi部署多個項目或者多個相同的項目,使用nginx做靜態資源服務器和負載均衡,負載均衡就是當客戶端發來請求,負責請求的分發,發往不同的uwsgi服務器,靜態服務器直接去靜態文件查詢對應的數據,這就是一臺服務器的配置模型
先把服務器停下:
uwsgi --stop uswgi.pid

1.uwsgi.ini改造:
將uwsgi的接受請求的方式,修改爲http方式[nginx由反向代理的角色->請求分發]
進入主項目下的uwsgi.ini文件:
[uwsgi]
http = 127.0.0.1:8001
...
下面的都一樣
wq!保存
啓動項目:
uwsgi --ini uwsgi.ini

然後將同一個項目部署多份:
cp -rf shopping shopping2
然後修改shopping2中的uwsgi文件端口改爲8002
chdir最後邊改成shopping2
wq!保存
啓動項目:
uwsgi --ini uwsgi.ini


2.nginx配置
cd /etc/nginx
vim nginx.conf
在http{}中server中配置靜態文件服務器
location / static {
    alias /home/damu/work/shopping/static_file;(前面收集的靜態文件的文件夾路徑)
}

同時在nginx.conf的http中配置負載均衡:
upstream myweb {
    server ip:port;(本地ip127.0.0.1:不同的端口號)
    server ip:port;
    ...
}
http的server中:
location / {
    proxy_pass http://myweb;
}
wq!保存
退出一下nginx
nginx -s quit
再啓動nginx
nginx
使用xshell另外開兩個鏈接窗口分別進入兩個shopping項目:
tail -f uwsgi.log 命令是實時查看uwsgi.log最後10行的日誌更新。

備註:
默認情況下, nginx的負載均衡,請求輪詢發給所有的後端服務器
一般會把項目部署多份uwsgi服務器,當有內容需要更新的時候,先進入一個項目的主目錄停止一個uwsgi服務器uwsgi --stop uwsgi.pid,這時另外的uwsgi服務器是會正常工作的,更新完內容後再啓動這個服務器就會自動恢復與nginx的連接(因爲nginx一直在於後臺服務器發送心跳連接,實時監控後臺服務器的運行情況),以這樣的方式依次把所有的項目都更新完成


2.多服務器模式[分佈式集羣]
模型就是把項目部署到多臺服務器上,然後在任何一臺服務器上部署nginx都可以,只需部署一個nginx,然後修改nginx的
在uwsgi.ini的http中末尾配置負載均衡:
upstream myweb {
    server ip:port; (ip和端口寫各個服務器的IP和端口)
    server ip:port;
    ...
}

百度不同省份都有自己的nginx前端服務器
nginx + uwsgi整個稱爲web的服務端,nginx在軟件架構上稱爲前端服務器,uwsgi在軟件架構上稱爲後端服務器


##########################################################################################
uwsgi服務器的啓動:
uwsgi --ini uwsgi.ini
uwsgi服務器的停止:
uwsgi --stop uwsgi.pid

退出nginx:
nginx -s quit
啓動nginx:
nginx
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章