Pages

2011/03/31

PPA版Nginxのコンフィグオプションをチェック

Ubuntu10.10(maverick)などでnginxを使う場合は、公式が用意しているLaunchPadのPPAからStableを使うのがよさそうだ。

インストールして、どんなモジュールが使えるかチェックした。

# nginx -V
nginx version: nginx/0.8.54
TLS SNI support enabled
configure arguments:\
--conf-path=/etc/nginx/nginx.conf\
--error-log-path=/var/log/nginx/error.log\
--http-client-body-temp-path=/var/lib/nginx/body\
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi\
--http-log-path=/var/log/nginx/access.log\
--http-proxy-temp-path=/var/lib/nginx/proxy\
--http-scgi-temp-path=/var/lib/nginx/scgi\
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi\
--lock-path=/var/lock/nginx.lock\
--pid-path=/var/run/nginx.pid\
--with-debug\
--with-http_addition_module\
--with-http_dav_module\
--with-http_geoip_module\
--with-http_gzip_static_module\
--with-http_image_filter_module\
--with-http_realip_module\
--with-http_stub_status_module\
--with-http_ssl_module\
--with-http_sub_module\
--with-http_xslt_module\
--with-ipv6\
--with-sha1=/usr/include/openssl\
--with-md5=/usr/include/openssl\
--with-mail\
--with-mail_ssl_module\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-echo\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-upstream-fair


主要なモジュールに加え、サードパーティのモジュールも入ってますね。
Fairが使えるのは嬉しいのかもしれない。

Nginx用の a2ensite, a2dissite がないのでツールを作る

最近ChefのCookbookを触っているが、Rubyをちゃんと読めるほうが都合がよいので練習がてら。

ubuntuなどのdeb系はapache httpdのサイト管理がよく作られており、サイト単位の有効無効を a2ensite, a2dissiteというツールで切り替えるように工夫がされています。

Nginxでもコマンドでサイト管理やりたいなあと思い作成。
 



使い方


3つのメソッド(サブコマンド)を持ちます、オプションなしでたたくと一応使い方を出すようにしました。


  • list:sites-available にあるコンフィグファイルをリストアップ。
    現在有効なものは+(プラス)を、無効なサイトは-(マイナス)を付与して表示。

  • enable {configfile}:sites-enabled にリンクを作成してnginxをリロード。

  • disable {configfile}:sites-enabled からリンクを削除してnginxをリロード。


 


コマンド例


ngsitectl.rb disable default

とか

ngctlにエイリアスして
ngctl enable example.com

このようにします。


リストはこんな感じで出します。
# ngctl list
- example.com
+ 8082
+ rprox.conf
+ 8081
- default
+ 8083
+ ssl_rprox.conf




リロードがいやな人はコメントアウトしたりgracefulに相当する手続きがあるのでそれを変わりに仕込みましょう。
この辺は改良の余地が大きいですね。
 

コード


自分でつかうのでGithubにも置いてます。
https://github.com/sawanoboly/optools/blob/master/ngsitectl.rb
うちはハイライトしてないからGithubのほうが見やすいですね。

そうそう、1.9.2 p180 で作っているので他のVerについては動くか見てないです。

ngsitectl.rb
#!/usr/bin/env ruby
# encording: utf-8

## Const
AvailDir = "/etc/nginx/sites-available/"
EnableDir = "/etc/nginx/sites-enabled/"


# list up all site and add "+" for enable sites.
def list(sitename)
sitesall = Dir.entries(AvailDir)

# exclude dots
sites = sitesall.select{|elem| elem != "." and elem !=".."}

# enabled sites check.
sites.each do |site|
if File.exist?(EnableDir + site) then
puts "+ " + site
else
puts "- " + site
# File.symlink(AvailDir + site, EnableDir + site)
end
end
end

def enable(sitename)
if File.exist?(EnableDir + sitename) then
puts "Site:" + sitename + " is already enabled.\nDo nothing."
elsif File.exist?(AvailDir + sitename) then
puts "enable: " + sitename
File.symlink(AvailDir + sitename, EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end

def disable(sitename)
if File.exist?(AvailDir + sitename) then
if File.exist?(EnableDir + sitename) then
puts "disable: " + sitename
File.unlink(EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " is already disabled.\nDo nothing."
end
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end


begin
method(ARGV[0]).call(ARGV[1])
rescue TypeError => ex then
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
rescue => ex
puts "Exception " + "#{ex.class}"
puts "#{ex.message}"
puts
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
end

2011/03/26

Ubuntu10.10、Open vSwitch(1.1)でBonding

Linux、特に仮想ホストでブリッジをOpen vSwitchにしておくことは色々と良い気がするのでKVMのホストに導入してみた。
 

さて、Helpを見るとBondingができるようです。

# ovs-vsctl --help
--snip--
Bridge commands:
add-br BRIDGE create a new bridge named BRIDGE
--snip--
Port commands:
add-port BRIDGE PORT add network device PORT to BRIDGE
add-bond BRIDGE PORT IFACE... add bonded port PORT in BRIDGE from IFACES

add-bondなどというサブコマンド。

既存のbondingモジュールを外して設定してみます。
 

2011/03/22

さくらVPSのUbuntu10.10にRuby1.9.2

サーバにOSをインストール(過去記事参照)したら、次に入れるのはRubyだろう。
Chef-clientにするためだ。

最近やっている手順をメモっておく。
※rubyのパッチバージョンは適当に読み替えで。
 

2011/03/21

ネットワーク経由でmembaseとmemcachedを比較

memcachedは便利だがスケールさせるとなるといろいろ考え方がある。

プロダクトもいろいろあるが、memcachedの本家が作っており導入が簡単なmembaseを試してみた。
ネットワーク越しだと割り切ればそれなりだ。

さくらのVPS(1G)にUbuntu10.10をインストール

さくらのVPS(1G)を使おう。入れる予定はChefとSwiftとgit。

シリアルコンソールがつながっているため、手動Netbootなりの方法が使える。
ubuntu10.10を入れてみよう。
 


参考:第154回 さくらVPSへのネットブートインストールをPreseedingで自動化する

手法自体は参考記事の出だし部分があれば大体OKなんだけども、
GRUBの設定を少し修正する必要があった。※元記事はGRUB1, ここでは10.04を一度入れていたのでGRUB2なのです。

menuentry "Ubuntu Netboot Install" {
set root=(hd0,1)
linux /ubuntu/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r
initrd /ubuntu/initrd.gz
}

 


これでOK。
またはGRUBのコンソールで頑張ってもいいけど。
 

2011/03/18

mongoDBを1.6.xから 1.8.0にアップグレードする

monogoDB1.8の正式版がリリースされた。
開発環境にはubuntu10.10Serverにパッケージで入れている1.6.5が動いている。


公式ドキュメントUpgrading to 1.8.0を見ると、バイナリ上書きでOK! みたいなことがあるのでUpgradeしてみた。

気になるレプリカセット構成も順繰りでUpgrade可能だった。