1. 程式人生 > >基於python的微信公眾號開發

基於python的微信公眾號開發

最近想自學伺服器方面的知識,用微信公眾號開發來練手。閱讀了一些文章,實踐以後總結一下。

租了騰訊雲伺服器,作業系統為 Ubuntu Server 14.04.1 LTS 64位,分配了一個公網IP地址。

Python環境:預設機器一般自帶python2.7

  1. 基於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)

    進一步配置參考:
    ubuntu+uwsgi+nginx+web.py安裝配置記錄http://cn-popeye.iteye.com/blog/1534649

     
  2. 基於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

    進入mysitemysite目錄

    編輯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

目錄下views.py檔案中用來相應http請求的class名

注意:


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 9000


3)  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