aaa

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

nginx代理學習

生活中見過什麼代理?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進行項目部署

使用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

!ps命令

從最好往上來翻 有關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

在物理環境下安裝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

錯誤3

寫絕對路徑了 配置文件形式的都要寫絕對路徑,不然會出現各類坑 (是在那個路徑下嗎?)

command=/root/Envs/nbcrm/bin/uwsgi --ini /root/opt/NBcrm/uwsgi.ini

本質

看看問題出在那裏?
是啥? 封裝了路徑,拿出去對嗎? 不對
執行命令,檢驗正確以後,而後在加入到文件

錯誤4

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以後

相關文章
相關標籤/搜索