Dom0 Debian and DomU CentOS5

Posted by okkez Tue, 18 Nov 2008 13:30:00 GMT

色々やってなんとかなりそう。

DomU に Debian を使うのはすぐにできたけど、 CentOS5 を動く状態にするのがなかなかできなかったのでメモ。

ダメだったやり方を書いているので、参考にしない方がいいと思います。

以下でやるとエラーになってダメだった。

xen-create-image –install-method rinse \ –dist centos5 –arch i386 \ –dhcp –passwd \ –hostname centos5

以下のように修正すると、一応エラーが出ないけどその後がダメだった。

— centos-4.packages 2008-06-29 05:25:58.000000000 +0900 +++ centos-5.packages 2008-11-18 21:05:32.000000000 +0900 @@ -1,12 +1,13 @@ # # Packages which we’ll need to download for a minimal installation -# of CentOS 4.6 +# CentOS 5.0 # MAKEDEV SysVinit audit-libs +authconfig basesystem bash beecrypt @@ -18,6 +19,7 @@ db4 device-mapper e2fsprogs +e2fsprogs-libs elfutils-libelf ethtool expat @@ -33,6 +35,7 @@ initscripts iproute iputils +keyutils-libs krb5-libs libacl libattr @@ -44,6 +47,7 @@ libstdc++ libsysfs libtermcap +libuser libxml2 libxml2-python mcstrans @@ -54,6 +58,7 @@ neon net-tools openssl +passwd pam pcre popt

ダメだった点は以下。

  • rinse の要求するファイルが、 centos5.packages で実際に存在するファイルが centos-5.packages だった -> シンボリックリンクで回避できた
  • root のパスワードを設定していないのに、ログインできない -> シングルユーザモードで起動してから pwconv; passwd で。
  • なんか色々パッケージが足りなくて、まともに動かない -> 諦めた

で、Xen 徹底入門に載ってたやり方で yum を使ってパッケージをインストールした。 ここでも gpg のエラーが出たので、gpg のチェックを無効にしたらとりあえず最後まで行った。

その後、yum groupinstall Base しかしてないので色々入ってないけど、ネットワークもつながるし yum update や yum install も動いているので、問題なく使えそうな状態にできました。

Posted in | コメントはありません |

nginx + webrick でるりまを公開する方法

Posted by okkez Thu, 30 Oct 2008 15:31:00 GMT

nginx と webrick を使用してるりまを公開しているので手順と使っているスクリプトを公開しときます。

nginx の設定は以下。

Debian 風に設定ファイルが分かれているのでそれ以外の人は適当に想像して読み替えてください。

