第一次在nginx上部署web2py花了我3天时间,找资料找得晕头转向,偏偏google这位大爷的了传染病,已经一个多星期都不能用了。唉,最后在我使尽了坑蒙拐骗偷这个终极绝招,这小子投降了。下面奉上我的部署脚本:
echo 'setup-web2py-nginx-uwsgi-ubuntu-precise.sh'
echo 'Requires Ubuntu > 12.04 and installs Nginx + uWSGI + Web2py'
echo "Web2py admin password:"
read web2py_password
echo "Webfaction application name:"
read webfaction_app_name
echo "Webfaction application port:"
read webfaction_app_port
echo "Port number for communication between nginx and uswgi (eg. 9001):"
read nginx_uwsgi_port
echo "svn_adderess of the project:"
read files_address
echo 'app default_controller:'
read controler
echo 'app default_function:'
read functions
sudo aptitude install subversion
mkdir /opt/${webfaction_app_name}
mkdir /opt/${webfaction_app_name}/down
cd /opt/${webfaction_app_name}/down
echo "install nginx---------------------"
wget http://nginx.org/download/nginx-1.0.11.tar.gz
tar -zxvf nginx-1.0.11.tar.gz
cd nginx-1.0.11
./configure \
--prefix=/opt/${webfaction_app_name}/nginx \
--sbin-path=/opt/${webfaction_app_name}/nginx/sbin/nginx \
--conf-path=/opt/${webfaction_app_name}/nginx/nginx.conf \
--error-log-path=/opt/${webfaction_app_name}/nginx/log/error.log \
--pid-path=/opt/${webfaction_app_name}/nginx/run/nginx.pid \
--lock-path=/opt/${webfaction_app_name}/nginx/lock/nginx.lock \
--with-http_gzip_static_module \
--http-log-path=/opt/${webfaction_app_name}/nginx/log/access.log \
--http-client-body-temp-path=/opt/${webfaction_app_name}/nginx/tmp/client/ \
--http-proxy-temp-path=/opt/${webfaction_app_name}/nginx/tmp/proxy/ \
--http-fastcgi-temp-path=/opt/${webfaction_app_name}/nginx/tmp/fcgi/
make && make install
cd /opt/${webfaction_app_name}/
mkdir logs
mkdir nginx/tmp
mkdir nginx/tmp/client
echo "config nginx----------------"
cd nginx
echo "
worker_processes 2;
events {
worker_connections 1024;
}
http {
access_log /opt/${webfaction_app_name}/logs/access_appname.log combined;
error_log /opt/${webfaction_app_name}/logs/error_appname.log crit;
include mime.types;
client_max_body_size 5m;
default_type application/octet-stream;
gzip_static on;
gzip_vary on;
sendfile on;
tcp_nodelay on;
server {
listen ${webfaction_app_port};
server_name localhost;
location ~* /(\w+)/static/ {
root /opt/${webfaction_app_name}/web2py/applications/;
}
location / {
uwsgi_pass 127.0.0.1:${nginx_uwsgi_port};
include uwsgi_params;
}
}
}
" > nginx.conf
echo "install uwsgi---------------------------------"
cd /opt/${webfaction_app_name}
mkdir uwsgi
cd /opt/${webfaction_app_name}/down
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar -zxvf uwsgi-latest.tar.gz
cd uwsgi-2.0.5.1
make -f Makefile
cp uwsgi /opt/${webfaction_app_name}/uwsgi/
cd /opt/${webfaction_app_name}/uwsgi
echo "<uwsgi>
<socket>127.0.0.1:${nginx_uwsgi_port}</socket>
<workers>4</workers>
<no-orphans/>
<pythonpath>/opt/${webfaction_app_name}/web2py</pythonpath>
<pidfile>/opt/${webfaction_app_name}/uwsgi/uwsgi.pid</pidfile>
<daemonize>/opt/${webfaction_app_name}/uwsgi/uwsgi.log</daemonize>
<mount>/=wsgihandler:application</mount>
</uwsgi>" > uwsgi.xml
echo "install web2py------------------"
cd /opt/${webfaction_app_name}
wget http://www.web2py.com/examples/static/web2py_src.zip
unzip web2py_src.zip
cp web2py/handlers/wsgihandler.py web2py/
cd web2py/
echo "default_application = '${webfaction_app_name}'
default_controller = '${controler}'
default_function = '${functions}'" > routes.py
python -c "from gluon.main import save_password;save_password('${web2py_password}',443)"
cd ..
rm web2py_src.zip
cd /opt/${webfaction_app_name}/web2py/applications/
svn co ${files_address}
cd /opt/${webfaction_app_name}
touch web2py_control.sh
echo "
#!/bin/bash
install_path="/opt/${webfaction_app_name}"
function killall(){
ps -e | grep $1 | {
while read pid tty time cmd;
do
echo "Killing $pid ==> $cmd"
kill -9 $pid
done
}
#exit
}
function service_control(){
if [ $1 = nginx -a $2 = start ]; then
$install_path/$1/sbin/nginx -c $install_path/$1/nginx.conf
echo "nginx start ..... [ok]"
exit
elif [ $1 = nginx -a $2 = stop ]; then
killall $1 -QUIT
echo "nginx stop ...... [ok]"
exit
elif [ $1 = nginx -a $2 = restart ]; then
killall $1 -QUIT
$install_path/$1/sbin/nginx -c $install_path/$1/nginx.conf
echo "nginx restart ..... [ok]"
exit
elif [ $1 = "uwsgi" -a $2 = start ];then
$install_path/$1/uwsgi -x $install_path/$1/uwsgi.xml
echo "uwsgi start ...... [ok]"
exit
elif [ $1 = "uwsgi" -a $2 = stop ];then
killall $1 -QUIT
echo "uwsgi stop ...... [ok]"
exit
elif [ $1 = "uwsgi" -a $2 = restart ];then
killall $1 -QUIT
$install_path/$1/uwsgi -x $install_path/$1/uwsgi.xml
echo "uwsgi restart ......[ok]"
exit
fi
}
service_control $1 $2"> web2py_control.sh
chmod +x web2py_control.sh
/opt/${webfaction_app_name}/nginx/sbin/nginx -c /home/${webfaction_app_name}/nginx/nginx.conf
/opt/${webfaction_app_name}/uwsgi/uwsgi -x /opt/${webfaction_app_name}/uwsgi/uwsgi.xml
rm -rf down