Flask Web開發基於python的web應用開發實戰,感覺輸出的後端不具備廣泛意義的實用性,後來又瀏覽了python Web開發實戰的(宏觀介紹是不錯的,其他的自己查資料),以及https://zhuanlan.zhihu.com/p/25038203的專欄,決定實現一個比較完善的後端內容。首先確定一個目標,以防跑偏
目標:我要實現一個ngnix(反向代理+負載均衡) + uWSGI + Flask + mysql
過程:
1)ngnix和普通服務器搭配,配置並驗證幾種負載均衡方法
暫不考慮內容:不去具體追究ngnix的各個模塊的內容,因爲ngnix實在是太完善了,而且從應用上看,都是通過各種方式完成配置,已達到一起目標,本次學習只注重實現而非原理
後續拓展:單獨一章分析nginx的負載均衡算法,細節暫且不看
2)使用uWsgi
主要用來比較Wsgi和uWsgi的性能,比較單進程模型和多進程模型。
3)攤開Mysql和mysql-alchemy和flask-alchemy,描述api的mysql應用
4)Flask分模塊嘗試,把曾經整體化的東西脫離jinja2前端的模板,表現出來
1、ngnix
參考該博主的方案,嘗試搞一下,儘量使用最新的版本
http://blog.51cto.com/freeloda/1288553
遇到的一些不同的問題
1)我是去ngnix的官網下載一個ngnix的.tar.gz包並剪切到/usr/local/src
move nginx-1.15.3.tar.gz /usr/local/src/
2)groupadd:GID “108”已經存在
懷疑是組裏面已經存在108了
cat /dev/group 確實發現了108,
所以我採用190
3)對方配置完yum然後直接使用的,ubantu使用apt-get install
apt-get install libpcre3-dev
apt-get install libssl-dev
apt-get install zlib1g-dev
4)ubuntu18.04不再使用initd管理系統,而是使用system,開機啓動需要額外修改
創建完沒有/var/tmp/nginx文件夾,直接執行腳本會有這個提示
mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi} 就是上面命令配置的那些文件
再次service nginx start
nginx的init文件的問題,執行./nginx會出現
https://unix.stackexchange.com/questions/9314/no-such-file-or-directory-etc-init-d-functions
網址說明了原因, ubantu 使用/lib/lsb/init-functions,用這個文件夾替換之前的文件夾
後面再次執行腳本,
看來network放在systemd裏面了
把/etc/sysconfig/network 替換爲/etc/systemd/network/
./nginx 提示需要參數,輸入./nginx start
systemctl status nginx.service
deamon守護進程失敗,單獨命令行會提示安裝包名
apt install daemon
service nginx start 成功
重啓之後
也是缺文件,補一下
mkdir /var/run/nginx
touch nginx.pid
還是不行,後來搜到一篇
https://www.jb51.net/article/45661.htm
/usr/sbin/nginx -c /etc/nginx/nginx.conf
完成
訪問前端的時候缺少HTML文件,搜索一下
https://stackoverflow.com/questions/9657065/nginx-and-favicon-ico-get-favicon-ico-http-1-1-failed
實在不行touch /var/run/nginx.pid,理論上不應該這樣,和/var/run/nginx/nginx.pid重複了,果然不行
試過sudo systemctl start nginx還是不行
暫時定位爲鏈接超時,斷開nginx鏈接了,估計和一個鏈接都沒有有關,但是沒有keep-alive,理論上只是斷開鏈接,服務不應該停的。
後來偶然重新執行 /usr/sbin/nginx -c /etc/nginx/nginx.conf, 雖然nginx直接進入下一個命令行了,但是端口有80的信息
所以是執行完改命之後,nginx以守護進程的方式運行,我以爲會和Flask一樣,會因爲一直處於request和response之中,
而無法繼續使用這個命令行。
2、HTTPD服務
可以參考一下阿里雲的說法,感覺比較新
https://www.aliyun.com/jiaocheng/148719.html
mkdir /usr/local/apache2
tar -xzvf httpd-2.4.34.tar.gz -C /usr/local/src/
cd /usr/local/src/httpd-2.4.34
./configure --prefix=/usr/local/apache2
會有提示checking for APR... no
而且讓閱讀DOCUMENTION,打開README.cmake
* APR, built with cmake
+ Either APR 2.0-dev (trunk) or APR 1.5.x and .APR-Util 1.5.x
+ When building APR (but not APR-Util), specify the build option
APR_INSTALL_PRIVATE_H so that non-standard files required for building
Apache httpd are installed.
+ Additional APR settings affect httpd but are not mandatory, such as
APR_HAVE_IPV6.
* PCRE
Certain optional features of APR 2.0-dev (trunk) or APR-Util 1.5.x
allow some optional features of httpd to be enabled. For example,
APU_HAVE_CRYPTO is required for mod_session_crypto.
要求我們安裝APR-1.5和.APR-Util 1.5.x,直接找最新的
wget http://archive.apache.org/dist/apr/apr-1.6.5.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
./configure --prefix=/usr/local/src/apr
make&make install
報錯:rm: cannot remove 'libtoolT': No such file or directory
將$RM "$cfgfile"註釋掉,在VIM命令行下輸入/Rm就可以,後來發現其實有沒有這個文件夾沒有影響
說明:安裝後,因爲之前nginx安裝過pcre,估計不用裝
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/src/apr --with-apr-util=/usr/local/src/apr-util/
httpd有兩種安裝方法,可以訪問官方文檔
http://httpd.apache.org/docs/2.4/
sudo apt install apache2
sudo service apache2 start
nginx和apache2都準備好之後:
訪問nginx會訪問到對應代理的apache的網站,日誌放在other_vhosts_access.log中,因爲沒有配置apache2