在centos7.6上部署前後端分離項目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor統一管理服務

原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_102

這一次使用vue.js+tornado的組合來部署前後端分離的web項目,vue.js不用說了,前端當紅炸子雞,泛用性非常廣,無論是單頁應用,還是混合式開發app,亦或是微信小程序開發,樣樣得心應手,tornado最近的風頭有點被新銳框架sanic搶走了,但是作爲老牌的異步非阻塞框架,其內置了支持epoll/kqueue 等高效網絡庫,而具備了處理高併發的能力並且開發效率也不低,這一次tornado作爲承載後端壓力的角色。

首先部署前端,將測試好的vue.js2.6項目打包,值得一提的是,在生產環境並不需要node.js服務,因爲利用vue.js的特性可以對前端頁面進行打包,使其成爲一個純靜態頁包,上線後利用nginx對其代理即可,既方便又安全。在項目目錄下執行npm run build命令,在執行之前,先把conifg目錄下index.js中的bulid配置…/dist改成./dist

執行命令後,會在項目的config目錄下的dist目錄生成靜態頁,將dist目錄上傳到服務器的/root目錄下

運行 chmod 755 /root/dist 對項目文件授權

然後,在線上安裝nginx

#設置源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

#安裝
yum install -y nginx

#啓動服務
systemctl start nginx.service

服務器需要暴露80端口,此時,測試一下,看看能否顯示歡迎頁

沒有問題,這時修改一下nginx 配置文件 vim /etc/nginx/conf.d/default.conf 增加下面的配置,這裏前端服務默認監聽80端口

server {
    listen       80;
    server_name  localhost;

    access_log      /root/md_vue_access.log;
    error_log       /root/md_vue_error.log;


    client_max_body_size 75M;


    location / {

        root /root/dist;
        index index.html;
        try_files $uri $uri/ /index.html;

    }
    
    error_log    /root/dist/error.log    error;

}
#繼續修改配置
vim /etc/nginx/nginx.conf
將第一行改爲 user root;

改好後,重啓nginx服務

systemctl reload nginx.service

每次修改nginx配置一定要重啓服務,否則修改不會生效

訪問一下,看看效果

至此,前端就部署好了,是不是很簡單呢?這一次我們摒棄了老美多商城醜陋而原始的模板,採用響應式設計的新模板,兼容任意大小屏幕,並且還可以打包成apk,簡直棒

接着,我們來部署後端,首先安裝python3,需要注意的是centos自帶python2.7,當裝軟件的時候千萬不要影響這個python2.7,因爲系統很多東西都依賴python2,所以我們只要python2和python3共存就可以了

yum install epel-release

yum install python36

wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py

python3 get-pip.py

pip3 install pymysql

pip3 install pillow

pip3 install pycryptodome

pip3 install tornado==5.1.1

pip3 install sqlalchemy

將tornado項目上傳到/root/mytornado下,修改項目權限:chmod -R 755 /root/mytornado 然後將項目的debug模式關閉,並且修改端口號爲8001,同時阿里雲暴露8001端口,進行項目根目錄,啓動服務:python3 server.py,檢查一下

沒有問題,此時修改nginx配置文件,用nginx對tornado進行反向代理,新建一個配置文件

vim /etc/nginx/conf.d/tornado.conf
upstream tornado {
    server 127.0.0.1:8001;
}

server {
    listen   8000;
    root /root/mytornado;
    index server.py index.html;

    server_name server;

        # 靜態文件直接由Nginx處理
    location /static/{
        alias /root/mytornado/static/;
        expires 24h;
    }
    location /{
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        # 把請求方向代理傳給tornado服務器,負載均衡
        proxy_pass http://tornado;
    }

}

該配置的意思就是由nginx監聽8000端口,並且將請求反向代理至tornado服務,這裏我們只起了一個8001的服務,還可以啓動更多,這就是傳統意義上的負載均衡

重啓一下nginx

systemctl restart nginx.service

訪問服務器的8000端口,阿里雲也別忘了暴露一下8000

最後,每次手動在命令行啓動應用是比較麻煩的,我們還需要一個能夠方便的管理服務進程的工具,包括自動重啓進程等,而Supervisor的作用在這裏就可以體現了。我們使用它來管理這個Tornado web server相關的進程

安裝supervisor

yum install epel-release
yum install -y supervisor

生成配置文件

supervisord -c /etc/supervisord.conf 

修改配置文件

然後修改配置文件 vim /etc/supervisord.conf 將下面幾行的註釋解開

[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001        ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))

意思是將web服務頁面打開,需要注意ip地址要寫*,否則外網訪問不了,而username和password就是登錄服務頁面的用戶名和密碼,可以改的複雜一點,另外阿里雲也需要向外網暴露一下9001端口

然後在配置文件末尾加上tornado的配置

[program:mytornado]
command=python3 /root/mytornado/server.py --port=8001
directory=/root/mytornado
autorestart=true
redirect_stderr=true

保存文件退出後,啓動supervisor服務

supervisord -c /etc/supervisord.conf

此時,將剛剛手動啓動的tornado服務關閉,然後訪問服務器的9001端口,用配置文件中的賬號和密碼登錄

這樣就可以在管理頁面中控制tornado服務了,同時supervisor還賦予了守護進程模式,方便服務拉起

需要注意的是,當修改了supervisor的配置,想要生效就得重啓supervisor服務,終止服務命令是:

killall -s INT /usr/bin/python

因爲supervisor是基於python2的,所以不用擔心python3的進程

另外如果只想在命令行中控制tornado也是可以的

#停止tornado服務
supervisorctl stop mytornado

#啓動tornado服務
supervisorctl start mytornado

至此,我們通過nginx反向代理tornado負載均衡,並且通過supervisor管理就部署好了,簡直太簡單了

原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_102

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章