上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Windows+VMware+LAMP+Eclipseで自宅開発環境を構築する
CentOS5.5にnginx0.8.53+node.js0.4.7+Redis2.2.6をインストールする

の続きです。

nginxで一旦全てのリクエストを受け、静的ファイルならnginxで返して、動的ファイルはnode.jsで書いたWebサーバへ渡します。


listen 80;
server_name 本番ドメイン名.dev;
access_log /var/log/nginx/本番ドメイン名;

location ~ \.node$ {
proxy_pass http://localhost:49152;
}

location / {
root /var/www/vhosts/本番ドメイン名/httpdocs;
index index.html;
}



これでhttp://本番ドメイン名.dev/hoge.nodeにアクセスすると502 Bad Gatewayが返ってきます。次にnode.jsでWebサーバを書いて起動させます。

公式に乗ってるサンプルを元に/var/www/vhosts/本番ドメイン名/node/server.jsへ


var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(49152, "localhost");
console.log('Server running at http://localhost:49152/');


を作成。node server.jsでサーバを起動させます。http://本番ドメイン名.dev/test.nodeへアクセスして、Hello Worldされたら動作確認完了。

拡張子.nodeに惹かれたのでこういう設定にしてますが、nginx側に存在しないファイルならnode.jsにプロキシする方式の方が良いかもしれませんね。
スポンサーサイト
Windows+VMware+LAMP+Eclipseで自宅開発環境を構築する

と書いたものの、実際にはLAMPでは無くLinuxNginxRedisNode.jsが目的なのでAMPはインストールしていないわけです。

nginx



省メモリハイパフォーマンスなWebサーバ兼リバースプロキシ。CGI版PHPと組み合わせたりApache+mod_phpの前にリバースプロキシとして置いたり、そういうのは割愛。

標準ではyumから入りませんが、前回EPELリポジトリを追加しているので問題ありません。


yum install nginx
chkconfig nginx on
/etc/rc.d/init.d/nginx start


これでブラウザからCentOSのIPを叩けばスタートページが表示されます。

WS000000.jpg

ただし現時点でインストールされるのは一つ前の安定版であるnginx.x86_64 0:0.8.53-1.el5のようなので、先月リリースされたばかりの1.0を使いたい場合はここら辺が参考になるかもしれません。

後は設定。

vhost毎に設定ファイルを分けたいので、/etc/nginx/nginx.confのhttp{...}内側で


# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/conf.d/vhosts/*.conf;


して/etc/nginx/conf.d/vhosts/本番ドメイン名.confを作成。nginx.confに元から入っているserverはとりあえず放置。PHP+nginxやる場合の例がコメントアウトされているので、そういう時の参考になるかもしれません。


server {
listen 80;
server_name 本番ドメイン名.dev;
access_log /var/log/nginx/本番ドメイン名;

location / {
root /var/www/vhosts/本番ドメイン名/httpdocs;
index index.html;
}
}


設定を変更したらnginx -s reloadで設定の反映。

/var/www/vhosts/本番ドメイン名/httpdocs/test.txtを作成。windowsのhostsを書き換えてアクセスして確認。windows7の場合は先ずメモ帳を管理者権限で起動してから、メニュー経由でhostsを開かないと保存が出来ません。

細かい設定は下記参照。

CoreModule

worker_processesのデフォルトは1。4コアなら4とかにすればいいのかもしれません。

HttpCoreModule

Modules

例えばGzipを使うなら

HttpGzipModule

context: http, server, location, if (x) location

らしいのでhttp内にgzip on;書けばサーバ全体で、server内に書けばそのヴァーチャルホスト内で、locationに書けばそのディレクトリで、gzipが有効になるんでしょう。たぶん。

nginxから始めるWebサーバー構築入門

ハイパフォーマンスHTTPサーバ Nginx入門

Redis



高速なインメモリKVS。

Installation

makeしたらCCなんてコマンドねーよエラーが出たのでyum install gccしてから再度make。/usr/local/bin/に取り合えず入れました。

redis v2.0.3 documentation:設定ファイル

/usr/local/bin/redis-2.2.6/redis.confを変更。


daemonize yes
logfile /var/log/redis
maxmemory 500MB


