今日內容: 博客地址: https://www.cnblogs.com/pyyu/p/9481344.html linux基本管理命令 服務器上安裝服務,python3.6(宿主機上的物理解釋器) 1.虛擬解釋器 virtualenv 虛擬出多個干凈、隔離的python解釋器環境 問題:管理上較為麻煩,需要找到venv的路徑,並且source activate 才能激活虛擬環境 2. virtualenvwrapper工具 更為方便的使用以及管理virtualenv 1.配置好環境變量之后,每次開機就加載這個軟件 2.workon 激活並且切換多個虛擬環境 mkvirtualenv 創建 lsvirtualenv cdvirtualenv rmvirtualenv mariadb(mysql),與django連接,存儲數據(yum install mariadb-server mariadb-client) 初始化連接數據庫 __init.py__ import pymysql pymysql.install() 本地django連接linux上的數據庫注意事項: 1.防火牆問題,需配置規則,或者關閉防火牆 使用雲服務器的同學,需要注意開通3306端口(安全組功能) 2.遠程連接mysql,需要授權,遠程連接 grant all privileges ..... redis import redis 准備django項目 > crm 在服務器上運行crm 1.把本地代碼,傳至linux -scp(linux與linux網絡傳輸) -xshell(yum install lrzsz) (windows) lrzsz 可以通過如下倆命令管理文件,也可以直接拖拽文件 rz 接收 sz 發送 lrzsz只適用於小文件,大文件,請用xftp -xftp (更為高效的企業級文件傳輸協議軟件) 2.django項目需要配置allow_hosts=['*'],允許所有主機訪問 debug=True #返回給項目一個debug信息,暴露了項目配置信息,因此在線上要關閉 Nginx 1.web服務器,用戶的統一入口, 我們的想法是,讓用戶通過nginx這個入口,就能訪問到我們的應用服務器的功能 www.pythonav.cn 入口 < 80端口 端口轉發,反向代理 80端口的請求 > 8000的端口應用 server{}虛擬主機 2.反向代理服務器 proxy_pass 后端應用服務器的ip:port (轉發給一個單點機器) proxy_pass upstream負載均衡池 3.負載均衡服務器 nginx接收到了基於wsgi協議的動態請求,然后通過uwsgi_pass轉發給uwsgi服務器 uwsgi_pass mydjango; upstream mydjango { server 192.168.12.1:8000 weight=1; server 192.168.12.2:8000 weight=5; server 192.168.12.3:8000 weight=10; } 4.處理靜態文件,者是nginx的天然優勢,處理靜態文件的高並發性性能 www.pythonav.com/static/xxx.js 文件存放目錄/data/static/xxx.js www.pythonav.com/static/xxx.css 文件存放目錄/data/static/xxx.css www.pythonav.com/static/xxx.jpg 文件存放目錄/data/static/xxx.jpg location /static { alias /data/static; } uwsgi uwsgi服務器: 通過uwsgi這個軟件啟動crm項目,且是一個支持高並發,多進程的一個應用服務器 uwsgi --module crm python3 manage.py runserver 0.0.0.0:8000 ×× 不再用這種單機形式啟動crm django-admin startproject crm django-admin startapp app01 crm -crm -wsgi.py (重點級的文件,django啟動,實現wsgi協議的文件) -manage.py 常見問題: uwsgi 啟動crm的時候,非常有可能報錯一個 no application(找不到應用) uwsgi找不到你的crm的wsgi.py 其實uwsgi是通過這個application對象加載crm的 application = get_wsgi_application() 進程管理工具: 啟動進程后,通過命令 手動管理 ps -ef |grep uwsgi #啟停uwsgi kill -9 pid pkill uwsgi killall uwsgi #管理nginx ps -ef kill #管理mysql ps -ef kill #進程管理工具 supervisor 服務啟動后 supervisorctl ,可以通過這個命令,非常方便的管理進程,也可以統一啟動,停止所有的進程 批量管理進程 mysql : running/stop nginx : running/stop uwsgi:running/stop 項目發布配置手冊: (更換不同的服務器環境,首先就要解決環境依賴的問題) 1.pip3 frezz > requirements.py 2. pip3 install -r requirements.py 3.docker 1.准備python環境,准備虛擬環境,激活了虛擬環境 mkvirtualenv nbcrm 檢測是否虛擬環境正常 which pip3 which python3 2.安裝django模塊(此時的操作都是在nbcrm這個虛擬環境下了) pip3 install django==1.11.11 3.安裝pymysql連接mysql數據庫 pip3 install pymysql 4.安裝django的一個django-multiselectfield pip3 install django-multiselectfield 5.解決項目的數據庫連接問題,修改settings.py 1.啟動linux的數據庫,創建對應的數據庫,密碼設置等等 create database nb_crm; 2.更改settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'nb_crm', #數據庫名 'HOST': '127.0.0.1', #這里服務器的ip地址 'PORT': 3306, #端口 'USER': 'root', #用戶名 'PASSWORD': 'redhat123', #用戶密碼 } } 3.更改允許主機 ALLOWED_HOSTS = ['*'] 4.線上關閉debug(肖鋒的這個nb_crm先別改debug了),默認先用True debug=True 使用uwsgi啟動django 1.安裝uwsgi pip3 install -i https://pypi.douban.com/simple uwsgi 2.通過uwsgi命令啟動python應用 uwsgi --http 0.0.0.0:8888 --wsgi-file test1.py --http 指明是http協議 --socket 啟動一個socket 鏈接 --wsgi-file 指明一個python應用文件 3.通過uwsgi啟動django項目(問題是,uwsgi不處理static靜態文件的配置) uwsgi --http :8888 --module Nb_crm.wsgi 4.uwsgi可以熱加載項目 uwsgi --http :9999 --module mycrm.wsgi --py-autoreload=1 --py-autoreload是告訴uwsgi自動重啟加載django項目 5.通過uwsgi的配置文件啟動項目 1.手動創建uwsgi.ini文件 touch uwsgi.ini 2.寫入如下配置 [uwsgi] #項目的絕對路徑,定位到項目的第一層 chdir = /opt/NB_crm #指明項目的wsgi文件路徑 module = NB_crm.wsgi #指明你的虛擬解釋器的第一層路徑 home = /root/Envs/nbcrm #指明通過uwsgi,啟動多少個進程 processes = 5 #非常重要 #非常重要 #非常重要 #如果你已經配置了nginx(啟動了nginx服務,配置了uwsgi_pass),請用這個socket連接 #socket = 0.0.0.0:8000 #如果你沒用nginx,想通過uwsgi直接啟動web服務,指明http協議 http = 0.0.0.0:9999 #在退出uwsgi環境后,清空環境變量 vacuum = true 6.通過配置文件啟動NB_crm(注意uwsgi不會處理靜態文件,如果有,也是瀏覽器的緩存!!!!) uwsgi --ini uwsgi.ini 7.配置django的settings.py,收集所有NB_crm項目所需的靜態文件 1.#通過命令,收集整個項目所有的靜態文件,放入到/opt/static/ STATIC_ROOT='/opt/static/' 2.執行命令 python3 manage.py collectstatic 3.此時NB_crm的所有靜態文件,都跑到/opt/static/底下了 (nbcrm) [root@node1 /opt/NB_crm 11:09:33]#ls /opt/static/ admin css imgs js plugins 8.配置nginx 1.配置一個網站入口,當用戶訪問192.168.12.96:80 這個web應用時,自動將請求轉發給uwsgi,uwsgi處理后,返回給nginx,返回給用戶 當請求是192.168.12.96:80的時候,其實訪問的是192.168.12.96:9999 這是動態請求,因為我是找到的uwsgi #匹配度最低的寫法,因此就是任何的請求都訪問到這里 2.通過nginx去處理靜態文件 3.nginx.conf配置如下 #定義負載均衡池,里面放入uwsgi的地址 upstream nbcrm { server 127.0.0.1:8000; } server { listen 80; server_name www.s14huoying.com; #講nginx入口的請求,直接反向代理給uwsgi location / { uwsgi_pass nbcrm; include /opt/nginx1-12/conf/uwsgi_params; } #通過nginx處理nbcrm的靜態文件 location /static { alias /opt/static/; } } 9.更改uwsgi.ini ,指明socket連接,結合uwsgi 和nginx #如果你已經配置了nginx,請用這個socket連接 socket = 0.0.0.0:8000 10.啟動uwsgi.ini uwsgi --ini uwsgi.ini 啟動nginx ./nginx 並且訪問nginx的域名入口,查看是否能訪問到uwsgi項目,並且靜態文件是否正常 www.s14huoying.com 查看瀏覽器狀態 11.配置supversior,管理uwsgi進程 注意,請退出虛擬環境,在宿主機環境下,安裝supvervisor 1.安裝easy_install ,python2的軟件包管理工具 ,如果有了可以忽略 yum install python-setuptools #安裝軟件 easy_install supervisor 2.使用supervisor命令,常用命令如下 生成配置文件 echo_supervisord_conf > /etc/supervisord.conf 3.修改配置文件,添加任務,按照自己的機器環境修改此命令 [program:s14nbcrm] #啟動uwsgi的命令就是這個 command=/root/Envs/nbcrm/bin/uwsgi --ini /opt/NB_crm/uwsgi.ini #自動啟動uwsgi,掛了之后自動加載 autorestart=true 4.啟動supvervisord服務,啟動uwsgi #服務端命令,用於啟動這個服務 supervisord -c /etc/supervisord.conf 5.通過命令管理uwsgi supervisorctl 直接回車,進入交互式管理狀態 [root@node1 ~ 11:53:32]#supervisorctl s14nbcrm RUNNING pid 2008, uptime 0:01:56 也可以通過命令交互式的管理uwsgi #服務端啟動后,通過命令管理軟件 supervisorctl start s14nbcrm supervisorctl stop s14nbcrm supervisorctl status s14nbcrm