如何用python和web.py搭建一个网站

如何用python和web.py搭建一个网站,第1张

一、使用工具:python、web.py

二、搭建步骤:

1、 环境搭建。

安装python2.7.10,注意要把python路径加入系统环境变量。版本不能低于2.7.9,但不能用3.0以上,web.py支持不好。芹激竖安装web.py, 官方网下载来装就行,记得是解压后进去:python setup.py install,安装wingIDE,这个是最好用的python编辑器,装apache并配置python-wscgi,

2. 开发。

建立数据库建议写个生成脚本,比如createDataBase.py,有改动重新运行一遍,不要试用ide去建。

3. 发布网站。

发布网站用apache+pywscgi即可,当然如果用户少需求不高直接在命令行python index.py 8080也能让网站跑起铅铅来,但是这样有几个缺点:

a. 所有到这台服务器这个系统的8080端口访问都变成了这个网站,也就是说如果你无法指定特定域嫌大名了。

b. 静态文件都是每次去读文件非常慢,比如你的网站logo,网站js,字体等,会极大的拖慢网站速度!!!这个非常严重,这个是我试用apache的主要原因。专业服务器程序优化的好,实测快了不少。

三、注意事项:注意要把python路径加入系统环境变量。版本不能低于2.7.9,但不能用3.0以上,web.py支持不好。

基于python的web开发,这里我们使用linux为开发环境,搭建基于nginx + web.py + fastcgi

有些基本基本概念解释下,哈哈,因为我不懂

1.wsgi为Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口

2.uwsgi,另一种python定义的web服务器和web应用的接口

3.REST服务,REST(Representational State Transfer表述性状态转移)是一种针对网络应用的铅燃岁设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

4.CRUD是指在做计段冲算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本 *** 作功能

以下内容主要来自

http://webpy.org/cookbook/fastcgi-nginx

需要的软件

nginx 0.7以上版本,我使用的是nginx 0.9.2

webpy我使用的web.py-0.37

spawn-fcgi 1.6.3

flup 1.0

nginx的配置请参看官方文档

spawn-fcgi是lighttpd的一个子项目用槐睁于多进程管理

webpy和flup安装方式为解压后运行python setup.py install

安装编写index.py

点击(此处)折叠或打开

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import web

urls = ("/.*", "hello")

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

class hello:

def GET(self):

return 'Hello, world!'

if __name__ == "__main__":

web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

app.run()

注意index.py需要使用命令chmod +x index.py加入可执行权限

将index.py放入/data/www(我所使用的目录你可以修改)

修改nginx.conf配置

index要加入index.py

Nginx的配置加入

点击(此处)折叠或打开

location / {

fastcgi_param REQUEST_METHOD $request_method

fastcgi_param QUERY_STRING $query_string

fastcgi_param CONTENT_TYPE $content_type

fastcgi_param CONTENT_LENGTH $content_length

fastcgi_param GATEWAY_INTERFACE CGI/1.1

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version

fastcgi_param REMOTE_ADDR $remote_addr

fastcgi_param REMOTE_PORT $remote_port

fastcgi_param SERVER_ADDR $server_addr

fastcgi_param SERVER_PORT $server_port

fastcgi_param SERVER_NAME $server_name

fastcgi_param SERVER_PROTOCOL $server_protocol

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name

fastcgi_param PATH_INFO $fastcgi_script_name

fastcgi_pass 127.0.0.1:9002

}

使用Spawn-fcgi

spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002

如果报错为126,说明index.py没有可执行权限

netstat -lnp | grep 9002参考是否启动成功

我运行的实际为

spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002 -F 2

启动2个进程

启动nginx

浏览器输入地址

成功结束

安装组件库

第一步安装所需帆桥要的存储库,因为打算用到虚拟环境,用到 pip 安装和管理 Python 组件,所以先更新态凳猛本地包,然后安装组件:

sudo apt-get update

sudo apt-get install python-pip python-dev nginx

创建虚拟环境 virtualenv

在一个系统中创建不同的 Python 隔离环境,相互之间还不会影响,为了使系统保持干净,遂决定用 virtualenv 跑应用程序,创建一个容易识别的目录,开始安装,再创建项目目录 super,然后激活环境:

sudo pip install virtualenv

mkdir ~/supervisor &&cd ~/supervisor

virtualenv super

source super/bin/activate

安装 Flask 框架

好了,现在在虚拟环境里面,开始安装 Flask 框架,flask 依赖两个库粗行 werkzeug 和 jinjia2, 采用 pip 方式安装即可, pip 是一个重要的工具,Python 用它来管理包:

pip install flask

先用 Flask 写一个简单的 Web 服务 myweb.py ,因为后面要做一些测试,所以设置了几个请求:

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

return 'hello world supervisor gunicorn '

@app.route('/1')

def index1():

return 'hello world supervisor gunicorn ffffff'

@app.route('/qw/1')

def indexqw():

return 'hello world supervisor gunicorn fdfdfbdfbfb '

