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