共计 3788 个字符,预计需要花费 10 分钟才能阅读完成。
本文介绍在 Linux 使用 Python+Nginx+web2py+uWSGI 搭建一个 web 服务器的过程。
Python 2.7.11
解压安装包
tar -zxvf Python-2.7.11.tgz | |
cd Python-2.7.11 | |
yum install sqlite-devel | |
./configure --enable-loadable-sqlite-extensions |
会提示错误
Python build finished, but the necessary bits to build these modules were not found: | |
_ssl _tkinter bsddb185 | |
bz2 dl imageop | |
sunaudiodev | |
To find the necessary bits, look in setup.py in detect_modules() for the module's name. |
需要安装相应的依赖包
yum install openssl-devel
按照依赖包操作,具体可以参照这篇文档 http://www.linuxidc.com/Linux/2016-06/132691.htm
继续安装
make | |
make install | |
rm /usr/bin/python | |
ln -s /usr/local/bin/python2.7 /usr/bin/python |
python
Python 2.7.11 (default, Feb 2 2016, 14:33:40)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
安装 Nginx
tar -zxvf nginx-1.8.0.tar.gz | |
tar -xzvf zlib-1.2.8.tar.gz | |
tar -zxvf pcre-8.37.tar.gz | |
groupadd nginx | |
useradd nginx | |
./configure \ | |
--prefix=/usr/local/nginx \ | |
--user=nginx \ | |
--group=nginx \ | |
--with-pcre=/opt/web/pcre-8.37 \ | |
--with-zlib=/opt/web/zlib-1.2.8 \ | |
--with-http_addition_module \ | |
--with-http_realip_module | |
make | |
make install | |
cd /usr/local/nginx | |
./nginx |
安装 uWSGI
tar -zxvf uwsgi-latest.tar.gz | |
cd uwsgi-2.0.12 | |
python uwsgiconfig.py --build | |
cp uwsgi /usr/sbin |
配置 uWSGI
创建配置文件 /etc/uwsgi/web2py.ini
,并在配置文件中输入以下内容。
[uwsgi] | |
socket = 127.0.0.1:9090 | |
pythonpath = /var/www/html/web2py/ | |
mount = /=wsgihandler:application | |
processes = 4 | |
master = true | |
harakiri = 60 | |
reload-mercy = 8 | |
cpu-affinity = 1 | |
stats = /tmp/%n.stats.socket | |
max-requests = 5000 | |
limit-as = 1024 | |
reload-on-as = 256 | |
reload-on-rss = 192 | |
cron = 0 0 -1 -1 -1 python /var/www/html/web2py/web2py.py -Q -S welcome -M -R scripts/sessions2trash.py -A -o | |
no-orphans = true | |
chmod-socket = 666 |
创建 uWSGI 开关命令。
'#!/bin/sh'# Autor: Nilton OS -- www.linuxpro.com.br | |
'#'# | |
'### BEGIN INIT INFO | |
'# Provides: uwsgi'# Required-Start: $syslog $remote_fs | |
'# Should-Start: $time ypbind smtp'# Required-Stop: $syslog $remote_fs | |
'# Should-Stop: ypbind smtp'# Default-Start: 3 5 | |
'# Default-Stop: 0 1 2 6'### END INIT INFO |
‘# Source function library.
. /etc/rc.d/init.d/functions
‘# Check for missing binaries (stale symlinks should not happen)
UWSGI_BIN=which uwsgi
test -x \(UWSGI_BIN || { echo “\)UWSGI_BIN not installed”;
if [“$1” = “stop” ]; then exit 0;
else exit 5; fi; }
UWSGI_EMPEROR_MODE=true
UWSGI_VASSALS=”/etc/uwsgi/“
UWSGI_OPTIONS=”–enable-threads –logto /var/log/uwsgi/uwsgi.log”
lockfile=/var/lock/subsys/uwsgi
UWSGI_OPTIONS=“$UWSGI_OPTIONS –autoload”
if [“$UWSGI_EMPEROR_MODE” = “true” ] ; then
UWSGI_OPTIONS=”$UWSGI_OPTIONS –emperor $UWSGI_VASSALS”
fi
case "$1" in
start)
echo -n "Starting uWSGI"
daemon $UWSGI_BIN $UWSGI_OPTIONS &
;;
stop)
echo -n "Shutting down uWSGI"
killproc $UWSGI_BIN
;;
restart)
$0 stop
$0 start
;;
status)
echo -n "Checking for service uWSGI"
status $UWSGI_BIN
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0
根据上面的开关命令,还需要增加一个 uWSGI 的日志文件。
mkdir -p /var/log/uwsgi | |
touch /var/log/uwsgi/uwsgi.log |
web2py 安装
所谓的安装只需要将 web2py 的包解压到指定目录就可以,从官网可以下载二进制包。
mkdir /var/www/html | |
unzip web2py_src.zip | |
mv web2py/handlers/wsgihandler.py web2py/wsgihandler.py | |
chown -R nginx:nginx web2py | |
cd web2py | |
sudo -u nginx python -c "from gluon.main import save_password; save_password('password',443)" |
配置 NginX
增加一个 server 模块,监听 80 端口,将访问使用 uWSGI 转移到 web2py。
server { | |
listen 80; | |
server_name YOUR_SERVER_FQDN; |
'#to enable correct use of response.static_version | |
location ~* /(\w+)/static(?:/_[\d]+\.[\d]+\.[\d]+)?/(.*)$ {alias /var/www/html/web2py/applications/$1/static/$2; | |
expires max; | |
} | |
location / {uwsgi_pass 127.0.0.1:9090; | |
uwsgi_pass unix:///var/www/html/web2py/logs/web2py.socket; | |
include /etc/nginx/uwsgi_params; | |
} |
}
启动 Nginx 和 uWSGI
注意:web2py 本身不需要启动,只用被 uWSGI 被动调用即可。
/usr/local/nginx/sbin/nginx | |
/etc/init.d/uwsgi start |
以上执行完后,在浏览器访问服务器的 IP 地址,若需要以下页面则说明部署成功。
Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm
Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm
Nginx+uWSGI+Django+Python 应用架构部署 http://www.linuxidc.com/Linux/2015-10/124183.htm
Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django http://www.linuxidc.com/Linux/2015-04/116397.htm
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-02/128531.htm
