FIELD NOTES: 書を持って街へ出よう

合同会社フィールドワークス プログラマ兼代表のブログ

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の設定ファイルを作成します。

$ sudo vim /etc/uwsgi.yaml

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

参照サイト