原文轉載自「劉悅的技術博客」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