nginx + uwsgi + crm + mysql + virtualenv + supervisor項目部署
1.後端整起,用uwsgi啓動crm
2.建立一個新的虛擬環境,用於運行crm新業務
mkvirtualenv crm_env
(crmenv) [root@localhost Envs]# which python3
/root/Envs/crmenv/bin/python3
確認python3來自虛擬環境下
3.上傳crm代碼到服務器
4.解決代碼的模塊依賴
以前在一個env1的虛擬環境中安裝過這些模塊,因此先切換到env1: workon env1
模塊導出
pip3 freeze > requirements.txt
再次切換到當前新建的虛擬環境,導入下載安裝項目依賴模塊
pip3 install -i https://pypi.douban.com/simple -r requirements.txt
5.安裝uwsgi工具,啓動crm
pip3 install -i https://pypi.douban.com/simple uwsgi #uwsgi能讓你的項目支持多進程,多線程,提升性能
6.使用uwsgi的配置文件,啓動crm項目
在CRM項目目錄下(與項目的settings.py同級的目錄文件)手動建立uwsgi的配置文件
touch uwsgi.ini
在uwsgi.ini寫入一下配置內容:
[uwsgi]
# Django-related settings
# the base directory (full path)
# 填寫項目的完整絕對路徑,第一層
chdir =/root/CRM
# Django's wsgi file
#指定django的wsgi文件路徑,填寫相對路徑
在項目的第二層目錄下
module = CRM.wsgi
# the virtualenv (full path)
#填寫虛擬環境的絕對路徑
#查看虛擬環境路徑
# cdvirtualenv
# pwd
home = /root/Envs/crm_env
# process-related settings
# master
master = true
# maximum number of worker processes
#定義程序的多進程數量的,以cpu核數的2倍+1數量填寫 2n+1 數量
processes = 3
# the socket (use the full path to be safe
#把uwsgi啓動在socket協議上,的8000端口
socket = 0.0.0.0:8000
#指定http協議的話,用戶是能夠直接訪問到的,不安全的,所以使用socket協議,交給nginx去處理,能夠進行併發處理,也能夠進行限流,防止惡意攻擊
#http =0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
7.啓動uwsgi的命令
uwsgi --ini uwsgi.ini #指定配置文件啓動
8.配置nginx,進行靜態文件解析,以及反向代理crm的動態請求
server {
listen 80;
server_name _;
#只要在server{}標籤中看到root關鍵字,說明這個虛擬主機是一個靜態文件服務器
#將www.crm_env.com 這個域名全部的請求,都分發給uwsgi
#uwsi的地址,把接收到的請求交給uwsgi處理,進行反向代理,父載均衡
#能夠再次vim uwsgi.ini查看socket的ip:port
.......
location / {
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
}
從新加載nginx,讓配置生效 :nginx -s reload
若是報錯:nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
啓動nginx 輸入命令:nginx
9.把ip作一個本地的hosts解析,添加一個假的域名
找到本地機器的hosts文件C:\Windows\System32\drivers\etc
192.168.16.85 www.pycrm.com
以前寫的是192.168.16.85 www.crm_env.com報錯了,多是由於帶下劃線吧,我猜的
訪問以後,成功了一半,一些靜態文件沒加載出來,css樣式,js,圖片都沒有
10.收集crm全部的靜態文件,交給nginx去處理
修改django的settings.py配置文件,
進到settings.py這個目錄中
vim settings.py
添加以下配置
STATIC_URL = '/static/' #原來django中的配置文件中已經存在配置
STATIC_ROOT='/opt/pycrmstatic' #新添加的配置文件
經過命令收集django全部的靜態文件
python3 manage.py collectstatic
11.配置nginx找到crm的靜態文件
vim /etc/nginx/nginx.conf
#修改配置以下形式
#配置nginx找到crm全部的靜態文件
#只要是以/static開頭的請求,就走以下配置
location /static {
alias /opt/pycrmstatic/;
}
12.重啓nginx,查看crm項目
nginx -s reload
http://www.pycrm.com/login/#
13.經過supervisor進程管理工具,管理uwsgi的後臺,這個工具,其實就是在幫咱們執行啓動命令
須要下載安裝便可
yum install supervisor
14.配置supervisor的配置文件
[root@s24_linux css]# echo_supervisord_conf > /etc/supervisor.conf #生成配置文件的目錄
修改配置文件supervisord : vim /etc/supervisord.conf
將這些內容添加到supervisord.conf的下面
[program:CRM] #CRM要管理的進程,也就是項目名
command=/root/Envs/crm_env/bin/uwsgi --ini /root/CRM/CRM/uwsgi.ini ; 程序啓動命令
autostart=true ; 在supervisord啓動的時候也自動啓動
stopasgroup=true ;默認爲false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=true ;默認爲false,向進程組發送kill信號,包括子進程
15.啓動supervisord服務端
# 再次修改配置文件後,須要重啓supervisorctl 命令:supervisorctl reload
supervisord -c /etc/supervisord.conf # 啓動supervisorctl
進入supervisor的管理交互式終端,管理任務
[root@localhost ~]# supervisorctl -c /etc/supervisord.conf
CRM RUNNING pid 37756, uptime 0:00:04
16.supervisor的管理命令
status #查看狀態
start all #啓動全部任務
restart all #重啓全部任務