從0拓展flask,逐步分析(二)

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

 


 

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