1GBのマシンなので、とりあえず半分をRedisに割り当てます。実際にはアプリでRedisをどう使うかによって、慎重に検討した方が良いかと思います。maxmemory制限に到達するとまだ期限の来ていないキーや、古いキーを消したり、SETがエラーになったりするそうなので。

今回は、メモリから溢れたキーをディスクにスワップしてくれるRedisVMは使わないので、vm-enabled noのままにしています。どうでもいいですがdaemonize yesって何だか胸がワクワクしますね。


ln -s /usr/local/bin/redis-2.2.6/redis.conf /etc/redis.conf
ln -s /usr/local/bin/redis-2.2.6/src/redis-server /usr/local/bin/redis-server


でパスを通して

/etc/rc.d/init.d/redis-serverを作成。


#! /bin/sh
#
# chkconfig: - 85 15
# description: Redis
# processname: redis-server
#
# Source function library.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n "Starting redis-server services: "
daemon /usr/local/bin/redis-server /etc/redis.conf
echo
touch /var/lock/subsys/redis-server
;;
stop)
echo -n "Stopping redis-server services: "
killproc redis-server
echo
rm -f /var/lock/subsys/redis-server
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: redis-server {start|stop|status|restart}"
exit 1
esac
exit 0
~


Linux How-To 第1回 起動スクリプトを知って基礎を理解しよう


chmod 755 /etc/rc.d/init.d/redis-server
chkconfig --add redis-server
chkconfig redis-server on


で自動起動。

Redis: The Definitive Guide

node.js



前回の手順で既にPython2.4.3とGitは入っているのでok。加えて


yum install gcc-c++
yum install openssl-devel


してから下記手順でインストール。

Building and Installing Node.js


Checking for header port.h : not found
Checking for header sys/event.h : not found
Checking for function kqueue : not found
Checking for library execinfo : not found


とか言われるがとりあえず気にしない。$HOME/local/node/bin/nodeに入りました。


node
console.log("hoge");


でhogeが表示されれば動作確認OK。.exitで対話型シェルを終了。

Ubuntuとかならapt-getで入れればいいんじゃないでしょうか。もしくはnvm

Node.js

VMware・CentOS・Apache・MySQL・PHP・Git



「喫茶店プログラミング」のための環境構築(VMwarePlayer + CentOS5.5+Apache2.2.3+MySQL5.5.8+PHP5.3.5+Ruby1.8.7+おまけ)
を参照。

Samba



CentOS上でVimやらEmacsやらで開発するならこれで終了ですが、Windows上のEclipseから開発したいので、何らかの形でWindowsからCentOSのファイルを触れるようにしなければなりません。VMwareToolsのファイル共有機能を使って繋げる方法もありますが、私の環境だと何か動かなかったので、下記を参照してインストール・設定。

VMware×CentOS×Samba windowsから開発できる環境を作ろう

Eclipse



All in One Eclipseをダウンロードしてインストール。最後にEclipseからGitを操作するため、Egitプラグインをインストールして終了。
隠れアルゴリズマー集まれ

これは面白そうな問題。
やりませんが。

パッと思いつくのは、DOMを生成してDIV要素かTD要素(他にもあるかな?)の中から、最も文字数の多いものを本文要素として判定する方法。

ただ、これだと本文の文字数が少ないエントリーなんかで誤判定してしまいそうなので、加えて本文のテキスト自体から本文文章なのか、別の文章なのかを判断するような何かしらの処理が必要になりそうです。それでも、短い本文とそれよりも長いコメントが一つ付いたケースで正しく判定するのが難しそうですが。

或いは候補要素のブラウザ上での表示位置を取得して、上の方に表示されている候補を本文として選択するようなアプローチとか。


究極的な解決方法として、国内主要ブログサービス全ての本文部分に、それを意味するマイクロフォーマットを埋め込んでくれるようプログラムを修正してくれるプログラムとかはどうでしょう。

RFC1149を参考に適切なプロトコル及び高性能BOTを開発して、クロールさせれば実現出来そうな気がします。言ってみればGoogleの一歩先を行く試みです。

一方、ロシアは営業マンを使った。
copyright © 2005 The elephant vanishes all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。