linux學習筆記第五天,nginx代理,項目部署php
後端開發,業務線
crm系統,客戶管理系統
電商平臺,賣產品,提供給人類去使用html
運維開發(面對機器的業務)
堡壘機開發
跳板機 (檢測登陸服務器人員信息的,保證生產服務器安全)
監控平臺開發
運維資產管理平臺(cmdb)
代碼發佈平臺vue
外企,
閉源的技術棧
java + orlace + red hat + mencached + apache + jquery + svn + tom catjava
開源的技術棧
python + php + mysql + centos + ubuntu + redis + nginx + vue + gitpython
生活中見過什麼代理?mysql
美國代購包包jquery
車票的黃牛linux
微商nginx
租房的中介代理git
nginx 能夠起到web服務器的功能,也能實現代理的功能,經過不一樣的參數定義
nginx的反向代理(請求轉發,請求來了以後,直接轉發給後端的機器)
實驗環境準備:
中介(nginx 1 起到 反向代理的做用 ) 192.168.16.49 房東(nginx 2 提供web服務器資源返回 ) 192.168.16.142
1.分別在兩臺機器安裝nginx(安裝方式自由選擇)
(講師機環境): nginx1是經過yum安裝的,配置文件在/etc/nginx/nginx.conf 修改配置以下
nginx2的機器,提供頁面展現,有韓劇頁面的數據
ifconfig ens38 192.168.230.1/24 up
反向代理
nginx負載均衡池
yum 無法按由於缺乏yum源 ,能夠下載,可是由於第一臺虛擬機裏已經有了,因此傳過去就行
在etc目錄 裏 scp -r yum.repos.d/ root@192.168.230.13:/etc/
由於etc裏面有之前的 因此要先刪除之前的
在yum.repos.d 裏 rm -rf *
三臺機器,一個是負載均衡器,其餘兩個是資源服務器
機器1 ,負載均衡器 192.168.16.49 (安裝的是nginx,提供負載均衡轉發功能)
nginx.conf配置以下
upstream s20crm { server 192.168.16.142; server 192.168.16.47; } server { listen 80; server_name localhost; #當請求是 192.168.16.49:80/ location / { proxy_pass http://s20crm; } } }
nginx 進行檢測
nginx -t 進行nginx語法檢測 nginx -s reload
機器2 資源服務器,咱們爲了方便,直接使用nginx提供頁面 192.168.16.142
機器3 資源服務器,咱們爲了方便,直接使用nginx提供頁面 192.168.16.47
nginx的負載均衡算法有以下
調度算法 概述 輪詢 按時間順序逐一分配到不一樣的後端服務器(默認) upstream s20crm { server 192.168.16.142; server 192.168.16.47; } weight 加權輪詢,weight值越大,分配到的訪問概率越高 upstream s20crm { server 192.168.16.142 weight=4; server 192.168.16.47 weight=1; } # 4 次 1 次 upstream s20crm { server 192.168.16.142 ; server 192.168.16.47 ; ip_hash; } # 這樣d的話只走47 ip_hash 每一個請求按訪問IP的hash結果分配,這樣來自同一IP的固定訪問一個後端服務器 url_hash 按照訪問URL的hash結果來分配請求,是每一個URL定向到同一個後端服務器 least_conn 最少連接數,那個機器連接數少就分發
django若是經過python3 manage.py runserver形式運行,內部調用的是wsgiref模塊,運行的socket服務端
性能低下,單進程,單線程
使用nginx+ uwsgi進行項目部署
1.準備django項目 NB_crm
2.安裝虛擬環境,在虛擬環境下,安裝uwsgi,進行部署
workon nbcrm
pip3 install -i https://pypi.douban.com/simple uwsgi
3.利用uwsgi運行一個python web腳本文件
新建一個py腳本文件,寫入以下內容 def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] # python3 啓動命令以下 uwsgi --http :8000 --wsgi-file test.py --http參數意思是,基於http協議運行 在 8000端口 --socket --wsgi-file 找到wsgi.py文件
4.利用uwsgi運行django項目
(以參數形式運行項目),(還有以配置文件形式運行,把運行的參數寫入到一個文件裏面,基於這個文件運行) (以參數形式運行項目) (以參數形式運行項目) 命令以下 uwsgi --http :8088 --module mysite.wsgi --module 找到django項目的第二層裏面的wsgi.py文件 uwsgi默認不支持靜態文件解析,使用nginx去解析靜態文件
5.熱加載django項目,uwsig自動重啓django
uwsgi --http :9000 --module NBcrm.wsgi --py-autoreload=1
uwsgi --http :9000 --module luffy_permission.wsgi --py-autoreload=1
6.基於配置文件的形式,運行nbcrm
# uwsgi的配置文件 touch uwsgi.ini 在第一層NBcrm裏
[uwsgi] # Django-related settings # the base directory (full path) #項目的絕對路徑,定位到nbcrm的第一層 chdir = /root/NBcrm # Django's wsgi file # 找到項目第二層的wsgi文件 module = NBcrm.wsgi # the virtualenv (full path) # 找到虛擬環境的絕對路徑 home = /root/Envs/nbcrm # process-related settings # master # 主進程 master = true # maximum number of worker processes # 開啓uwsgi的多進程數,根據cpu核數來定義 processes = 16 # the socket (use the full path to be safe # 基於socket連接運行crm,只有與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 #若是你使用了supervisor,請註釋掉這個參數 #守護進程在後臺運行,且將日誌信息,輸出到uwsgi.log日誌中 #daemonize = uwsgi.log
啓動配置文件的命令(在有uwsgi.ini的文件中)或者最好加絕對路徑(寫絕對路徑的時候要注意準確)
/root/Envs/nbcrm/bin/uwsgi --ini uwsgi.ini
從最好往上來翻 有關history 裏面相關的或者數字 !
uwsgi 夯住了(輸任何的都沒法了),
而後前臺運行,再開一個窗口
7.配置nginx,結合uwsgi,以及處理靜態文件的配置
nginx.conf請求轉發配置以下
server { listen 80; server_name localhost; location / { include uwsgi_params; uwsgi_pass 0.0.0.0:8000; } }
1.修改django的settings.py靜態文件 添加以下參數 # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_ROOT='/opt/s20static' STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'statics'), ]
2.執行命令,收集crm的靜態文件 python3 /opt/NBcrm/manage.py collectstatic
3.配置nginx的location路徑匹配,找到crm這些靜態文件 在nginx.conf中找到server{}標籤,添加以下參數 #當個人請求url是 192.168.16.142:80/static/xxxxxxxx location /static { alias /opt/s20static/; }2.執行命令,收集crm的靜態文件 python3 /opt/NBcrm/manage.py collectstatic
4.啓動nginx,訪問nginx的80,是否能夠轉發到crm
virtualenv
python的虛擬環境工具vir + wrapper 這兩個工具只會影響python相關的東西,不會影響操做系統以及數據庫等的東西
pip3 python3 可能會影響,優先用虛擬環境的
which nginx 不是虛擬環境的路徑下的 不影響
錯誤2
配置了靜態文件 弄不出來
而後看亮哥的,發現本身沒有nginx -t nginx -s reload
8.使用supervisor進程管理工具,管理你的項目 其實,supervisor就是在幫你執行命令而已 使用supervisor管理進程,這個進程不得在後臺運行, 退出虛擬環境,在物理環境下安裝supervisor
在物理環境下安裝supervisor ,而後他管理uwsgi
1安裝 pip3 install -i https://pypi.douban.com/simple
2建立配置 echo_supervisord_conf > /etc/supervisor.conf 輸出配置文件信息 重定向到conf
3編輯配置,寫入管理nbcrm任務參數
vim /etc/supervisor.conf
[program:s20nbcrm] command=/root/Envs/nbcrm/bin/uwsgi --ini /root/opt/NBcrm/uwsgi.ini stopasgroup=true #默認爲false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程 killasgroup=true #默認爲false,向進程組發送kill信號,包括子進程
4.啓動supervisor,去管理uwsgi
supervisord -c /etc/supervisor.conf
5.經過supervisorctl管理命令,管理uwsgi supervisorctl -c /etc/supervisor.conf
命令以下
status all
start s20nbcrm
stop s20nbcrm
stop all
寫絕對路徑了 配置文件形式的都要寫絕對路徑,不然會出現各類坑 (是在那個路徑下嗎?) command=/root/Envs/nbcrm/bin/uwsgi --ini /root/opt/NBcrm/uwsgi.ini
看看問題出在那裏?
是啥? 封裝了路徑,拿出去對嗎? 不對
執行命令,檢驗正確以後,而後在加入到文件
nginx 訪問不到 ,訪問的80 端口,又沒想,就去問。 沒起端口 的錯誤
C:\Windows\System32\drivers\etc 下的hosts 文件 192.168.230.129 www.py.com 兩個均可已登陸了
linux出現swp交換文件,是由於vim異常退出,或者有人同時在操做一個文件,linux系統保護機制,會生成swp文件,刪除便可
conf.swp rm -rf conf.swp
配置文件形式
nginx.conf my.cnf my.ini uwsgi.ini *.xml *.json
pkill -9 uwsgi
pkill -9 super 也能夠殺死進程
居然不能看了 404 暖陽.jpg index.html 用了super以後