improved scripts/setup-web2py-nginx-uwsgi-on-centos.sh, thanks Alan
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 2.00.0 (2012-07-29 10:32:43) dev
|
||||
Version 2.00.0 (2012-07-29 10:37:01) dev
|
||||
|
||||
@@ -1,257 +1,297 @@
|
||||
# Author: Peter Hutchinson
|
||||
# License: BSD
|
||||
#
|
||||
# Installing Web2py with Nginx and Uwsgi on Centos 5 is really tricky.
|
||||
# There are lots of subtleties of ownership, and one has to take care
|
||||
# when installing python 2.6 not to stop the systems python2.4 from working.
|
||||
# Here is a script that does all the installation from a clean start machine.
|
||||
# The only thing that should need changing for another installation is
|
||||
# the $basearch (base architecture) of the machine. We assume:
|
||||
|
||||
basearch=i386
|
||||
|
||||
# This can be determined by doing 'uname -i'.
|
||||
# This is needed for the nginx installation.
|
||||
# There is one script and three configuration files.
|
||||
|
||||
# install development tools
|
||||
|
||||
yum install gcc gdbm-devel readline-devel ncurses-devel zlib-devel bzip2-devel sqlite-devel db4-devel openssl-devel tk-devel bluez-libs-devel
|
||||
|
||||
# Install python 2.6 without overwriting python 2.4
|
||||
# =================================================
|
||||
|
||||
VERSION=2.6.8
|
||||
mkdir ~/src
|
||||
chmod 777 ~/src
|
||||
cd ~/src
|
||||
wget http://www.python.org/ftp/python/$VERSION/Python-$VERSION.tgz
|
||||
tar xvfz Python-2.6.8.tgz
|
||||
cd Python-2.6.8
|
||||
./configure --prefix=/opt/python2.6 --with-threads --enable-shared
|
||||
make
|
||||
|
||||
# The altinstall ensures that python2.4 is left okay
|
||||
# ==================================================
|
||||
|
||||
make altinstall
|
||||
echo "/opt/python2.6/lib">/etc/ld.so.conf.d/opt-python2.6.conf
|
||||
ldconfig
|
||||
|
||||
# create alias so that python 2.6 can be run with 'python2.6'
|
||||
# ===========================================================
|
||||
|
||||
alias -p python2.6="/opt/python2.6/bin/python2.6"
|
||||
ln -s /opt/python2.6/bin/python2.6 /usr/bin/python2.6
|
||||
|
||||
# Install uwsgi
|
||||
# =========
|
||||
|
||||
version=uwsgi-1.2.3
|
||||
cd /opt/
|
||||
wget http://projects.unbit.it/downloads/$version.tar.gz
|
||||
tar -zxvf $version.tar.gz
|
||||
mv $version/ uwsgi/
|
||||
cd uwsgi/
|
||||
|
||||
# build using python 2.6
|
||||
# ======================
|
||||
|
||||
python2.6 setup.py build
|
||||
python2.6 uwsgiconfig.py --build
|
||||
useradd uwsgi
|
||||
|
||||
# create and own uwsgi log
|
||||
# ========================
|
||||
# Note this log will need emptying from time to time
|
||||
|
||||
echo " ">/var/log/uwsgi.log
|
||||
chown uwsgi /var/log/uwsgi.log
|
||||
|
||||
# Install web2py
|
||||
# ==========
|
||||
|
||||
cd /opt
|
||||
mkdir web-apps
|
||||
cd web-apps
|
||||
wget http://www.web2py.com/examples/static/web2py_src.zip
|
||||
unzip web2py_src.zip
|
||||
|
||||
# set the ownership for web2py application to uwsgi
|
||||
# =================================================
|
||||
|
||||
cd web2py
|
||||
chown -R uwsgi applications
|
||||
chmod -R u+wx applications
|
||||
|
||||
# Now install nginx
|
||||
# =================
|
||||
|
||||
cd /etc/yum.repos.d
|
||||
echo "[nginx]">nginx.repo
|
||||
|
||||
echo "baseurl=http://nginx.org/packages/centos/5/"$basearch$"/">>nginx.repo
|
||||
echo "gpgcheck=0">>nginx.repo
|
||||
echo "enabled=1">>nginx.repo
|
||||
yum install nginx
|
||||
|
||||
# We don't want the defaults, so remove them
|
||||
# ==========================================
|
||||
|
||||
cd /etc/nginx/conf.d
|
||||
mv default.conf default.conf.o
|
||||
mv example_ssl.conf example_ssl.conf.o
|
||||
|
||||
# The following configuration files are also needed
|
||||
# The options for uwsgi are in the following file.
|
||||
# It should be placed in /etc/uwsgi. Other options could be included.
|
||||
|
||||
echo """
|
||||
[uwsgi]
|
||||
|
||||
uuid=uwsgi
|
||||
pythonpath = /opt/web-apps/web2py
|
||||
module = wsgihandler
|
||||
socket=127.0.0.1:9001
|
||||
harakiri 60
|
||||
harakiri-verbose
|
||||
enable-threads
|
||||
daemonize = /var/log/uwsgi.log
|
||||
""" > /etc/uwsgi/uwsgi_for_nginx.conf
|
||||
|
||||
# The next configuration file is for nginx, and goes in /etc/nginx/conf.d
|
||||
# It serves the static diretory of applications directly.
|
||||
# I have not set up ssl because I access web2py admin by using ssh
|
||||
# tunneling and the web2py rocket server.
|
||||
# It should be straightforward to set up the ssl server however.
|
||||
|
||||
echo """
|
||||
server {
|
||||
listen 80;
|
||||
server_name $hostname;
|
||||
location ~* /(\w+)/static/ {
|
||||
root /opt/web-apps/web2py/applications/;
|
||||
}
|
||||
location / {
|
||||
uwsgi_pass 127.0.0.1:9001;
|
||||
include uwsgi_params;
|
||||
}
|
||||
}
|
||||
|
||||
#server {
|
||||
# listen 443;
|
||||
# server_name $hostname;
|
||||
# ssl on;
|
||||
# ssl_certificate /etc/nginx/ssl/web2py.crt;
|
||||
# ssl_certificate_key /etc/nginx/ssl/web2py.key;
|
||||
# location uwsgi_pass 127.0.0.1:9001;
|
||||
# include uwsgi_params;
|
||||
# uwsgi_param UWSGI_SCHEME $scheme;
|
||||
#}
|
||||
""" > /etc/nginx/conf.d/web2py.conf
|
||||
|
||||
# The final configuration file is only needed if you want to run
|
||||
# uwsgi as a service. It should be placed in /etc/init.d
|
||||
|
||||
|
||||
echo """
|
||||
|
||||
#!/bin/bash
|
||||
# uwsgi - Use uwsgi to run python and wsgi web apps.
|
||||
#
|
||||
# chkconfig: - 85 15
|
||||
# description: Use uwsgi to run python and wsgi web apps.
|
||||
# processname: uwsgi
|
||||
# author: Roman Vasilyev
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
###########################
|
||||
PATH=/etc/uwsgi-python:/sbin:/bin:/usr/sbin:/usr/bin
|
||||
PYTHONPATH=/home/www-data/web2py
|
||||
MODULE=wsgihandler
|
||||
prog=/etc/uwsgi-python/uwsgi
|
||||
OWNER=uwsgi
|
||||
# OWNER=nginx ¿?
|
||||
NAME=uwsgi
|
||||
DESC=uwsgi
|
||||
DAEMON_OPTS="-s 127.0.0.1:9001 -M 4 -t 30 -A 4 -p 16 -b 32768 -d /var/log/$NAME.log --pidfile /var/run/$NAME.pid --uid $OWNER --ini-paste /etc/uwsgi-python/uwsgi_for_nginx.conf"
|
||||
##############################
|
||||
|
||||
[ -f /etc/sysconfig/uwsgi ] && . /etc/sysconfig/uwsgi
|
||||
|
||||
lockfile=/var/lock/subsys/uwsgi
|
||||
|
||||
start () {
|
||||
echo -n "Starting $DESC: "
|
||||
daemon $prog $DAEMON_OPTS
|
||||
retval=$?
|
||||
echo
|
||||
[ $retval -eq 0 ] && touch $lockfile
|
||||
return $retval
|
||||
}
|
||||
|
||||
stop () {
|
||||
echo -n "Stopping $DESC: "
|
||||
killproc $prog
|
||||
retval=$?
|
||||
echo
|
||||
[ $retval -eq 0 ] && rm -f $lockfile
|
||||
return $retval
|
||||
}
|
||||
|
||||
reload () {
|
||||
echo "Reloading $NAME"
|
||||
killproc $prog -HUP
|
||||
RETVAL=$?
|
||||
echo
|
||||
}
|
||||
|
||||
force-reload () {
|
||||
echo "Reloading $NAME"
|
||||
killproc $prog -TERM
|
||||
RETVAL=$?
|
||||
echo
|
||||
}
|
||||
|
||||
restart () {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
rh_status () {
|
||||
status $prog
|
||||
}
|
||||
|
||||
rh_status_q() {
|
||||
rh_status >/dev/null 2>&1
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
rh_status_q && exit 0
|
||||
$1
|
||||
;;
|
||||
stop)
|
||||
rh_status_q || exit 0
|
||||
$1
|
||||
;;
|
||||
restart|force-reload)
|
||||
$1
|
||||
;;
|
||||
reload)
|
||||
rh_status_q || exit 7
|
||||
$1
|
||||
;;
|
||||
status)
|
||||
rh_status
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
|
||||
""" > /etc/init.d/uwsgi_nginx
|
||||
#!/bin/bash
|
||||
|
||||
# Script for installing Web2py with Nginx and Uwsgi on Centos 5
|
||||
# Created By Hutchinson
|
||||
# Modified by spametki
|
||||
# License: BSD
|
||||
|
||||
# It was originally posted in this web2py-users group thread:
|
||||
# https://groups.google.com/forum/?fromgroups#!topic/web2py/O4c4Jfr18tM
|
||||
|
||||
# There are lots of subtleties of ownership, and one has to take care
|
||||
# when installing python 2.7 not to stop the systems python2.4 from working.
|
||||
|
||||
# NOTE: The only thing that should need changing for
|
||||
# each installation is the $BASEARCH (base architecture) of the machine.
|
||||
# This is determined by doing uname -i. This is needed for the nginx installation.
|
||||
|
||||
# Retrieve base architecture
|
||||
BASEARCH=$(uname -i)
|
||||
|
||||
echo 'Install development tools (it should take a while)'
|
||||
yum install gcc gdbm-devel readline-devel ncurses-devel zlib-devel \
|
||||
bzip2-devel sqlite-devel db4-devel openssl-devel tk-devel bluez-libs-devel
|
||||
|
||||
echo 'Install python 2.7 without overwriting python 2.4 (no, really, this will take a while too)'
|
||||
|
||||
VERSION=2.7.3
|
||||
cd ~
|
||||
curl -O http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
|
||||
tar -xvfz Python-2.7.3.tgz
|
||||
cd Python-2.7.3
|
||||
./configure --prefix=/opt/python2.7 --with-threads --enable-shared
|
||||
make
|
||||
|
||||
echo 'The altinstall ensures that python2.4 is left okay'
|
||||
make altinstall
|
||||
echo "/opt/python2.7/lib">/etc/ld.so.conf.d/opt-python2.7.conf
|
||||
ldconfig
|
||||
|
||||
echo 'Create alias so that python 2.7 can be run with python2.7'
|
||||
alias -p python2.7="/opt/python2.7/bin/python2.7"
|
||||
ln -s /opt/python2.7/bin/python2.7 /usr/bin/python2.7
|
||||
|
||||
echo 'Install uwsgi'
|
||||
|
||||
version=uwsgi-1.2.3
|
||||
cd ~
|
||||
curl -O http://projects.unbit.it/downloads/$version.tar.gz
|
||||
tar -zxvf $version.tar.gz
|
||||
mkdir /opt/uwsgi-python
|
||||
cp -R ./$version/* /opt/uwsgi-python/*
|
||||
cd /opt/uwsgi-python
|
||||
|
||||
echo 'build using python 2.7'
|
||||
python2.7 setup.py build
|
||||
python2.7 uwsgiconfig.py --build
|
||||
useradd uwsgi
|
||||
|
||||
echo 'Create and own uwsgi log'
|
||||
# Note this log will need emptying from time to time
|
||||
|
||||
touch /var/log/uwsgi.log
|
||||
chown uwsgi /var/log/uwsgi.log
|
||||
|
||||
echo 'Install web2py'
|
||||
|
||||
cd /opt
|
||||
mkdir ./web-apps
|
||||
cd ./web-apps
|
||||
curl -O http://www.web2py.com/examples/static/web2py_src.zip
|
||||
unzip web2py_src.zip
|
||||
|
||||
echo 'Set the ownership for web2py application to uwsgi'
|
||||
cd /opt/web-apps/web2py
|
||||
chown -R uwsgi /opt/web-apps/web2py
|
||||
chmod -R u+rwx ./applications
|
||||
|
||||
echo 'Now install nginx'
|
||||
cd /etc/yum.repos.d
|
||||
echo "[nginx]">nginx.repo
|
||||
|
||||
echo "baseurl=http://nginx.org/packages/centos/5/$BASEARCH/">>nginx.repo
|
||||
echo "gpgcheck=0">>nginx.repo
|
||||
echo "enabled=1">>nginx.repo
|
||||
yum install nginx
|
||||
|
||||
echo "We don't want the defaults, so remove them"
|
||||
cd /etc/nginx/conf.d
|
||||
mv default.conf default.conf.o
|
||||
mv example_ssl.conf example_ssl.conf.o
|
||||
|
||||
echo '
|
||||
The following configuration files are also needed
|
||||
The options for uwsgi are in the following file.
|
||||
Other options could be included.
|
||||
'
|
||||
|
||||
echo 'uwsgi_for_nginx.conf'
|
||||
|
||||
echo '
|
||||
[uwsgi]
|
||||
uuid=uwsgi
|
||||
pythonpath = /opt/web-apps/web2py
|
||||
module = wsgihandler
|
||||
socket=127.0.0.1:9001
|
||||
harakiri 60
|
||||
harakiri-verbose
|
||||
enable-threads
|
||||
daemonize = /var/log/uwsgi.log
|
||||
' > /opt/uwsgi-python/uwsgi_for_nginx.conf
|
||||
|
||||
chmod 755 /opt/uwsgi-python/uwsgi_for_nginx.conf
|
||||
|
||||
echo '
|
||||
The next configuration file is for nginx, and goes in /etc/nginx/conf.d
|
||||
It serves the static directory of applications directly. I have not set up
|
||||
ssl because I access web2py admin by using ssh tunneling and the web2py rocket server.
|
||||
It should be straightforward to set up the ssl server however.
|
||||
'
|
||||
|
||||
echo 'web2py.conf'
|
||||
|
||||
echo '
|
||||
server {
|
||||
listen 80;
|
||||
server_name $hostname;
|
||||
location ~* /(\w+)/static/ {
|
||||
root /opt/web-apps/web2py/applications/;
|
||||
}
|
||||
location / {
|
||||
uwsgi_pass 127.0.0.1:9001;
|
||||
include uwsgi_params;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443;
|
||||
server_name $hostname;
|
||||
ssl on;
|
||||
ssl_certificate /etc/nginx/ssl/web2py.cert;
|
||||
ssl_certificate_key /etc/nginx/ssl/web2py.key;
|
||||
location / {
|
||||
uwsgi_pass 127.0.0.1:9001;
|
||||
include uwsgi_params;
|
||||
uwsgi_param UWSGI_SCHEME $scheme;
|
||||
}
|
||||
}
|
||||
' > /etc/nginx/conf.d/web2py.conf
|
||||
|
||||
|
||||
echo 'Auto-signed ssl certs'
|
||||
mkdir /etc/nginx/ssl
|
||||
echo "creating a self signed certificate"
|
||||
echo "=================================="
|
||||
openssl genrsa 1024 > /etc/nginx/ssl/web2py.key
|
||||
chmod 400 /etc/nginx/ssl/web2py.key
|
||||
openssl req -new -x509 -nodes -sha1 -days 365 -key /etc/nginx/ssl/web2py.key > /etc/nginx/ssl/web2py.cert
|
||||
openssl x509 -noout -fingerprint -text < /etc/nginx/ssl/web2py.cert > /etc/nginx/ssl/web2py.info
|
||||
|
||||
echo 'uwsgi as service'
|
||||
|
||||
echo '
|
||||
#!/bin/bash
|
||||
|
||||
# uwsgi - Use uwsgi to run python and wsgi web apps.
|
||||
#
|
||||
# chkconfig: - 85 15
|
||||
# description: Use uwsgi to run python and wsgi web apps.
|
||||
# processname: uwsgi
|
||||
|
||||
# author: Roman Vasilyev
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
###########################
|
||||
PATH=/opt/uwsgi-python:/sbin:/bin:/usr/sbin:/usr/bin
|
||||
PYTHONPATH=/home/www-data/web2py
|
||||
MODULE=wsgihandler
|
||||
PROG=/opt/uwsgi-python/uwsgi
|
||||
OWNER=uwsgi
|
||||
NAME=uwsgi
|
||||
DESC=uwsgi
|
||||
DAEMON_OPTS="-s 127.0.0.1:9001 -M 4 -t 30 -A 4 -p 16 -b 32768 -d \
|
||||
/var/log/$NAME.log --pidfile /var/run/$NAME.pid --uid $OWNER \
|
||||
--ini-paste /opt/uwsgi-python/uwsgi_for_nginx.conf"
|
||||
##############################
|
||||
|
||||
[ -f /etc/sysconfig/uwsgi ] && . /etc/sysconfig/uwsgi
|
||||
|
||||
lockfile=/var/lock/subsys/uwsgi
|
||||
|
||||
start () {
|
||||
echo -n "Starting $DESC: "
|
||||
daemon $PROG $DAEMON_OPTS
|
||||
retval=$?
|
||||
echo
|
||||
[ $retval -eq 0 ] && touch $lockfile
|
||||
return $retval
|
||||
}
|
||||
|
||||
stop () {
|
||||
echo -n "Stopping $DESC: "
|
||||
killproc $PROG
|
||||
retval=$?
|
||||
echo
|
||||
[ $retval -eq 0 ] && rm -f $lockfile
|
||||
return $retval
|
||||
}
|
||||
|
||||
reload () {
|
||||
echo "Reloading $NAME"
|
||||
killproc $PROG -HUP
|
||||
RETVAL=$?
|
||||
echo
|
||||
}
|
||||
|
||||
force-reload () {
|
||||
echo "Reloading $NAME"
|
||||
killproc $PROG -TERM
|
||||
RETVAL=$?
|
||||
echo
|
||||
}
|
||||
|
||||
restart () {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
rh_status () {
|
||||
status $PROG
|
||||
}
|
||||
|
||||
rh_status_q() {
|
||||
rh_status >/dev/null 2>&1
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
rh_status_q && exit 0
|
||||
$1
|
||||
;;
|
||||
stop)
|
||||
rh_status_q || exit 0
|
||||
$1
|
||||
;;
|
||||
restart|force-reload)
|
||||
$1
|
||||
;;
|
||||
reload)
|
||||
rh_status_q || exit 7
|
||||
$1
|
||||
;;
|
||||
status)
|
||||
rh_status
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
' > /etc/init.d/uwsgi
|
||||
|
||||
chmod 755 /etc/init.d/uwsgi
|
||||
chkconfig --add uwsgi
|
||||
chkconfig uwsgi on
|
||||
|
||||
echo '
|
||||
You can test it with
|
||||
|
||||
service uwsgi start
|
||||
|
||||
and stop it similarly.
|
||||
|
||||
Nginx has automatically been set up as a service
|
||||
if you want to start it run
|
||||
|
||||
service nginx start
|
||||
|
||||
You should find the web2py welcome app will be displayed at your web address.
|
||||
As they are both services, they should automatically start on a system reboot.
|
||||
If you already had a server running, such as apache, you would need to stop
|
||||
that and turn its service off before running nginx.
|
||||
'
|
||||
|
||||
echo 'Turning off apache service'
|
||||
service httpd stop
|
||||
chkconfig httpd off
|
||||
|
||||
echo '
|
||||
Installation complete. You might want to restart your server running
|
||||
|
||||
reboot
|
||||
|
||||
as superuser
|
||||
'
|
||||
|
||||
Reference in New Issue
Block a user