linux项目部署(非前后端分离crm)
參考博客
參考博客2---部署過程
導論:看參考博客1
WSGI是Web服務器網關接口。它是一個規(guī)范,描述了Web服務器如何與Web應用程序通信,以及Web應用程序如何鏈接在一起以處理一個請求,(接收請求,處理請求,響應請求)
一.crm項目部署(非前后端分離項目)
1.項目部署技術棧
nginx + uwsgi + django + 虛擬環(huán)境 + supervisor + mysql
2.面試題1
django的啟動方式 python3 manage.py runserver 為什么不能在生產環(huán)境用? django只是一個web邏輯框架,它通過python3 manage.py runserver命令啟動的socket服務端 是借助python內置的wsgi框架 wsgiref框架實現的 wsgi是一個單機模塊,單進程模塊,性能很低,用wsgi來啟動一個多線程、多進程的項目是不合適的 因此在線上需要借助通過c語言編寫的uwsgi這個web服務器軟件,啟動django
uwsgi支持多進程 多線程的方式,性能很高,啟動django性能更好,但是uwsgi不解析django的靜態(tài)文件
3.面試題2
為什么要用nginx 和uwsgi? nginx 可以解決uwsgi的靜態(tài)文件問題,并且支持高并發(fā)請求,還能限流,保障后臺服務器安全等等 為什么要用uwsgi 因為uwsgi支持多進程 多線程的方式,性能很高,啟動django性能更好,但是uwsgi不解析django的靜態(tài)文件 我們以后會收集所有的django項目靜態(tài)文件,丟給nginx去處理
4.準備crm代碼
5.進入第一層路徑,查看wsgi.py文件
vim wsgi.py 從這個文件可以看出是調用django的wsgi,獲取函數get_wsgi_application 然后通過調用這個函數生成一個application對象 在進行uwsgi啟動django的時候,是需要找到wsgi.py這個文件模塊的 如果你報錯提示 找不到application ,就是因為uwsgi 找不到wsgi.py
6.創(chuàng)建虛擬環(huán)境
準備一個新的虛擬環(huán)境,去啟動crm,使用virtualenvwrapper創(chuàng)建新的虛擬環(huán)境
virtualenvwrapper工具的命令
1.創(chuàng)建新的虛擬環(huán)境
mkvirtualenv mycrm
2.切換多個虛擬環(huán)境
workon 虛擬環(huán)境的名字
3.列出所有的虛擬環(huán)境目錄
lsvirtualenv
4.進入當前激活的虛擬環(huán)境的目錄
cdvirtualenv
View Code
1.解決虛擬環(huán)境依賴的問題,也就是保障本地開發(fā)環(huán)境和線上一致性的問題
在windows本地 通過cmd窗口輸入
pip3 freeze > requirements.txt
#就能將python3解釋器中所有的模塊導出到requirements.txt這個文件中
2.將這個 requirements.txt 文件傳輸到服務器上,虛擬環(huán)境下進行安裝,就可以自動解決所有模塊問題
pip3 install -r requirements.txt
7.虛擬環(huán)境下安裝uwsgi
確保進入虛擬環(huán)境,然后安裝uwsgi workon nginx_crm 下載uwsgi pip3 install uwsgi
8.使用uwsgi命令啟動django項目以及熱加載
uwsgi支持熱加載的啟動方式命令如下
uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1
uwsgi啟動django項目的命令如下:
uwsgi --http :8088 --module Crm_Project.wsgi
--http指定http協(xié)議啟動在 8088端口
--module 找到項目第二層的目錄,里面的wsgi.py文件
如果你想啟動一個http頁面,提供測試訪問,就用--http參數
如果你結合了nginx反向代理,必須用--socket參數
uwsgi --socket :8000 --module Crm_Project.wsgi
9.uwsgi.ini配置文件的引入
由于參數過多,這里引入配置文件的概念 叫做 uwsgi.ini 這個文件放在項目的第一層路徑下 啟動crm的配置文件如下 uwsgi.ini內容如下 [uwsgi] # Django-related settings # the base directory (full path) #填寫項目的絕對路徑(第一層路徑) chdir = /opt/Crm_Project # Django's wsgi file #填寫crm第二層目錄下的wsgi.py文件的路徑 module = Crm_Project.wsgi # the virtualenv (full path) #填寫虛擬環(huán)境的絕對路徑 home = /root/Envs/nginx_crm # process-related settings # master master = true # maximum number of worker processes #基于uwsgi的多進程,根據cpu來優(yōu)化 processes = 4 # the socket (use the full path to be safe #如果你用了nginx反向代理,就填寫socket參數 #如果你用了nginx反向代理,就填寫socket參數 #如果你用了nginx反向代理,就填寫socket參數 #如果你用了nginx反向代理,就填寫socket參數 #如果你用了nginx反向代理,就填寫socket參數 socket = 0.0.0.0:8000 #如果你沒用nginx,想直接通過瀏覽器測試后端,使用http #http = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
uwsgi支持ini、xml等多種配置方式,本文以 ini 為例, 在/etc/目錄下新建uwsgi_nginx.ini,添加如下配置: # mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /opt/mysite # Django's wsgi file module = mysite.wsgi # the virtualenv (full path) home = /opt/venv # process-related settings # master master = true # maximum number of worker processes processes = 1 # the socket (use the full path to be safe socket = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true uwsgi.ini
uwsgi.ini
10.此時通過uwsgi --ini uwsgi.ini方式啟動代碼
11.django的靜態(tài)文件與nginx配置
虛擬環(huán)境下 編輯項目的settings.py 寫入如下參數 STATIC_ROOT= '/opt/crmstatic'
12.執(zhí)行命令,收集crm所有的靜態(tài)文件
命令如下 python3 manage.py collectstatic
#此時后端的配置完畢!!!!開始搞nginx
#此時后端的配置完畢!!!!開始搞nginx
#此時后端的配置完畢!!!!開始搞nginx
#此時后端的配置完畢!!!!開始搞nginx
#此時后端的配置完畢!!!!開始搞nginx
13.配置nginx,一是支持反向代理,二是支持靜態(tài)文件加載
配置nginx,一是支持反向代理,二是支持靜態(tài)文件加載
修改nginx.conf
代碼如下
#當用戶訪問 www.s18dnf.com的時候,就進入這個虛擬主機
location / {
uwsgi_pass 0.0.0.0:8000; #8000為django運行的端口
include uwsgi_params; #固定寫法
}
#這個location是解決crm的靜態(tài)文件的問題的
location /static {
#alias參數 就是將/static轉化為/opt/crmstatic ,也就找到了我們所有的靜態(tài)文件
alias /opt/crmstatic; #這里的crmstatic就是STATIC_ROOT= '/opt/crmstatic'這個
}
14.重啟nginx,由于有熱加載,項目已經啟動
15.批量管理軟件的啟停supervisor
supervisor 是基于 python 的任務管理工具,用來自動運行各種后臺任務,當然你也能直接利用 nohup 命令使任務自動后臺運行,但如果要重啟任務,每次都自己手動 kill 掉任務進程,這樣很繁瑣,
而且一旦程序錯誤導致進程退出的話,系統(tǒng)也無法自動重載任務。
16.安裝supervisor
在非虛擬環(huán)境下安裝supervisor supervisor只能用python2來安裝,不能用python3來安裝
1.安裝easy_install pip3是python3的軟件包管理工具 easy_install 是python2的軟件包管理工具 yum install python-setuptools 2.安裝supervisor easy_install supervisor
17.supervisor的配置文件
1.創(chuàng)建supervisor的配置文件,在項目第一層路徑下面輸入下面代碼
echo_supervisord_conf > /etc/supervisor.conf
2.修改supervisor的配置文件,添加啟動uwsgi的命令
supervisor其實就是幫咱們執(zhí)行了,需要手動執(zhí)行的命令而已
vim /etc/supervisor.conf
寫入如下內容,在最底部寫
[program:s18crm]
command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.ini
stopasgroup=true
killasgroup=true
18.測試用supervisor啟動uwsgi
測試用supervisor啟動uwsgi ,注意要確保此時uwsgi已經退出
.測試用supervisor啟動uwsgi ,注意要確保此時uwsgi已經退出
.測試用supervisor啟動uwsgi ,注意要確保此時uwsgi已經退出
.測試用supervisor啟動uwsgi ,注意要確保此時uwsgi已經退出
虛擬環(huán)境下,輸入下面兩條命令
supervisord -c /etc/supervisor.conf #這是啟動supervisor服務端命令
supervisorctl -c /etc/supervisor.conf #這是supervisor客戶端管理命令
學習supervisor的命令
status s18crm #查看狀態(tài) #s18crm來自[program:s18crm]
start s18crm #啟動任務
stop s18crm #停止任務
start all
stop all #啟停所有的任務
1.crm部署 nginx + uwsgi + django + mysql
crm是一個單體的應用,前端代碼和后端代碼,融合在了一起
linux默認終端有7個
按住ctrl + alt 從 f1-f7是7個終端 f1是圖形化終端,f2-f7是黑屏
我們用的是xshell遠程連接,連接到linux,可以有N個終端
1.先去啟動后端,uwsgi + django
2.先準備項目 xftp lrzsz
3.先準備虛擬環(huán)境
4.安裝uwsgi
5.用uwsgi啟動crm項目
-一是命令 + 參數 (不建議使用,請用配置文件 uwsgi.ini)
uwsgi --http :8000 --module crm.wsgi
解釋:--http 就是直接可以通過瀏覽器訪問,不通過nginx
uwsgi --socket :8000 --module crm.wsgi
解釋: --socket 是必須用nginx去反向代理,才能找到,瀏覽器直接訪問找不到
正確的方式:
二,用配置文件uwsgi.ini
[uwsgi]
# Django-related settings
# the base directory (full path)
#填寫項目的絕對路徑(第一層路徑)
chdir = /opt/Crm_Project
# Django's wsgi file
#填寫crm第二層目錄下的wsgi.py文件的路徑
module = Crm_Project.wsgi
# the virtualenv (full path)
#填寫虛擬環(huán)境的絕對路徑
home = /root/Envs/nginx_crm
# process-related settings
# master
master = true
# maximum number of worker processes
#基于uwsgi的多進程,根據cpu來優(yōu)化
processes = 4
# the socket (use the full path to be safe
#如果你用了nginx反向代理,就填寫socket參數
#如果你用了nginx反向代理,就填寫socket參數
#如果你用了nginx反向代理,就填寫socket參數
#如果你用了nginx反向代理,就填寫socket參數
#如果你用了nginx反向代理,就填寫socket參數
socket = 0.0.0.0:8000
#如果你沒用nginx,想直接通過瀏覽器測試后端,使用http
#http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
三,通過配置文件,啟動crm,啟動后端!!!!找到項目里的uwsgi.ini后再輸入命令
uwsgi --ini uwsgi.ini
四。關閉防火強
iptables -F #清空規(guī)則
systemctl stop firewalld #關閉防火墻服務
systemctl disable firewalld #禁止開機自啟
五,收集crm的靜態(tài)文件
修改settings.py 寫入
STATIC_ROOT= '/opt/crmstatic'
六:用命令收集靜態(tài)文件,在虛擬環(huán)境中做這個操作
python3 manage.py collectstatic
2.準備數據庫,啟動
#保證mariadb已經安裝了
yum install mariadb-server mariadb -y
systemctl start mariadb #啟動數據庫
3.準備nginx,進行反向代理
1.安裝nginx
2.修改nginx的配置文件 nginx.conf
3.修改代碼如下,截取的片段代碼如下,參照著修改
upstream mycrm {
server 0.0.0.0:8000;
}
#nginx的虛擬主機參數
server {
#第一個虛擬主機,監(jiān)聽的80端口
listen 80;
#填寫的是你自定義的域名 或者服務器的ip地址,或者寫locathost
server_name 192.168.226.128;
#當用戶訪問 www.s18dnf.com的時候,就進入這個虛擬主機
location / {
uwsgi_pass http://mycrm;
include uwsgi_params;
}
#這個location是解決crm的靜態(tài)文件的問題的
#只要請求url是192.168.226.128/static/admin/admin.css
location /static {
#alias參數 就是將/static轉化為/opt/crmstatic ,也就找到了我們所有的靜態(tài)文件
alias /opt/crmstatic;
}
4.還差一個supervisor
1.下載安裝
2.修改supervisor的配置文件
寫入任務
3.這里有個坑,坑是必須關閉nginx才能開啟supervisor
我們用supervisor,其實就是幫咱們執(zhí)行了一下啟動uwsgi的命令而已
4.注意后臺不能啟動過uwsgi
crm項目部署總結
總結
以上是生活随笔為你收集整理的linux项目部署(非前后端分离crm)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#endread怎么打印出来_C#编程
- 下一篇: vue elementui 引入第三方i