Python + Flask + Nginx 搭建免費(fèi)微信公眾號(hào)服務(wù)器
最近幫朋友做了個(gè)個(gè)人公眾號(hào), 一直也想研究下公眾號(hào)開發(fā), 免費(fèi)幫忙, 不能再貼錢搞服務(wù)器吧, 于是就想到了免費(fèi)的服務(wù)器資源 亞馬遜的AWS EC2.
說是免費(fèi), 也就是給你一個(gè)低配虛擬服務(wù)器用來練手, 時(shí)間是一年.后面就是按需收費(fèi)了. 不過咱也可以賴皮,一年過后把這個(gè)服務(wù)器干掉, 換個(gè)郵箱重新注冊(cè)一個(gè)繼續(xù)玩. 如果你微信公眾號(hào)用戶成規(guī)模的,估計(jì)得考慮花錢整個(gè)國內(nèi)的了, 大概看了下也不貴.
額...扯遠(yuǎn)了, 下面正式進(jìn)入主題: 標(biāo)題30字限制不足以表達(dá),其實(shí)我想寫的標(biāo)題還要加上 Python + Flask + Nginx.(現(xiàn)在干啥都扯上Python哈, 沒辦法, 最近這個(gè)熱乎.)
1.在亞馬遜aws創(chuàng)建新用戶.
相關(guān)教程網(wǎng)上很多很全, 而且界面也有中文,所以此處省略若干URL, 還請(qǐng)客觀在搜索引擎里小手抖一抖,搜索相關(guān)教程.
需要注意的是, 注冊(cè)時(shí)你得有張visa 或 MasterCard 信用卡來綁定賬戶, 亞馬遜到時(shí)候會(huì)砍你一刀1$作為認(rèn)證,好像實(shí)際沒有砍,只是做認(rèn)證而已.
2. 選擇服務(wù)器區(qū)域然后創(chuàng)建的操作系統(tǒng).
系統(tǒng)我選的Ubuntu, 其實(shí)linux的都差不多, 之前用過aws linux, 這次試試Ubuntu, 發(fā)現(xiàn)沒什么發(fā)現(xiàn).
此處可能有坑,需注意: 選擇服務(wù)器區(qū)域(也稱"節(jié)點(diǎn)")的時(shí)候,一般都是選響應(yīng)最快的, 可以在http://www.cloudping.info/ 查詢. 但是但是但是, 之前一直最快的東京服務(wù)器好像無法遠(yuǎn)程ssh, 不知是我rp問題還是其他,于是我選擇韓國首爾就沒啥問題.
3. 開始部署Flask應(yīng)用程序.(終于步入最核心主題)
3.1 先寫個(gè)簡單Flask應(yīng)用程序在你本地跑跑.
首先得先把Flask裝在本地:
pip install flask
這里之所以建議現(xiàn)在本地創(chuàng)建,原因是在服務(wù)器上編寫或調(diào)試都不方便, 當(dāng)然是針對(duì)我這種新手而言.
fs在本地新建一個(gè)文件夾 flaskserver 用來存放代碼文件.
在文件夾內(nèi)新建文件 flaskserver.py
在終端輸入下面的命令,測試你的Flask應(yīng)用:
python flaskserver.py
可以看到服務(wù)以及運(yùn)行起來了
瀏覽器輸入http://0.0.0.0:5000, 可以看到運(yùn)行效果
創(chuàng)建WSGI入口點(diǎn)文件wsgi.py, 這個(gè)文件用在后面服務(wù)器部署時(shí)候用.
創(chuàng)建USGI配置文件flaskserver.ini,部署的時(shí)候用.
3.2 服務(wù)器環(huán)境安裝.
好了,現(xiàn)在該ssh到亞馬遜服務(wù)器上配置下環(huán)境了。(關(guān)于如何配置ssh到服務(wù)器的過程,這里就不詳細(xì)敷出)
首先安裝Nginx和Flask,uWSGI
pip install uwsgi flask nginx
注意:如果提醒權(quán)限不足請(qǐng)加 sudo
3.3 部署代碼及服務(wù)配置.
1)安裝完畢后在服務(wù)器上創(chuàng)建個(gè)文件夾
mkdir /var/www/flaskserver/
然后將本地創(chuàng)建的那3個(gè)文件(flaskserver.py,wsgi.py, flaskserver.ini)copy到此文件夾中.如果手頭沒有sftp工具,直接在此文件夾下創(chuàng)建文件也行,反正沒多少代碼,而且代碼都是測試過了的。
給用戶www-data程序訪問權(quán)限:
sudo chown www-data:www-data /var/www/flaskserver
2)鍵入以下命令創(chuàng)建uWSGI啟動(dòng)服務(wù)
nano /etc/systemd/system/uwsgi.service
3)配置Nginx代理:
接下來我們需要配置Nginx使用uwsgi協(xié)議向socket轉(zhuǎn)發(fā)web請(qǐng)求.
首先在使用以下命令在Nginx的sites-available目錄下新建一個(gè)服務(wù)配置文件:
sudo nano /etc/nginx/sites-available/flaskserver
內(nèi)容為:
注意要將你aws ec2 服務(wù)器的公網(wǎng)IP或者DNS 配置到上面代碼里(server_name 項(xiàng)), 這個(gè)值應(yīng)該在aws控制臺(tái)這個(gè)界面上找:
然后將上面的Nginx配置文件鏈接到sites-enabled目錄下:
sudo ln -s /etc/nginx/sites-available/falskserver/flaskserver /etc/nginx/sites-enabled
就快大功告成了, 先測試下nginx 配置是否ok
sudo nginx -t
如果沒啥問題, 就把Nginx 服務(wù)重啟應(yīng)用新的配置文件.
sudo service nginx restart
重啟uwsgi服務(wù)
sudo systemctl restart uwsgi.service
如果不出意外的話, 在瀏覽器里訪問你aws服務(wù)器的公網(wǎng)IP, 應(yīng)該可以看到web頁面可以正常工作了.
4. 錯(cuò)誤排查
做了這么多工作, 到頭來一訪問發(fā)現(xiàn)不行. 耐心點(diǎn), 新手就是個(gè)踩坑的過程, 以下是我踩過的坑:
訪問公網(wǎng)IP, 沒有響應(yīng)
去檢查下aws的入站規(guī)則,是不是沒有開放給外部訪問
有響應(yīng),但是返回錯(cuò)誤
這個(gè)錯(cuò)誤可能由很多原因?qū)е碌?/p>
1) 配置有誤
2)代碼有誤
3)權(quán)限配置有誤
這個(gè)只能查看日志找原因, 日志一般在以下下幾個(gè)目錄:
/var/log/nginx/
/var/log/uwsgi/
5. 服務(wù)器其他設(shè)置
入站規(guī)則
當(dāng)你的服務(wù)運(yùn)行正常的時(shí)候,你會(huì)發(fā)現(xiàn)每天會(huì)有N多惡意爬蟲來掃描你的ip, 不斷地嘗試你網(wǎng)站的突破口,看起來好怕怕.
雖然我們的應(yīng)用他可能沒法攻破, 但就這么天天不斷地爬, 免費(fèi)服務(wù)器受不了, 日志記錄也受不了. 所以安全起見,設(shè)置入站規(guī)則, 列出可以訪問你網(wǎng)站的白名單. 這個(gè)在微信公眾號(hào)開發(fā)的時(shí)候同樣適用, 我能可以拿到微信服務(wù)器所有的ip,然后添加到入站規(guī)則里就好了.
結(jié)語
看到這里有人可能會(huì)說, 上面這一通和微信公眾號(hào)開發(fā)有毛線關(guān)系? 不要急嘛, 服務(wù)器的搭建是公眾號(hào)開發(fā)的重點(diǎn), 而有了后臺(tái)服務(wù)器的公眾號(hào), 公眾號(hào)便淪為了一個(gè)前端UI, 大部分功能邏輯都要在服務(wù)器端搞定. 所以下篇文章應(yīng)該是如何將公眾號(hào)和我們搭建的服務(wù)器關(guān)聯(lián)起來.
有問題請(qǐng)留言, 有錯(cuò)誤請(qǐng)拍磚, 交流愉快:)