if __name__ == '__main__':

app.debug = True

app.run()

启动 Flask 看看!

python myweb.py

在浏览器中访问 http://127.0.0.1:5000 就可以看到了「几个路径都试一试」

用 Gunicorn 部署 Python Web

现在我们使用 Flask 自带的服务器,完成了 Web 服务的启动。生产环境下,Flask 自带的服务器,无法满足性能要求。所以我们这里采用 Gunicorn 做 wsgi 容器,用来部署 Python,首先还是安装 Gunicorn:

pip install gunicorn

当我们安装好 Gunicorn 之后,需要用 Gunicorn 启动 Flask,Flask 用自带的服务器启动时,Flask 里面的

name 里面的代码启动了 app.run()。而这里我们使用 Gunicorn,myweb.py 就等同于一个库文件,被 Gunicorn

调用,这样启动:

gunicorn -w 4 -b 0.0.0.0:8000 myweb:app

其中 myweb 就是指 myweb.py,app 就是那个 wsgifunc 的名字,这样运行监听 8000 端口,原先的 5000 端口并没有启用,-w 表示开启多少个 worker,-b 表示 Gunicorn 开发的访问地址。

想要结束 Gunicorn 只需执行 pkill Gunicorn,但有时候还要 ps 找到 pid 进程号才能

kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器

---supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。

安装 Supervisor

pip install supervisor

echo_supervisord_conf >supervisor.conf # 生成 supervisor 默认配置文件

gedit supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理

在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的项目目录」

[program:myweb]

command=/home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myweb:app

directory=/home/wang/supervisor

startsecs=0

stopwaitsecs=0

autostart=false

autorestart=false

user=wang

stdout_logfile=/home/wang/supervisor/log/gunicorn.log

stderr_logfile=/home/wang/supervisor/log/gunicorn.err

supervisor 的基本使用命令:

supervisord -c supervisor.conf

supervisorctl -c supervisor.conf status 查看supervisor的状态

supervisorctl -c supervisor.conf reload 重新载入 配置文件

supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor 管理的程序进程

supervisorctl -c supervisor.conf stop [all]|[appname]关闭指定/所有 supervisor 管理的程序进程

supervisor 还有一个 web 的管理界面,可以激活。更改下配置:

[inet_http_server] inet (TCP) server disabled by default

port=127.0.0.1:9001(ip_address:port specifier, *:port for alliface)

username=wang (default is no username (open server)

password=123 (default is no password (open server))

[supervisorctl]

serverurl=unix:///tmp/supervisor.sock use a unix:// URL for a unix socket

serverurl=http://127.0.0.1:9001 use an http:// url to specify an inet socket

username=wang should be same as http_username if set

password=123 should be same as http_password if set

prompt=mysupervisor cmd line prompt (default "supervisor")

history_file=~/.sc_history use readline history if available

现在可以使用 supervsior 启动 gunicorn 啦。运行命令:

supervisord -c supervisor.conf

浏览器访问 http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,访问 http://127.0.0.1:8000 可以看见 gunicorn 启动的返回的页面。

配置 Nginx

前面我们已经在系统环境下安装了 Nginx, 安装好的 Nginx 二进制文件放在 /usr/sbin/ 文件夹下,接下来使用

Supervisor 来管理 Nginx。这里需要注意一个问题,权限问题。Nginx 是 sudo 的方式安装,启动的适合也是 root

用户,那么我们现在也需要用 root 用户启动 supervisor。在 supervisor.conf 下添加配置文件:

[program:nginx]

command=/usr/sbin/nginx

startsecs=0

stopwaitsecs=0

autostart=false

autorestart=false

stdout_logfile=/home/wang/supervisor/log/nginx.log

stderr_logfile=/home/wang/supervisor/log/nginx.err

好了,都配置完之后,启动 supervisor:

supervisord -c supervisor.conf

访问页面,也可以用 ab 进行压力测试:

ab -c 100 -n 100 http://127.0.0.1:8000/qw/1

-c 用于指定压力测试的并发数, -n 用于指定压力测试总共的执行次数。

安装 Python 探针

搭建好了 web,想实时监控应用数据,有什么好的工具,用 OneAPM 的 Python 探针试试,

首先也是安装 Python 探针:

pip install -i http://pypi.oneapm.com/simple --upgrade blueware

根据 License Key 生成配置文件:

blueware-admin generate-config (License Key) = blueware.ini

由于是在虚拟环境下,所以要特别注意路径,修改 supervisor.conf 里面两项:

[program:myapp]

command = /home/wang/supervisor/super/bin/blueware-admin run-program /home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:app

environment = BLUEWARE_CONFIG_FILE=blueware.ini

重启应用

supervisorctl# 进入命令行

supervisor> reload# 重新加载

向上面一样访问页面,也可以用 ab 进行压力测试

几分钟后有下图,可以看到页面加载时间,web 事物,页面吞吐量,其中后面是设置自定义事物「Business Transaction」。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12411872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存