基於python的微信公眾號開發
最近想自學伺服器方面的知識,用微信公眾號開發來練手。閱讀了一些文章,實踐以後總結一下。
租了騰訊雲伺服器,作業系統為 Ubuntu Server 14.04.1 LTS 64位,分配了一個公網IP地址。
Python環境:預設機器一般自帶python2.7
- 基於web.py
安裝web.py: sudo pip install web.py 或者 sudo easy_install web.py
上傳程式碼後執行:sudo python main.py 80 (預設是8080,指定80埠需要sudo許可權)
配置開機啟動:vim /etc/rc.local
加入執行命令即可(sudo python main.py 80)
或者寫一個service放在/etc/init.d/ 目錄(寫法參考該目錄下其他service)
進一步配置參考:
- 基於uwsgi+nginx+Django
原理:the web client
<->the web server(nginx)
<->the socket
<->uwsgi
<->Django
1) django安裝配置
sudo pip install Django
建一個django目錄,進入目錄執行django-admin.py startproject mysite
進入mysite目錄執行
python manage.py startapp weixin
即建立了一個名為mysite 的djangoproject,包含一個名為weixin的django app
進入mysite的mysite目錄
編輯settings.py
在INSTALLED_APP中新增’weixin’
在ALLOWED_HOST中新增本機公網IP:ALLOWED_HOST=['115.159.101.70']
在urls.py中新增
from weixin.views import weixin urlpatterns = [ url(r’^wx/’,weixin), ]
“weixin”對應於django appweixin
注意:
2) nginx安裝配置
sudo apt-getinstall nginx
在/etc/nginx/site-enabled下新建檔案weixin,注意紅色的埠號要和uwsgi配置對應
server {
listen 80;
root projectpath/mysite/weixin;
server_name 115.159.101.70; #伺服器分配的公網IP地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8087;
}
}
sudo nginx -s reload
注:projectpath為/home/ubuntu/.../
檢視端口占用:netstat-ap | grep 90003) uwsgi安裝配置
sudo apt-getinstall libxml2-dev python-dev python-pip
sudo pip installuwsgi
(不要使用sudo apt-getinstall uwsgi)
寫測試成勳test.py測試uwsgi是否工作正常:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return ["Hello World"] # python2
#return [b"Hello World"] # python3
執行/usr/local/bin/uwsgi--http :8000--wsgi-file test.py
或嘗試修復問題
參考http://stackoverflow.com/questions/35460816/uwsgi-http-is-ambiguous)
說明下面3個環節是通暢的
the web client <-> uWSGI<->Python
在mysite工程目錄下新建配置檔案uwsgi.xml,注意紅色的埠號要和nginx配置對應
<uwsgi>
<socket>127.0.0.1:8087</socket>
<chmod-socket>777</chmod-socket>
<pythonpath>projectpath/mysite</pythonpath>
<master>true</master>
<module>mysite.wsgi</module>
<processes>1</processes>
<enable-threads>true</enable-threads>
<logdate>true</logdate>
<harakiri>60</harakiri>
<reload-mercy>8</reload-mercy>
<max-requests>200</max-requests>
<limit-as>512</limit-as>
<reload-on-as>256</reload-on-as>
<reload-on-rss>192</reload-on-rss>
<vacuum/>
<daemonize>/var/log/uwsgi.log</daemonize>
</uwsgi>
然後上傳程式碼views.py,覆蓋原檔案
在django工程mysite目錄下執行: uwsgi-x uwsgi.xml
注:
如啟動中遇到奇怪問題
使用strace -f -o~/uwsgi.trace uwsgi –x uwsgi.xml 檢視日誌
檢視uwsgi程序的方法: ps aux| grep uwsgi
可以用kill -9殺程序參考:
l 基於python(django)+uwsgi+nginx的微信公眾平臺的實現
l 瞭解 用uWSGI 和 nginx 部署 Django:
l 基於nginx和uWSGI在Ubuntu上部署Django
1) 配置supervisor保證uwsgi服務啟動
sudo apt-getinstall supervisor
在/etc/supervisor/conf/目錄下建立.conf檔案
[program:app]
#directory=/home/ubuntu/ #程式執行的目錄,不需要可以不指定
command=uwsgi -x projectpath/mysite/uwsgi.xml
autostart=true
autorestart=true
啟動:sudo supervisord –c/etc/supervisor/supervisord.conf
儲存後執行:sudosupervisorctl reload檢查是否已啟動
以後重啟機器也會自動啟動
但似乎沒有在程序死的時候也重啟,例如sudo kill -9殺程序,沒有重新起來,要研究
其他工具:
開機啟動服務管理sudo apt-get install sysv-rc-conf