server { listen 80; server_name doc.okkez.net; access_log /var/log/nginx/doc.okkez.net-access.log combined; root /var/www/doc.okkez.net; index index.html; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; #proxy_redirect off; location / { root /var/www/doc.okkez.net; index index.html; } location /archives { autoindex on; } location /180 { include maintenance; proxy_pass http://localhost:8180; break; } # … 180 から 191 までの設定がありますが略 }
以下の点に注意します。 * location /archives は月次リリースのファイル置き場です * location /180 は Ruby1.8.0 用のパスです * location は バージョン番号からドットを取り除いたもの * proxy_pass の最後に指定しているポート番号は 8000 + 上で作成した数値 ### webrick 起動スクリプト 書いてあるとおりなんですが、ポイントは以下。 * DB の作成場所などを工夫してパラメタライズしやすくした * –baseurl オプションを指定すると CGI で作成されるパスがそのパスを起点にしたパスになる * バインドされる IP アドレスは localhost なので安全 * port は nginx の設定で使用したものを使う
#!/bin/sh DB_BASE=$HOME/ruby/rubydoc/refm/api BITCLUST_DIR=$HOME/ruby/bitclust for v in 180 181 182 183 184 185 186 187 188 191 do ruby ${BITCLUST_DIR}/standalone.rb \ –baseurl=http://doc.okkez.net/${v} \ –port=8${v} \ –pid-file=${DB_BASE}/pids/standalone-${v}.pid \ –database=${DB_BASE}/db${v} done
こんな感じです。 ### DB を全て再作成するスクリプト
#!/usr/bin/ruby BITCLUST = ‘/home/xxxx/bin/bitclust’ VERSIONS = %w[ 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.9.1 ] REF_BASE=’/home/xxxx/ruby/rubydoc/refm/api’ def setup_db(version) db = “#{REF_BASE}/db#{version.gsub(/./, ”)}” `rm -rf #{db}` `#{BITCLUST} -d #{db} init version=#{version} encoding=euc-jp` `#{BITCLUST} -d #{db} update –stdlibtree=#{REF_BASE}/src` puts “#{version} is done” end system “svn up -q #{REF_BASE}” VERSIONS.reverse_each do |version| setup_db(version) end
なんとなく Ruby で書いてみた。 ### cron に登録してるスクリプト * このスクリプトが動いている間はメンテナンス中の画面になるようにあらかじめ nginx にも設定しておく * あとは上で作ったスクリプトの組み合わせ * メンテ中でも archives 以下はアクセス可能
#!/bin/sh DOC_BASE=/var/www/doc.okkez.net mv ${DOC_BASE}/system/maintenance.html.no ${DOC_BASE}/system/maitenance.html for f in $(find $HOME/ruby/rubydoc/refm/api/pids -name ‘*.pid’ -print) do kill $(cat ${f}) done $HOME/bin/bc-setup-all $HOME/bin/bc-view-all mv ${DOC_BASE}/system/maintenance.html ${DOC_BASE}/system/maitenance.html.no

こんな感じです。

まとめ

webrick を 10 個も起動しているのがちょっとダサいところなんですが、まあメモリもたくさん積んでいるのでいいのかな、と。

もっといいやり方があったら教えていただけるとうれしいです。

Posted in , | コメントはありません |

nginx + fcgi + php on Debian

Posted by okkez Mon, 20 Oct 2008 12:03:00 GMT

Debian sid で nginx + fcgi + php な環境を作ったのでメモ。

インストール

Debian なので全部パッケージで手に入る。 普通に aptitude で入れれば OK

とりあえず php5-cgi を忘れなければ良い。 ついでに fcgi の起動に spawn-fcgi を使用するので lighttpd を入れておく。

ちなみに自動起動の停止は以下のコマンド。ついでに設定ファイルで listen するポートも変更しておくといいかもしれない。

$ sudo update-rc.d -f lighttpd remove

設定

まずは nginx は以下のような感じで設定します。 Debian での Apache と同じように /etc/nginx/sites-enabled と /etc/nginx/sites-available 以下に virtual host ごとの 設定ファイルを置くようになっているのでそのようにする。基本的には /etc/nginx/nginx.conf はいじらない。

注意するのは以下の点。

  • SCRIPT_FILENAME がフルパスになるようにする
  • 行末のセミコロンを忘れない
  • 設定ファイルの書式チェックは sudo nginx -c nginx.conf -t で行う。
  • リロードは /etc/init.d/nginx reload で。
server { listen 80; server_name xxx.okkez.net; access_log /var/log/nginx/xxx.okkez.net-access.log combined; server_name_in_redirect off; location / { index index.php index.html; root /var/www/xxx.okkez.net; } location ~ .php$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/tmp/php.fastcgi.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/xxx.okkez.net$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location ~ /.ht { deny all; } location ~ /.git { deny all; } }

次に spawn-fcgi を用いて fcgi の起動停止スクリプトを書きます。 私は FreeBSD: Nginx FastCGI PHP Configuration を参考にして UNIX Socket を使用して fcgi を起動するようにしました。

オリジナルとの違いは以下。

  • pcgi_restart で stop -> start の間に sleep を入れた ** 入れないとたまにエラーメッセージを吐くことがあったため
  • fcgi の起動方法を socket にした
  • コマンドのパスを自分の環境に合わせた
#!/bin/sh # NGINX FastCGI php5 startup shell script # Feedback # http://bash.cyberciti.biz/web-server/fastcgi-php-server-start-stop-script/ # Set ME # PROVIDES=php-cgi SPAWN_FCGI=/usr/bin/spawn-fcgi SERVER_IP=127.0.0.1 SERVER_PORT=9000 SERVER_USER=www-data SERVER_GROUP=www-data SOCKET_PATH=/tmp/php.fastcgi.socket PHP_CGI=/usr/bin/php-cgi PGREP=/usr/bin/pgrep KILLALL=/usr/bin/killall ### No editing below #### cmd=$1 pcgi_start(){ echo “Starting $PROVIDES…” #$SPAWN_FCGI -a $SERVER_IP -p $SERVER_PORT -u $SERVER_USER -g $SERVER_GROUP -f $PHP_CGI $SPAWN_FCGI -s $SOCKET_PATH -u $SERVER_USER -g $SERVER_GROUP -f $PHP_CGI } pcgi_stop(){ echo “Killing $PROVIDES…” $KILLALL $PROVIDES } pcgi_restart(){ pcgi_stop sleep 2 pcgi_start } pcgi_status(){ $PGREP $PROVIDES > /dev/null [ $? -eq 0 ] && echo “$PROVIDES running” || echo “$PROVIDES NOT running” } pcgi_help(){ echo “Usage: $0 {start|stop|restart|status}” } case ${cmd} in [Ss][Tt][Aa][Rr][Tt]) pcgi_start;; [Ss][Tt][Oo][Pp]) pcgi_stop;; [Rr][Ee][Ss][Tt][Aa][Rr][Tt]) pcgi_restart;; [Ss][Tt][Aa][Tt][Uu][Ss]) pcgi_status ;; *) pcgi_help ;; esac

こんな感じです。 ローカルでの体感速度はかなり上がった気がします。(サーバもパワーアップしているので一概には言えませんが。。。)

Posted in | コメントはありません |

nginx で combined な log を書く

Posted by okkez Sat, 06 Sep 2008 11:38:00 GMT

NginxHttpLogModule - Nginx Wiki に書いてあるんだけど、ちゃんと読まなくてハマったのでメモ。

log_format combined ‘$remote_addr - $remote_user [$time_local] ’ ‘”$request” $status $body_bytes_sent ’ ‘”$http_referer” “$http_user_agent”’;

って書いてあるけど、直前の行に書いてある通り元から定義されているので nginx.conf に書いてはいけない。 書くとエラーになります。

Posted in | コメントはありません |

nginx + thin

Posted by okkez Mon, 01 Sep 2008 09:30:00 GMT

やってみた。

色々と試行錯誤した結果なんとか安定したのでその手順をメモしておく。

インストール

nginx からソースを落としてビルドする。

$ ./configure –prefix=/usr/local $ make $ sudo make install

Thin - yet another web server は RubyGems でインストールする。

$ sudo gem install thin eventmachine

設定

thin の設定はコマンドラインでサンプルファイルを生成して、 /etc/thin 以下へコピーするだけ。 サーバの数を増やしすぎると、パフォーマンスが悪くなるので程々にしておく。 うちの場合は Rails アプリが三つあるのでそれぞれに二つずつサーバを起動するようにした。

# 三つずつにした場合は極端にパフォーマンスが悪化した。

$ thin config -C thin.yml -s2 -S /tmp/thin-qa.sock -u www-data -g www-data $ vim thin.yml # 都合に合わせて編集する。 $ sudo cp thin.yml /etc/thin/ $ sudo thin install # /etc/init.d/thin を作成する

nginx の設定は Main - Nginx Wiki を参照して行う。

# 一部抜粋 # backend settings upstream thin-typo { server unix:/tmp/thin-typo.0.sock; server unix:/tmp/thin-typo.1.sock; } # virtual host settings # typo (blog) server { listen 80; server_name typo.okkez.net; access_log logs/typo.access.log main; root /home/kenji/ruby/typo/public; index index.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; # static files if (-f $request_filename){ break; } # rails caching if (-f $request_filename.html){ rewrite (.*) $1.html break; } # dynamic request if (!-f $request_filename){ proxy_pass http://thin-typo; break; } } }

移行

  • Apache の設定を変更 (Listen 8080 にする)
  • thin を起動
  • Apache を再起動
  • nginx を起動
  • 動作確認

以降の設定変更は気をつける。

  • thin -C 設定ファイル restart
  • kill -HUP nginx の pid (pid ファイルを参照) ** すぐには反映されないので注意する
  • Apache は普通に再起動する

はまったポイント

  • proxy の設定
  • rewrite の設定
  • 設定の再読み込みが出来ていなかったこと (kill -HUP pid)

疑問点

  • 特定のアプリで prototype.js の読み込みはすぐに終わるのにその後の動きが鈍い ** 読み込まなければ速い

Posted in , | コメントはありません |