部署ubuntu + Nginx + uWSGI + web.py

環境:ubuntu10.10(x64), python2.6


需要安裝:

apt-get install build-essential psmisc python2.6-dev libxml2 libxml2-dev python-setuptools

apt-get install libpcre3-dev build-essential libssl-dev python-pip 
apt-get install mysql-server mysql-client python-mysqldb
apt-get install nginx 


pip install uwsgi
pip install web.py


注意

1.安裝nginx時如果遇到"atal error: Python.h: No such file or directory"說明你需要安裝python2.6-dev

2.安裝python2.6-dev時會遇到"libssl-dev: depends: libssl0.9.8 (= 0.9.8o-1ubuntu4) but 0.9.8o-1ubuntu4 will be installed"

請到http://pkgs.org/download/libssl0.9.8下載對應的libssl包

這裏使用libssl0.9.8_0.9.8o-1ubuntu4_amd64.deb 

3. 安裝mysql-server的時候,使用密碼爲123456


下載:

http://simple-is-better.com/news/309下載基於web.py的事例

這個例子能夠幫助我們學習在部署過程中遇到的各種問題

將simple-todo放到/var/www目錄下

目錄結構如下:

|-- code.py
|-- config/
|   |-- __init__.py
|   |-- settings.py
|   `-- url.py
|-- controllers/
|   |-- __init__.py
|   `-- todo.py
|-- static/
|   |-- images/
|   `-- styles/
|       |-- index/
|       |   |-- images/
|       |   |   `-- website.png
|       |   `-- style.css
|       `-- reset.css
`-- templates/
    |-- error.html
    |-- foot.html
    |-- header.html
    |-- index.html
    `-- todo/
        `-- edit.html



配置:

打開/etc/nginx/conf/nginx.conf(最好做個備份先)

修改server部分,如下:

server {
        #端口號,設置爲8000,防止與80衝突
        listen       8000;

        #域名,在未使用之前請隨便設置,此處僅討論如何在本地搭建serve
        server_name  localhost;

        #log的存放位置
        access_log /var/log/nginx_access.log;
        error_log /var/log/nginx_error.log; 

        location / { 
               include uwsgi_params; 
               uwsgi_pass 127.0.0.1:9001;

                #web site的根目錄
                root   /var/www/simple-todo;
                index  index.html index.htm;
        }



下面先配置並運行一下simple-todo,之後再將其部署在Nginx上

我們有一些數據需要導入到MySQL中

使用mysql -h localhost -u root -p

>123456

進入mysql

然後創建一個新的database

>create database todo;

進入到該database

>use todo;

導入sql語句

> source /var/www/simple-todo/static/sql/todo.sql

插入成功

打開/var/www/simple-todo/config/settings.py

添加mysql的登錄密碼,修改後如下

db = web.database(dbn='mysql', db='todo', user='root', pw='123456')

 

現在新開一個終端,進入到simple-todo輸入python code.py

然後在瀏覽器中訪問http://127.0.0.1:8080

發現從數據庫中讀取的中文顯示爲亂碼,重新插入的數據(中文)則不會有亂碼現象

進入數據庫,進行一些修改:

show variables like 'char%';

發現charset_xx 默認爲latin1

set names 'utf8';

show variables like 'char%';

將其改爲utf8(注意不是utf-8)


將表todo清空,重新插入數據。再次訪問http://127.0.0.1:8080,一切正常

部署:

進入/var/www/simple-todo,運行

$sudo uwsgi -s 127.0.0.1:9001 -w code

這時候訪問http://127.0.0.1:8000(是8000,不是8080)

發現出錯。仔細看終端的信息提示,會發現有錯誤信息

“unable to load app 0 (mountpoint='') (callable not found or import error)”

這樣的話我們需要進入到code.py進行一下修改

我們去掉了if __name__xxx語句,這樣才能保證最終在瀏覽器中顯示正常

修改之後的代碼如下:

#!/usr/bin/env python
# coding: utf-8
from config.url import urls
import web

app = web.application(urls, globals())
application = app.wsgifunc()

參考並感謝wangfsec的文章:http://wangfsec.iteye.com/blog/977361


發佈了26 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章