Twitter で使用されているオープンソースがまとめられています。
http://twitter.github.com/bootstrap/
Webアプリケーション(サイト)の開発をより簡単にスタートするために設計されたHTML、CSS、およびJSツールキットです
その他、Twitter で使用されているオープンソースまとめはこちら↓
http://twitter.github.com/
jQueryのパフォーマンス高速化Tipsのヒントリストです。
jQueryで要素を選択する最速の方法は、IDによるものです。
$('#content').hide(); $('#content p').hide();
jQueryで2番目に早いセレクタは、タグセレクタ($(’head’))です。
なぜならそれはネイティブJavaScriptメソッド、getElementsByTagName()だからです。
最良の方法は、接頭辞にタグ名(およびIDから派生)を持つクラスです。
var receiveNewsletter = $('#nslForm input.on');
クラスセレクタは、jQueryの最も遅いセレクタのひとつです
可能な限りそれ(タグ名とIDの接頭辞無し)を使用することは避けてください。
例えば、これは遅いです。”content”のIDを探す為に、div要素を全てループするからです。
var content = $('div#content'); // VERY SLOW, AVOID THIS
また、複数のID指定も遅いです。
var traffic_light = $('#content #traffic_light'); // VERY SLOW, AVOID THIS
var header = $('#header'); var menu = header.find('.menu'); // or var menu = $('.menu', header);
var divs = $('.testdiv', '#pageBody'); // 2353 on Firebug 3.6 var divs = $('#pageBody').find('.testdiv'); // 2324 on Firebug 3.6 - The best time var divs = $('#pageBody .testdiv'); // 2469 on Firebug 3.6
セレクタをキャッシュするよりも、チェーンのjQueryメソッドをすると良いでしょう
$('#menu-item').click(function () {alert('test click');}) .css('display', 'block') .css('color', 'red') fadeTo(2, 0.7);
var header = $('#header'); var divs = header.find('div'); var forms = header.find('form');
DOM操作は非常に遅いです。できるだけ少なくしてHTML構造を変更してみてください。
var menu = '<ul id="menu">'; for (var i = 1; i < 100; i++) { menu += '<li>' + i + '</li>'; } menu += '</ul>'; $('#header').prepend(menu); // 代わりにこちら: $('#header').prepend('<ul id="menu"></ul>'); for (var i = 1; i < 100; i++) { $('#menu').append('<li>' + i + '</li>'); }
// Instead of: $(document).ready(function (){ // your code }); // you can do: $(function (){ // your code });
最新バージョンは、通常、最良のものです。ただし、jQueryのコアバージョンを変更した後、コードをテストすることを忘れないでください。時にはそれは完全な下位互換性はありません。
HTML5は軽量なDOM構造の標準を念頭にしています。軽量なDOM構造は、jQueryとロードのパフォーマンスに良い結果をもたらします。
だから、可能な場合はHTML5 を使用。
不要なJSコードとセレクタをロードしないでください。
Google CDNからjQueryをロードする – ユーザーの最寄りのキャッシュの場所からスクリプトを高速に実現します。
// Link the minified version by specific version <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
関連する記事:
Node.js を最近始めました。レスポンスが凄く早くてサクサク気持ちいいです!
リアルタイムが求められるWebアプリケーションには適していると思います。
そんなNode.js を更に高速化する為の10個のヒントを紹介します。
例えば、多くのファイルシステム操作は、非同期やWriteFileおよびwriteFileSyncなどの同期バージョンの両方を持っている。
あなた自身のコード内で同期メソッドを避ける場合であっても、それは誤ってブロッキング呼び出しを持っている外部ライブラリを使用することも可能です。
この操作を行うと、パフォーマンスへの影響は劇的です。
// Good: ファイルを非同期で書き込む fs.writeFile('message.txt', 'Hello Node', function (err) { console.log("It's saved and the server remains responsive!"); }); // BAD: ファイルを同期で書き込む fs.writeFileSync('message.txt', 'Hello Node'); console.log("It's saved, but you just blocked ALL requests!");
Node.js HTTPクライアントは、自動的にソケットプーリング使用しています。
それは深刻なボトルネックになります。これらのシナリオで、それはmaxSocketsを増やしたり、完全にソケットプーリングを無効にすることをお勧めします。
// Disable socket pooling var http = require('http'); var options = {.....}; options.agent = false; var req = http.request(options)
CSSや画像などの静的ファイルの場合は、Node.jsの標準的なWebサーバは使用しない。代わりに例えば、nginx等を使用します。
また、コンテンツデリバリーネットワーク(CDN)も活用する。これには2つの利点があります:
(1)Node.jsのサーバーの負荷を軽減し、
(2)CDNは、静的コンテンツが遅延を低減、ユーザーの近いサーバから配信することができます。
簡単にページのサーバー側とクライアント側のレンダリングを比較してみましょう。
<!-- 簡単なWebページの例は、完全にサーバー側でのレンダリング --> <!DOCTYPE html> <html> <head> <title>Node.js</title> </head> <body> <div class="header"> <img src="http://example.com/images/example.png" alt=""/> </div> <div class="body"> Hello John! </div> </body> </html>
ユーザーの名前を除いて、静的であることに注意してください:
効率的なアプローチは、Node.jsがJSONとしてページに必要な動的データのみを返すようにすることです。
// return json data. {"name": "John"}
ページの残りの部分 – 全て静的なHTMLマークアップは、 – JavaScriptのテンプレートに入れることができます。
<!-- クライアント側でレンダリングすることができるJavaScriptのテンプレートの例 --> <!DOCTYPE html> <html> <head> <title>Node.js</title> </head> <body> <div class="header"> <img src="http://example.com/images/example.png" alt=""/> </div> <div class="body"> Hello <%= name %>! </div> </body> </html>
ほとんどのサーバーとクライアントは、要求と応答の圧縮にはgzip形式をサポートしています。
すべてのブロッキング操作を並列に実行してみてください
それは、リモートサービス、DBの呼び出し、およびファイルシステムへのアクセスへの要求です。
これはどちらかというと、シーケンス内のそれぞれの合計よりもブロック操作の遅いものまで待ち時間が削減されます。
コールバックとエラー処理を清潔に保つために、フロー制御のためのステップを使用してください。
リクエスト/レスポンスのサイクルを管理するためのフレームワークの
ほとんどの例では次の設定が含まれています。
app.use(express.session({ secret: "keyboard cat" }));
デフォルトでは、セッションデータはメモリに格納されています。
MongoDBやRedisのような外部セッションストアに切り替えることもできますが、
セッションのデータをフェッチするリモート呼び出しのオーバーヘッドが生じることになります。
可能であれば、最良のオプションは、すべてにおいて、サーバー側では状態を保存しないことです。
セッション設定上記の明示を含めないことにより自由に移動し、より良いパフォーマンスを得ることができます。
使用可能な場合、バイナリのモジュールを使用してください。例えば、Node.jsが付属してコンパイルされたバージョンにJavaScriptで記述されたSHAモジュールから切り替えたときに、大きなパフォーマンスの改善が見られた。
// Use built in or binary modules var crypto = require('crypto'); var hash = crypto.createHmac("sha1",key).update(signatureBase).digest("base64");
クライアント側のライブラリは通常、ブラウザの違いを克服するために非効率的なコードがたくさんある。
クライアントライブラリの代わりに直接標準的なV8の機能を使用することにより、大幅なパフォーマンス向上が表示されることがあります。
シンプル、軽量をキープするには以下のような質問をする:
“実際にこのモジュールが必要ですか?”
“なぜこのフレームワークを使用している?オーバーヘッドの価値がある?”
“単純な方法でこれを行うことはできますか?”
小型、軽量化コードは通常、より効率的で高速です。
関連する記事:
サーバーで何か問題が発生した場合、解決する為にこれらの監視ツールを使うと良いでしょう。
フリーおよびオープンソースのサーバーおよびネットワークの監視ツールはたくさんあります。
動作DEMO
これはCPU使用率、メモリ、ディスク容量のようなコアのシステムリソース、MySQL、Apacheのようなサーバーアプリケーションを監視することができます。
インストール方法や使い方については、
CentOS 5.4 に munin(サーバー監視ツール) をインストール MRTG/cacti
の記事を参考にしてください。
これはMunin によく似ています。しかし、グラフのサイズを変更し任意の範囲で閲覧出来る事が違う点です。
Munin は1日、1週間、1ヶ月など固定の期間ですが、Cacti は直近の2時間、直近の4日間など自由な期間で表示する事が出来ます。
このツールの提供元は、nagios が”ITインフラ監視の業界標準”であることを述べています。
確かにその通りかも知れません。多くのサイトで利用実績があるようです。
機能的にはNagios と似ています。
こちらもNagios にも劣らず機能豊富です。
動作DEMO
動作DEMO
これは、Zenoss Enterpriseと呼ばれる商用サーバ監視ツールのオープンソース版です。Nagiosのプラグインフォーマットをサポートしているので、様々なNagiosのプラグインはZenossでも利用することができます。
関連する記事:
さくらのVPS Apache+MySQL+PHPのインストール(LAMP環境構築)
さくらのVPSに(CentOS6より良い)Scientific Linux6をインストール
さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール
まずは、最新版のMySQL やPHP を入れるために
・epel
# さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール
# の記事等を実施していて
# 既に入っているのであれば必要ありません。
$ sudo rpm --import http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL-6 $ sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
・remi
$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi $ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
・rpmforge
$ sudo rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt $ sudo rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
$ sudo yum install httpd httpd-devel
下記サイトを参考に実施
参考サイト:)
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編)
http://tanaka.sakura.ad.jp/netservice/vps/
結果:
$ diff httpd.conf.origin httpd.conf 44c44 < ServerTokens OS --- > ServerTokens Prod 70c70 < Timeout 60 --- > Timeout 45 105c105 < MaxSpareServers 20 --- > MaxSpareServers 10 107,108c107,108 < MaxClients 256 < MaxRequestsPerChild 4000 --- > MaxClients 30 > MaxRequestsPerChild 800 119,120c119,120 < StartServers 4 < MaxClients 300 --- > StartServers 2 > MaxClients 150 151c151 < LoadModule auth_digest_module modules/mod_auth_digest.so --- > #LoadModule auth_digest_module modules/mod_auth_digest.so 153,156c153,156 < LoadModule authn_alias_module modules/mod_authn_alias.so < LoadModule authn_anon_module modules/mod_authn_anon.so < LoadModule authn_dbm_module modules/mod_authn_dbm.so < LoadModule authn_default_module modules/mod_authn_default.so --- > #LoadModule authn_alias_module modules/mod_authn_alias.so > #LoadModule authn_anon_module modules/mod_authn_anon.so > #LoadModule authn_dbm_module modules/mod_authn_dbm.so > #LoadModule authn_default_module modules/mod_authn_default.so 159,164c159,164 < LoadModule authz_owner_module modules/mod_authz_owner.so < LoadModule authz_groupfile_module modules/mod_authz_groupfile.so < LoadModule authz_dbm_module modules/mod_authz_dbm.so < LoadModule authz_default_module modules/mod_authz_default.so < LoadModule ldap_module modules/mod_ldap.so < LoadModule authnz_ldap_module modules/mod_authnz_ldap.so --- > #LoadModule authz_owner_module modules/mod_authz_owner.so > #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so > #LoadModule authz_dbm_module modules/mod_authz_dbm.so > #LoadModule authz_default_module modules/mod_authz_default.so > #LoadModule ldap_module modules/mod_ldap.so > #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so 167c167 < LoadModule logio_module modules/mod_logio.so --- > #LoadModule logio_module modules/mod_logio.so 169,172c169,172 < LoadModule ext_filter_module modules/mod_ext_filter.so < LoadModule mime_magic_module modules/mod_mime_magic.so < LoadModule expires_module modules/mod_expires.so < LoadModule deflate_module modules/mod_deflate.so --- > #LoadModule ext_filter_module modules/mod_ext_filter.so > #LoadModule mime_magic_module modules/mod_mime_magic.so > #LoadModule expires_module modules/mod_expires.so > #LoadModule deflate_module modules/mod_deflate.so 174c174 < LoadModule usertrack_module modules/mod_usertrack.so --- > #LoadModule usertrack_module modules/mod_usertrack.so 181c181 < LoadModule dav_fs_module modules/mod_dav_fs.so --- > #LoadModule dav_fs_module modules/mod_dav_fs.so 185,186c185,186 < LoadModule actions_module modules/mod_actions.so < LoadModule speling_module modules/mod_speling.so --- > #LoadModule actions_module modules/mod_actions.so > #LoadModule speling_module modules/mod_speling.so 189c189 < LoadModule substitute_module modules/mod_substitute.so --- > #LoadModule substitute_module modules/mod_substitute.so 193c193 < LoadModule proxy_ftp_module modules/mod_proxy_ftp.so --- > #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so 195,197c195,197 < LoadModule proxy_ajp_module modules/mod_proxy_ajp.so < LoadModule proxy_connect_module modules/mod_proxy_connect.so < LoadModule cache_module modules/mod_cache.so --- > #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so > #LoadModule proxy_connect_module modules/mod_proxy_connect.so > #LoadModule cache_module modules/mod_cache.so 199c199 < LoadModule disk_cache_module modules/mod_disk_cache.so --- > #LoadModule disk_cache_module modules/mod_disk_cache.so 331c331 < Options Indexes FollowSymLinks --- > Options -Indexes FollowSymLinks 493a494,498 > # ログ記録対象外の設定 > # > SetEnvIfNoCase Request_URI "\.(gif|jpg|jpeg|css|png|js)$" nolog_object > > # 526c531 < CustomLog logs/access_log combined --- > CustomLog logs/access_log combined env=!nolog_object 536c541 < ServerSignature On --- > ServerSignature Off 759c764 < AddDefaultCharset UTF-8 --- > #AddDefaultCharset UTF-8
・自動起動ON
$ sudo /sbin/chkconfig httpd on
・httpd起動
$ sudo /etc/init.d/httpd start
$ sudo yum --enablerepo=remi install mysql-{devel,server}
——————-
Cannot find a valid baseurl for repo: remi
※とエラーが出たので、「/etc/yum.repos.d/remi.repo」を修正します。
$ diff remi.repo.origin remi.repo 4c4 < mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror --- > mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
単純に$releasever(多分6.1に展開される)を6 に変えただけです
他に良い方法があるかと思うのですが。。
——————-
・自動起動ON
$ sudo /sbin/chkconfig mysqld on
・MySQL起動
$ sudo /etc/init.d/mysqld start
・安全な利用をする為に以下コマンドを実行
※root のパスワード無しや、デフォルトのtestデータベースを削除する事ができます
$ /usr/bin/mysql_secure_installation 最初はroot ユーザーで接続します(Enterをそのまま押せば良いです) Enter current password for root (enter for none): 次に、root のパスワードを設定するか?と聞かれるのでYES Set root password? [Y/n] y New password: ★お好きなパスワードを入力 Re-enter new password: ★もう一度入力 Password updated successfully! Reloading privilege tables.. ... Success! デフォルトの匿名ユーザーを削除する?YES Remove anonymous users? [Y/n] y リモートからのroot ログインを拒否する?YES Disallow root login remotely? [Y/n] y testデータベースを削除する?YES Remove test database and access to it? [Y/n] y 上記の設定を反映させる?YES Reload privilege tables now? [Y/n] y All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
てな感じになればOKです!
・my.cnf の設定
$ sudo mv /etc/my.cnf /etc/my.cnf.origin $ sudo cp /usr/share/doc/mysql-server-5.5.17/my-medium.cnf /etc/my.cnf $ sudo /etc/init.d/mysqld restart
$ sudo yum --enablerepo=remi install php php-{devel,gd,mbstring,mcrypt,mysql,pear}
・PHPコンパイラのapcをインストール
$ sudo yum --enablerepo=remi install php-pecl-apc
$ sudo yum --enablerepo=remi install phpMyAdmin
$ sudo cp -p /etc/phpMyAdmin/config.inc.php /etc/phpMyAdmin/config.inc.php.origin
※$cfg[‘blowfish_secret’] の値を適当な値に書き換えます
$ sudo vi /etc/httpd/conf.d/phpMyAdmin.conf
※allow from [IPアドレス]
・Apache 再起動
$ sudo /etc/init.d/httpd restart
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編)
http://tanaka.sakura.ad.jp/netservice/vps/
さくら VPS + CentOS のチューニングや高速化もっとこうすれば良かった作業まとめ
http://weble.org/2011/08/14/centos-config
関連する記事:
さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール
さくらのVPSに(CentOSより良い)Scientific Linux6をインストール
まずは、運用ログの監視です。
一日一回、各種ログを読みやすく整形してメールで送ってくれる
logwatch を利用してみましょう。
$ sudo yum install logwatch
インストールできたら、ちゃんと動くか確認してみましょう。
print オプションをつけると、メールが送られずにコンソールに結果が表示されます。
$ sudo /usr/sbin/logwatch --print
設定ファイルは /etc/logwatch/conf/logwatch.conf です。
中を見てみると
# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)
とだけ書かれてますね。
デフォルト設定と違う設定にしたい場合は、このファイルに書いていってください。
デフォルトだと root 宛てにメールを送る設定になってるので以下のような行を追加して、
メールのあて先を変更してください。
MailTo = hoge@example.com
※hoge@example.com は自分のメールアドレスに適宜変更して下さい
・cron の自動実行
logwatch をインストールすると、/etc/cron.daily/0logwatch
が自動で作られていて、1日一回レポートメールを送信するように
なっているので特に作業は必要無いです
より詳しくは以下、参照
@IT:アクセスログの改ざんと検出方法 – Page2
http://www.atmarkit.co.jp/fsecurity/rensai/iprotect06/iprotect02.html
@IT:サーバのログ監視ツールを使いこなそう(3/3)
http://www.atmarkit.co.jp/flinux/rensai/root04/root04c.html
これは、定期的に log を監視して、SSHの総当り攻撃をしてくるIPアドレスを自動的に
/etc/hosts.deny に登録してくれるものです。
・インストール方法
yum リポジトリとして epel が登録されてない場合は、まず epel を登録。
※既にepel が登録されている場合は、作業の必要は無しです。次のyum install に進んでください
$ sudo rpm --import http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL-6 $ sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
yum で denyhosts をインストール
$ sudo yum install denyhosts
denyhosts を起動し、自動起動の設定を行う
$ sudo /etc/init.d/denyhosts start $ sudo /sbin/chkconfig denyhosts on
例外的にアクセスを許可しておきたいIP アドレスが有る場合は
/var/lib/denyhosts/allowed-hosts に記述すればOKです。
不正アクセスを検知した場合 /etc/hosts.deny に追記されていくはずです。
VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定
http://dogmap.jp/2011/05/12/vps-security/
関連する記事:
▼参考サイト
Scientific Linux 6|カスタムOSインストールガイド
http://support.sakura.ad.jp/manual/vps/mainte/custom_scientificlinux.html
上記を参考にまずはインストールと起動まで進める。
その後の設定は以下。
# yum update
※特に更新は無かった
# vi /etc/sysconfig/i18n
LANG="C" ↓ LANG="ja_JP.UTF-8"
# vi /etc/sysconfig/iptables
※以下の内容を書き込む
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
※SSH は後で説明しますが、セキュリティ的にデフォルトの22番ポート
ではなく、任意のポートに変更します
ここでは、10022番にしました
・iptables の再起動
# /etc/init.d/iptables restart
・設定確認
# /sbin/iptables -L
# useradd -m 任意のユーザ名 # passwd 任意のユーザ名
続いて、作成したユーザーがsudo コマンドでroot になれるように
wheel グループに追加
# usermod -G wheel 任意のユーザ名
パスワード無しでsudo が使えるように
# visudo # %wheel ALL=(ALL) NOPASSWD: ALL
※上記のコメント(#)を外す
# cd /home/任意のユーザ名/ # mkdir .ssh # chmod 700 .ssh # vi .ssh/authorized_keys
※公開鍵の作成方法等、詳しくは以下を参照
・公開・秘密鍵ペアの作成
http://9jp.info/archives/11485
# chown -R 任意のユーザ名:任意のユーザ名 .ssh # chmod 600 .ssh/authorized_keys
# vi /etc/sysconfig/sshd
※ポート番号変更
※パスワード認証を拒否
※rootでのログインを拒否
OPTIONS="-p 10022 -o PermitRootLogin=no -o PasswordAuthentication=no"
=============
ほとんどのブログでは「/etc/ssh/sshd_config」を
書き換えているのが主流のようですが、
「/etc/sysconfig/sshd」の方を書き換えた方が
アップデートの時にrpmnewが出来て~、diffして~、書き換えて反映して~
って作業が無くなるので楽だと思います。
=============
# /etc/init.d/sshd restart
ここまでやったら、一旦ログアウトして
作成した一般ユーザーでログイン出来るか試す。
続きの記事は、
「さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール」です
更に続きのLAMP環境構築の記事は、
「さくらのVPS Apache+MySQL+PHPのインストール(LAMP環境構築)」
以上です。
VPSの初期設定とLAMP環境を構築する方法。
http://9jp.info/archives/11485
VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定 : dogmap.jp
http://dogmap.jp/2011/05/12/vps-security/
関連する記事:
DELL等のサーバー消費電力計算ツール
本来の用途はデータセンターやサーバールーム、
ラックの電源計画のために使うのだろうと予想するが、
PowerEdge などサーバー1台だけでも計算できる。
最大負荷時、最小負荷時等の消費電力が分かって便利!
またついでですが、富士通PRIMERGY(プライマジー)サーバーの
消費電力計算ツールもあったので載せておきます。
▼DELL のサーバー消費電力測定ツール
http://www.dell.com/content/topics/topic.aspx/global/products/pedge/topics/en/config_calculator?c=us&cs=555&l=en&s=biz
▼富士通のサーバー消費電力計算・質量確認/計算ツール
http://primeserver.fujitsu.com/primergy/technical/calculate/
CentOS5.5 に redmine-1.0.2 をインストールする
▼必要なパッケージの事前インストール
開発ツール(Cコンパイラ等): $ sudo yum groupinstall "Development Tools" Rubyのビルドに必要なライブラリのヘッダファイル: $ sudo yum install openssl-devel readline-devel zlib-devel MySQLとヘッダファイル: $ sudo yum install mysql-server mysql-devel Apacheとヘッダファイル: $ sudo yum install httpd httpd-devel
▼RubyとPassengerのインストール
Passengerの開発元であるPhusionが開発している
Ruby Enterprise Editionをインストールします。
Ruby Enterprise EditionはRuby 1.8.7をベースに変更を加えたもので、
オリジナルのRubyと比較すると、Passenger上で
Ruby on Railsアプリケーションを実行する際に
メモリ使用量を減らせるというメリットがあるそうです。
また、インストール時にPassengerやRuby用 MySQLデータベースドライバなど
関係するパッケージも同時にインストールされて便利です。
1. Ruby Enterprise Editionのダウンロード
$ cd ~/src/ $ wget http://rubyforge.org/frs/download.php/71096/ruby-enterprise-1.8.7-2010.02.tar.gz
http://www.rubyenterpriseedition.com/download.html
2. インストーラ実行
ダウンロードしたtarballを展開して installer を実行します。
以下のコマンド例においてinstallerが格納されているディレクトリは
Ruby Enterprise Editionのバージョンによって変わります。
適宜読み替えて実行してください。
$ tar zxvf ruby-enterprise-1.8.7-2010.02.tar.gz $ sudo ./ruby-enterprise-1.8.7-2010.02/installer --no-dev-docs
インストーラを実行すると、Ruby Enterprise Editionを
ビルドするのに必要なソフトウェアがOSにインストールされているか
確認が行われます。
不足しているものがあるとエラーが表示され先に進めません。
前述の「必要なパッケージのインストール」を実行していれば、
エラーが発生することなく先に進めるはずです。
Checking for required software... * C compiler... found at /usr/bin/gcc * C++ compiler... found at /usr/bin/g++ * The 'make' tool... found at /usr/bin/make * The 'patch' tool... found at /usr/bin/patch * Zlib development headers... found * OpenSSL development headers... found * GNU Readline development headers... found
必須ソフトウェアのチェックが終わると、
インストール先(Target Directory)の入力を求められます。
デフォルトのインストール先は
“/opt/ruby-enterprise-1.8.7-2009.10 /”などですが、
“/usr/local/”と入力すれば、オリジナルのRubyをビルドしたときと
同様に/usr/local以下にインストールされます。
Target directory Where would you like to install Ruby Enterprise Edition to? (All Ruby Enterprise Edition files will be put inside that directory.) [/opt/ruby-enterprise-1.8.7-2010.02] : /usr/local
本手順ではCentOS にSQLite やPostgreSQL関係のパッケージを
導入していないので途中gemパッケージ”sqlite3-ruby”と
“pg”のインストールに失敗して次のようなエラーが表示されます。
本手順では、MySQLを使う予定なので無視しても問題ありません。
The following gems could not be installed, probably because of an Internet connection error: * sqlite3-ruby * pg
▼PassengerのApache用モジュールのインストール
インストーラを実行し画面の指示に従って操作します。
$ sudo passenger-install-apache2-module
途中でApacheに設定すべき内容が表示されますので控えておきます。
▼Apacheの設定
1. Passengerの設定を追加
/etc/httpd/conf/httpd.confに直接追加してもよいですが、
管理しやすいようPassenger関係の設定は別ファイルにまとめます。
/etc/httpd/conf.d/passenger.conf:
# Passengerの基本設定。 # passenger-install-apache2-moduleインストール中に表示された内容を使用する。 # LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15 PassengerRuby /usr/local/bin/ruby # Passengerが追加するHTTPヘッダを削除するための設定。 # Header always unset "X-Powered-By" Header always unset "X-Rack-Cache" Header always unset "X-Content-Digest" Header always unset "X-Runtime" #---------------------------------------------------------- # 必要に応じてPassengerのチューニングのための設定を追加 # # 参考url: # http://www.modrails.com/documentation/Users%20guide.html#_resource_control_and_optimization_options #---------------------------------------------------------- # 同時に使用できる ROR あるいは Rack アプリケーションの最大数 PassengerMaxPoolSize 30 # 一つのアプリケーションに同時に使用できるアプリケーションインスタンス数の最大数 PassengerMaxInstancesPerApp 4 # アイドル状態のアプリケーションインスタンスが存在している最大秒数 PassengerPoolIdleTime 3600 # 空いているプロセスに対して、効率良くキューを割り振る設定 PassengerUseGlobalQueue on # config/environment.rb等のファイルの存在をチェックする間隔(秒) PassengerStatThrottleRate 10
2. Apacheの起動および自動起動の設定
$ sudo /etc/init.d/httpd start $ sudo /sbin/chkconfig httpd on
▼MySQLの設定
1. デフォルトキャラクタセットをutf8に設定
/etc/my.cnfの [mysqld] セクション、 [mysqld_safe] セクション、
[mysql]セクション にそれぞれ /etc/my.cnfの [mysqld] セクション、
[mysqld_safe] セクション、 [mysql]セクション にそれぞれ
default-character-set=utf8 を追加してください。
/etc/my.cnf:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 innodb_file_per_table default-character-set=utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid default-character-set=utf8 [mysql] default-character-set=utf8
2. MySQLの起動および自動起動の設定
$ sudo /etc/init.d/mysqld start $ sudo /sbin/chkconfig mysqld on
3. rootユーザーのパスワード変更・匿名ユーザー削除
$ mysql -uroot mysql> update user set password=password('********') where user = 'root'; mysql> use mysql; mysql> delete from user where user = ''; mysql> flush privileges; mysql> exit;
4. Redmine用データベースとユーザーの作成
$ mysql -uroot -p mysql> create database db_redmine default character set utf8; mysql> grant all on db_redmine.* to user_redmine identified by '********'; mysql> flush privileges; mysql> exit;
※ ******** の部分は任意のパスワードを設定してください。
このパスワードは後述のdatabase.ymlの設定で使用します。
▼Redmineのインストール
1. redmine-1.0.2 のダウンロード
下記URLからredmine-1.0.2 のtarball(.tar.gz)をダウンロードします。
$ cd ~/src/ $ wget http://rubyforge.org/frs/download.php/72627/redmine-1.0.2.tar.gz
http://rubyforge.org/frs/?group_id=1850
2. ダウンロードしたRedmineの展開と配置
ダウンロードしたRedmineのtarballを展開します。
redmine-1.0.2というディレクトリが作成され、
その下にRedmineを構成するファイル群が作成されます。
$ tar zxvf redmine-1.0.2.tar.gz
Redmineの配置先のディレクトリを決定し、そこへ展開したファイルを移動します。
例えば、/var/www/redmine を配置先とする場合、以下のようにします。
あと、シンボリックリンクも作成しておきます。
$ sudo mv redmine-1.0.2 /var/www $ sudo ln -s /var/www/redmine-1.0.2 /var/www/redmine
3. database.ymlの設定
Redmineを配置したディレクトリに移動します。
$ cd /var/www/redmine
以下の内容でconfig/database.ymlファイルを作成します。
production: adapter: mysql database: db_redmine host: localhost username: user_redmine password: ******** encoding: utf8
※ ******** 部分は、MySQL上に作成したRedmineユーザーのパスワードです。
4. email.ymlの設定
以下の内容でconfig/email.ymlファイルを作成します。
production: delivery_method: :smtp smtp_settings: address: localhost port: 25 domain: host.example.jp
※host.example.jpの部分は、Redmineを実行するサーバのFQDNとしてください。
5. Redmineの初期設定とデータベースのテーブル作成
セッションデータ暗号化用鍵の生成とテーブル作成を行います。
$ sudo rake generate_session_store $ sudo rake db:migrate RAILS_ENV=production
ここで、以下のエラーが出た場合
rack のバージョンエラーのようなので、バージョンを指定して
rack をインストールします。
rake aborted! RubyGem version error: rack(1.2.1 not ~> 1.0.1) $ sudo gem install rack -v=1.0.1
▼Apache上のPassengerでRedmineを実行するための設定
まず、Redmineを配置したディレクト以下のファイルを、
Apacheを実行するユーザー・グループ(CentOSの場合はいずれも”apache”)で
読み書きできるよう、オーナーを変更します。
$ sudo chown -R apache:apache /var/www/redmine-1.0.2
以降、どのような形態(URL)でRedmineを利用するかによって設定が異なります。
今回はバーチャルホストでRedmineを実行とします。
▼バーチャルホストでRedmineを実行する
特定のバーチャルホストでRedmineを実行する設定です。Apacheに以下の設定を追加します。
NameVirtualHosts *:80 ... <VirtualHost *:80> ServerName www.example.jp DocumentRoot /var/www/redmine/public </VirtualHost>
設定後、Apacheを再起動してください。
以上です。
関連する記事:
「ServersMan@VPS」にsubversion をインストールします。
▼subversion
$ sudo yum install subversion mod_dav_svn ※以下の所にファイル等があります /etc/subversion /etc/httpd/conf.d/subversion.conf /usr/share/doc/subversion-1.4.2 $ sudo mkdir /var/www/svn $ sudo svnadmin create /var/www/svn/common $ sudo chown -R daemon:daemon /var/www/svn/ $ sudo svn mkdir file:///var/www/svn/common/trunk file:///var/www/svn/common/tags file:///var/www/svn/common/branches -m "Create trunk, tags, and branches."
$ sudo vi /etc/httpd/conf.d/subversion.conf <Location /svn> DAV svn SVNParentPath /var/www/svn # # Limit write permission to list of valid users. # <LimitExcept GET PROPFIND OPTIONS REPORT> # # Require SSL connection for password protection. # # SSLRequireSSL AuthType Basic AuthName "Authorization svn repos" AuthUserFile /etc/httpd/.htpasswd Require valid-user # </LimitExcept> </Location> $ sudo htpasswd -c /etc/httpd/.htpasswd {USERNAME1} $ sudo /etc/init.d/httpd restart
※確認
http://{YOUERSERVER}/svn/common/
でアクセス出来ればOKかと思います。
関連する記事: