CentOSにnginx+web2pyをインストール
さくらVPS上にnginx+web2pyの構成でWEBサーバを設定する手順をまとめました。 CentOSであれば,概ね同様の手順でインストールできると思います。
前提として,web2pyのファイルは /var/www/web2py に置いているものとします。
nginxのインストール
nginxの公式サイトに書いてあるとおり,yumリポジトリを追加してyumでインストールしてみました。
$ sudo vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
$ sudo yum install nginx
uWSGIのインストール
uWSGIは,pipを使ってインストールしました。
$ sudo yum update
$ sudo yum install python-devel
$ sudo yum install libxml2-devel
$ sudo yum install python-pip$ sudo pip-python install uwsgi
nginxの設定
web2pyに添付されているスクリプト setup-web2py-nginx-uwsgi-ubuntu.sh の中身を切り出して,以下の設定ファイルを作成しました。
$ sudo vim /etc/nginx/conf.d/web2py.conf
server {
listen 80;
server_name $hostname;
location ~* /(\w+)/static/ {
root /var/www/web2py/applications/;
}
location / {
uwsgi_pass 127.0.0.1:9001;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
}
}
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;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
}
}
HTTPS接続を行う場合は,サーバ証明書と秘密鍵を用意して /etc/ngin/ssl 配下に置きます。
uWSGIの設定
uWSGIの設定は,以下の記事を流用させて頂きました。
まず,uWSGIの設定ファイルを作成します。
uwsgi:
socket: 127.0.0.1:9001
pythonpath: /var/www/web2py
module: wsgihandler
processes: 2
daemonize: /var/log/uwsgi-web2py.log
touch-reload: /tmp/reload.txt
最後のtouch-reloadで指定したファイルをtouchコマンドで更新してやると, ソースの修正が反映される仕組みになっています。 uwsgiとDjangoとリロードに, 自動的に反映させる方法が書いてありましたが,こちらは試していません。
次に,uWSGIの起動スクリプトを作成します。
$ sudo vim /etc/sysconfig/uwsgi
# Configuration file for the uwsgi service.
UWSGI=/usr/bin/uwsgi
CONFFILE=/etc/uwsgi.yaml
LOCKFILE=/var/lock/subsys/uwsgi
$ sudo vim /etc/init.d/uwsgi
#!/bin/sh
#
# uwsgi - this script starts and stops the uwsgi daemon
#
# chkconfig: - 85 15
# processname: uwsgi
# config: /etc/uwsgi.yaml
# config: /etc/sysconfig/uwsgi
# pidfile: /var/run/uwsgi.pid
# description: uwsgi is a WSGI server
#
# Source function library.
. /etc/rc.d/init.d/functions
CONFFILE="/etc/uwsgi.yaml"
if [ -f /etc/sysconfig/uwsgi ]; then
. /etc/sysconfig/uwsgi
fi
prog=uwsgi
uwsgi=${NGINX-/usr/bin/uwsgi}
conffile=${CONFFILE-/etc/uwsgi.yaml}
lockfile=${LOCKFILE-/var/lock/subsys/uwsgi}
pidfile=${PIDFILE-/var/run/uwsgi.pid}
RETVAL=0
start() {
echo -n $"Starting $prog: "
#daemon --pidfile=${pidfile} ${uwsgi} --yaml ${conffile}
daemon ${uwsgi} --yaml ${conffile} --pidfile ${pidfile}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} ${prog} -INT
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} ${uwsgi}
RETVAL=$?
;;
restart)
stop
start
;;
*)
echo $"Usage: $prog {start|stop|restart|status}"
RETVAL=2
esac
exit $RETVAL
$ sudo chmod +x /etc/init.d/uwsgi
作成した起動スクリプトをサービスとして登録します。
$ sudo chkconfig --add uwsgi
$ sudo chkconfig on
サービスを開始
最後に,uWSGIとnginxのサービスを開始させます。
$ sudo service uwsgi start
$ sudo service nginx start