概要
Ubuntu Server 12.04 LTS に apt-get で nginx をインストールしようとしたら、nginx のバージョンが古かったのでコンパイルしてインストールした。とりあえずメモしておく。
fabfile
「Fabric」で設定を書いてコンパイルした。
この fabfile だとインストール先は「/opt」の下にしてある。
ユーザは nginx ユーザを想定して作成している。
あまり綺麗な fabfile ではないが、そこまで綺麗に書いても意味ないかも。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.decorators import task
from fabric.api import (
sudo,
run,
cd,
put,
env,
)
@task
def install():
"""
nginx のインストール
"""
# 依存ファイルのインストール
sudo('apt-get install -y gcc')
sudo('apt-get install -y make')
sudo('apt-get install -y libpcre3-dev')
sudo('apt-get install -y libssl-dev')
# nginx
with cd(env.path):
etc_dict = {
'urlpath': 'http://nginx.org/download/',
'ver': '1.2.4',
'data_dir': '/opt/nginx',
'user': 'nginx',
'group': 'nginx',
}
# ディレクトリ用意
sudo('mkdir -p %(data_dir)s/conf' % etc_dict)
sudo('mkdir -p %(data_dir)s/module' % etc_dict)
sudo('mkdir -p %(data_dir)s/var' % etc_dict)
sudo('mkdir -p %(data_dir)s/var/log' % etc_dict)
sudo('mkdir -p %(data_dir)s/var/run' % etc_dict)
sudo('mkdir -p %(data_dir)s/var/lock' % etc_dict)
sudo('mkdir -p %(data_dir)s/var/tmp' % etc_dict)
# ユーザ作成
sudo('useradd -s /bin/false nginx -d /opt/nginx')
# nginx コンパイル
nginx = 'nginx-{ver}'.format(**etc_dict)
run('wget {urlpath}/{nginx}.tar.gz'.format(nginx=nginx, **etc_dict))
run('tar xvfz {nginx}.tar.gz'.format(nginx=nginx))
with cd('{nginx}'.format(nginx=nginx)):
run('./configure '
'--prefix=%(data_dir)s '
'--conf-path=%(data_dir)s/conf/nginx.conf '
'--error-log-path=%(data_dir)s/var/log/nginx-error.log '
'--http-log-path=%(data_dir)s/var/log/nginx-access.log '
'--pid-path=%(data_dir)s/var/run/nginx.pid '
'--lock-path=%(data_dir)s/var/lock/nginx.lock '
'--user=%(user)s '
'--group=%(group)s '
'--with-debug '
'--with-poll_module '
'--with-http_gzip_static_module '
'--with-http_realip_module '
'--with-http_ssl_module '
'--with-http_stub_status_module '
% etc_dict)
run('make')
sudo('make install')
# パーミッションの設定
sudo('chown -R nginx:nginx /opt/nginx')
@task
def setup_nginx():
"""
nginx 設定
"""
# 設定ファイルのアップロード
conf_path = '/opt/nginx/conf/nginx.conf'
put('./fabfile/{conf_path}'.format(conf_path=conf_path),
'{conf_path}'.format(conf_path=conf_path), use_sudo=True)
# パーミッションの設定
sudo('chown -R nginx:nginx {conf_path}'.format(conf_path=conf_path))
nginxの設定ファイル
「nginx.conf」の中身はいいかげんだが以下な感じ。
daemon on;
worker_processes 5;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
error_log /opt/nginx/var/log/nginx-error.log debug;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /opt/www/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# nginx status
location ^~ /nginx_status {
stub_status on;
access_log off;
}
}
}
コンパイルとインストール
fabfileの実行は以下のようにする。
fab -H ホスト install
fab -H ホスト setup_nginx
起動
nginx の起動は以下
sudo su /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
このままだと root ユーザでの起動になってしまう。本当は nginx ユーザで起動したいので、後で設定する。
動作確認
FW設定している場合はポートを開放する。
sudo ufw allow 80/tcp
「http://hostip/」でアクセスして、表示されたら成功。