1. 程式人生 > >超哥教你發布CRM

超哥教你發布CRM

shell腳本 time 教育 管理工具 rep 需要 幹凈 訪問 --

發布CRM你將使用以下軟件

  • nginx
  • uWSGI
  • CentOS7
  • CRM項目文件
  • virtualenv
  • supervisor

WSGI、uWSGI

python web服務器開發使用WSGI協議(Web Server Gateway Interface)

python web項目默認會生成一個wsgi.py文件,確定好應用模塊。

生產環境中使用的是uWSGI,實現了WSGI所有接口,C語言編寫,效率很高的web服務器。

uWSGI是一個全功能的HTTP服務器,實現了WSGI協議、uwsgi協議、http協議等。它要做的就是把HTTP協議轉化成語言支持的網絡協議。比如把HTTP協議轉化成WSGI協議,讓Python可以直接使用。

Nginx

使用nginx是為了它的反向代理功能,項目會通過Django+uWSGI+Nginx進行服務器線上部署。

CentOS

1.打包項目CRM文件夾,壓縮文件

2.通過xftp、scp、lrzsz等上傳文件至Centos服務器

Linux使用技巧

1.通過xshell或者iTerm等軟件,多終端操作你的linxu,這樣對uwsgi、nginx、項目代碼調試的時候,避免來回切換目錄,提供工作效率。

2.註意修改了linux軟件的配置文件,都要重啟服務才能生效。

Virtualenv

構建一個幹凈,隔離的python解釋器環境,防止軟件依賴,沖突等問題,建議使用。

Supervisor

Supervisor(http://supervisord.org/)是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持Windows系統。它可以很方便的監聽、啟動、停止、重啟一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死後,會自動將它重新拉起,很方便的做到進程自動恢復的功能,不再需要自己寫shell腳本來控制。

項目部署

激活虛擬python環境

#創建基於python3的虛擬解釋器環境venv
virtualenv --no-site-packages --python=python3 venv
#激活python3虛擬環境
[root@yugo /data 11:11:30]#source venv/bin/activate
(venv) [root@yugo /data 11:11:35]#

安裝uwsgi

(venv) [root@yugo /data 11:13:23]#pip3 install uwsgi

配置啟動uwsgi.ini,啟動uwsgi時候,用這個配置文件啟動

(venv) [root@yugo /data 11
:14:25]#cat uwsgi.ini [uwsgi] #使用nginx連接時使用 socket=0.0.0.0:8000 #不用nginx直接當做web服務器使用 #http=0.0.0.0:9000 #項目目錄絕對路徑 chdir=/data/Ace_crm
#wsgi文件路徑,在項目底下
wsgi-file=Ace_crm/wsgi.py #指定解釋器目錄 home=/data/venv processes=4 threads=2 master=True pidfile=uwsgi.pid daemonize=uwsgi.log

配置nginx

配置nginx.conf,通過nginx反向代理將請求丟給django處理

(venv) [root@yugo /data 11:20:32]#cat /opt/nginx1-12/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  $remote_addr - $remote_user [$time_local] "$request" 
                      $status $body_bytes_sent "$http_referer" 
                      "$http_user_agent" "$http_x_forwarded_for";
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    #定義負載均衡池,名字叫做django,池子中寫入uwsgi發布django的socket地址
    upstream django {
    server 0.0.0.0:8000;
}
    server {
        listen       80;
        server_name  pythonav.cn;
        #訪問nginx的根路徑時,轉發請求給uwsgi的8000端口,這裏要和uwsgi.ini寫的一致
        location / {
        include  /opt/nginx1-12/conf/uwsgi_params;
     #請求轉發給upstream地址池裏的uwsgi程序 uwsgi_pass
django; } location /static/ { alias /opt/nginx1-12/html/static/; } } }

熱加載nginx服務,讀取nginx.conf內容

(venv) [root@yugo /data 11:24:24]#/opt/nginx1-12/sbin/nginx -t
nginx: the configuration file /opt/nginx1-12/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx1-12/conf/nginx.conf test is successful
(venv) [root@yugo /data 11:26:07]#/opt/nginx1-12/sbin/nginx -s reload

啟動uwsgi,啟動django

(venv) [root@yugo /data 11:26:54]#uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
(venv) [root@yugo /data 11:27:10]#ps -ef|grep uwsgi
root     15540     1  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15543 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15544 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15545 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15546 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15590 11958  0 11:27 pts/0    00:00:00 grep --color=auto uwsgi

#如果需要停止uwsgi可以使用ps -ef|grep uwsgi,找到pid殺掉
#更好的一個殺掉uwsgi的方式
killall -9 uwsgi

訪問nginx的80端口,查看是否請求轉發給django

http://pythonav.cn/login/
或者10.0.0.10/login

配置nginx的靜態資源

技術分享圖片

為什麽要配置靜態資源?

配置靜態資源目錄是因為讓靜態資源通過nginx可以直接返回,不需要通過uwsgi,也就是讓uwsgi只處理後端邏輯,不處理靜態資源,優化性能

配置靜態資源,django和nginx

#創建靜態資源存放目錄
[root@yugo /opt/nginx1-12/html 11:39:51]#mkdir -vp /opt/nginx1-12/html/static
mkdir: created directory ‘/opt/nginx1-12/html/static
#給目錄添加權限
[root@yugo /opt/nginx1-12/html 11:40:57]#chmod 755 /opt/nginx1-12/html/static/

配置django的settings.py

DEBUG = False
ALLOWED_HOSTS = [*]

# Static files (CSS, JavaScript, Images) # https:
//docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = /static/ STATIC_ROOT= /opt/nginx1-12/html/static/ STATICFILES_DIRS = [ os.path.join(BASE_DIR, static) ]

技術分享圖片

分割線--

技術分享圖片

以上步驟完成後,訪問服務器主機地址和端口,如果nginx.conf中配置的為80端口,則地址欄不需要輸入端口,因為瀏覽器請求端口也是默認為80端口,非80端口的需要自己在ip後面添加

完畢,有問題再找超哥

老男孩教育

QQ:877348180

超哥教你發布CRM