Webエンジニアのメモ View RSS

SELECT * FROM engineer_life;
Hide details



月刊「Twitter で使用されているオープンソースまとめ」 31 Jan 2012 7:09 AM (13 years ago)

Twitter で使用されているオープンソースがまとめられています。

bootstrap

http://twitter.github.com/bootstrap/

Webアプリケーション(サイト)の開発をより簡単にスタートするために設計されたHTML、CSS、およびJSツールキットです

その他、Twitter で使用されているオープンソースまとめはこちら↓
http://twitter.github.com/

関連する記事:

  1. scriptaculous.jsのエフェクト(Highlight)使用方法
  2. 2008年6月のアクセス数の多かった人気記事TOP5
  3. 2008年7月のアクセス数の多かった人気記事ベスト5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

jQueryのパフォーマンス高速化Tipsまとめ 25 Dec 2011 1:48 PM (13 years ago)

jquery-logo

jQueryのパフォーマンス高速化Tipsのヒントリストです。

セレクタのパフォーマンスのヒント

1. 常に#ID から辿る

jQueryで要素を選択する最速の方法は、IDによるものです。

$('#content').hide();
$('#content p').hide();

2. クラスの前にタグを使用

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

3. サブクエリを使用

var header = $('#header');

var menu = header.find('.menu');
// or
var menu = $('.menu', header);

4. find()を使用

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

5. チェーンメソッドを活用

セレクタをキャッシュするよりも、チェーンのjQueryメソッドをすると良いでしょう

$('#menu-item').click(function () {alert('test click');})
                     .css('display', 'block')
                     .css('color', 'red')
                     fadeTo(2, 0.7);

DOM操作のパフォーマンスのヒント

6. jQueryオブジェクトをキャッシュ

var header = $('#header');
var divs = header.find('div');
var forms = header.find('form');

7. DOM挿入のいずれかの種類を実行するときに単一の要素のすべてをラップする

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>');
}

イベントのパフォーマンスのヒント

8. readyイベント

// Instead of:
$(document).ready(function (){
    // your code
});

// you can do:

$(function (){
    // your code
});

一般的なjQueryのパフォーマンスのヒント

9. jQueryの最新バージョンを使用

最新バージョンは、通常、最良のものです。ただし、jQueryのコアバージョンを変更した後、コードをテストすることを忘れないでください。時にはそれは完全な下位互換性はありません。

10. HTML 5を使用

HTML5は軽量なDOM構造の標準を念頭にしています。軽量なDOM構造は、jQueryとロードのパフォーマンスに良い結果をもたらします。
だから、可能な場合はHTML5 を使用。

11. 必要とされていないコードをロードしない

不要なJSコードとセレクタをロードしないでください。

12. Googleソースコードからフレームワークをロードする

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>

関連する記事:

  1. scriptaculous.jsのエフェクト(Highlight)使用方法
  2. headerでLocationする時のtarget指定について
  3. XHTML(Valid)規格に準じたFlashソースの書き方

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Node.js パフォーマンス高速化の為の10個のヒント 24 Dec 2011 10:25 PM (13 years ago)

nodejs-logo

Node.js を最近始めました。レスポンスが凄く早くてサクサク気持ちいいです!
リアルタイムが求められるWebアプリケーションには適していると思います。

そんなNode.js を更に高速化する為の10個のヒントを紹介します。

1. 同期コードを避ける

例えば、多くのファイルシステム操作は、非同期や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!");

2. ソケットプーリングをオフにする

Node.js HTTPクライアントは、自動的にソケットプーリング使用しています。
それは深刻なボトルネックになります。これらのシナリオで、それはmaxSocketsを増やしたり、完全にソケットプーリングを無効にすることをお勧めします。

// Disable socket pooling

var http = require('http');
var options = {.....};
options.agent = false;
var req = http.request(options)

3. 静的ファイルにはNode.jsを使用しないでください

CSSや画像などの静的ファイルの場合は、Node.jsの標準的なWebサーバは使用しない。代わりに例えば、nginx等を使用します。
また、コンテンツデリバリーネットワーク(CDN)も活用する。これには2つの利点があります:
(1)Node.jsのサーバーの負荷を軽減し、
(2)CDNは、静的コンテンツが遅延を低減、ユーザーの近いサーバから配信することができます。

4. クライアント側でレンダリングする

簡単にページのサーバー側とクライアント側のレンダリングを比較してみましょう。

<!-- 簡単な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>

5. gzipを使用してください

ほとんどのサーバーとクライアントは、要求と応答の圧縮にはgzip形式をサポートしています。

6. 並列処理を活用してください

すべてのブロッキング操作を並列に実行してみてください
それは、リモートサービス、DBの呼び出し、およびファイルシステムへのアクセスへの要求です。
これはどちらかというと、シーケンス内のそれぞれの合計よりもブロック操作の遅いものまで待ち時間が削減されます。
コールバックとエラー処理を清潔に保つために、フロー制御のためのステップを使用してください。

7. Go session-free

リクエスト/レスポンスのサイクルを管理するためのフレームワークの
ほとんどの例では次の設定が含まれています。

app.use(express.session({ secret: "keyboard cat" }));

デフォルトでは、セッションデータはメモリに格納されています。
MongoDBやRedisのような外部セッションストアに切り替えることもできますが、
セッションのデータをフェッチするリモート呼び出しのオーバーヘッドが生じることになります。
可能であれば、最良のオプションは、すべてにおいて、サーバー側では状態を保存しないことです。
セッション設定上記の明示を含めないことにより自由に移動し、より良いパフォーマンスを得ることができます。

8. バイナリモジュールを使用

使用可能な場合、バイナリのモジュールを使用してください。例えば、Node.jsが付属してコンパイルされたバージョンにJavaScriptで記述されたSHAモジュールから切り替えたときに、大きなパフォーマンスの改善が見られた。

// Use built in or binary modules
var crypto = require('crypto');
var hash = crypto.createHmac("sha1",key).update(signatureBase).digest("base64");

9. クライアント側のライブラリの代わりに、標準的なV8のJavaScriptを使用

クライアント側のライブラリは通常、ブラウザの違いを克服するために非効率的なコードがたくさんある。
クライアントライブラリの代わりに直接標準的なV8の機能を使用することにより、大幅なパフォーマンス向上が表示されることがあります。

10. コードはシンプル、軽量をキープしてください

シンプル、軽量をキープするには以下のような質問をする:
“実際にこのモジュールが必要ですか?”
“なぜこのフレームワークを使用している?オーバーヘッドの価値がある?”
“単純な方法でこれを行うことはできますか?”

小型、軽量化コードは通常、より効率的で高速です。

関連する記事:

  1. scriptaculous.jsのエフェクト(Highlight)使用方法
  2. headerでLocationする時のtarget指定について
  3. テキストエリア等の入力フォームをリサイズ可能にするJavaScript

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

知っておきたい8つのサーバーリソース(ネットワーク)監視ツール 30 Nov 2011 2:16 PM (13 years ago)

サーバーで何か問題が発生した場合、解決する為にこれらの監視ツールを使うと良いでしょう。

フリーおよびオープンソースのサーバーおよびネットワークの監視ツールはたくさんあります。

1.Munin

munin-graph
munin-graph

動作DEMO

これはCPU使用率、メモリ、ディスク容量のようなコアのシステムリソース、MySQL、Apacheのようなサーバーアプリケーションを監視することができます。

インストール方法や使い方については、
CentOS 5.4 に munin(サーバー監視ツール) をインストール MRTG/cacti
の記事を参考にしてください。

2.Cacti

cacti
cacti

これはMunin によく似ています。しかし、グラフのサイズを変更し任意の範囲で閲覧出来る事が違う点です。
Munin は1日、1週間、1ヶ月など固定の期間ですが、Cacti は直近の2時間、直近の4日間など自由な期間で表示する事が出来ます。

3.Nagios

nagios
nagios

このツールの提供元は、nagios が”ITインフラ監視の業界標準”であることを述べています。
確かにその通りかも知れません。多くのサイトで利用実績があるようです。

動作DEMO

4.Zabbix

zabbix
zabbix

機能的にはNagios と似ています。

5.observium

observium
observium

こちらもNagios にも劣らず機能豊富です。
動作DEMO

6.ganglia

ganglia
ganglia

動作DEMO

7.monit

monit
monit

8.zenoss

zenoss
zenoss

これは、Zenoss Enterpriseと呼ばれる商用サーバ監視ツールのオープンソース版です。Nagiosのプラグインフォーマットをサポートしているので、様々なNagiosのプラグインはZenossでも利用することができます。

関連する記事:

  1. CentOS 5.4 に munin(サーバー監視ツール) をインストール MRTG/cacti
  2. さくらのVPS Apache+MySQL+PHPのインストール(LAMP環境構築)
  3. CentOS5.5にPHP5.3 やMySQL5.1 などの最新版をyum でインストールする方法

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

さくらのVPS Apache+MySQL+PHPのインストール(LAMP環境構築) 21 Nov 2011 4:12 PM (13 years ago)

さくらのVPS Apache+MySQL+PHPのインストール(LAMP環境構築)

さくらのVPS

こちらの記事の続きという位置付なので事前に読んでおくと幸せになれるかも:)

さくらのVPSに(CentOS6より良い)Scientific Linux6をインストール
さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール

まずは、最新版のMySQL やPHP を入れるために

yum リポジトリの追加

・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

Apache のインストール

$ sudo yum install httpd httpd-devel

Apache の不要なモジュール読み込み停止など

下記サイトを参考に実施

参考サイト:)
ウェブ開発者のための、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

MySQL のインストール

$ 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 に変えただけです
他に良い方法があるかと思うのですが。。
——————-

MySQLの設定(安全な設定やmy.cnfなど)

・自動起動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

PHP のインストール

$ sudo yum --enablerepo=remi install php php-{devel,gd,mbstring,mcrypt,mysql,pear}

・PHPコンパイラのapcをインストール

$ sudo yum --enablerepo=remi install php-pecl-apc

phpMyAdminのインストール

$ 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

関連する記事:

  1. さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール
  2. 「ServersMan@VPS」にPHP5.3,MySQL5.1,PostgreSQL8 をインストールする
  3. MySQL – データベース一覧を表示する方法

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール 21 Nov 2011 4:31 AM (13 years ago)

さくらのVPS ログレポート(logwatch)と不正アクセス拒否(denyhosts)のインストール

denyhosts

こちらの記事も参考に読まれると幸せになれるかも:)

さくらのVPSに(CentOSより良い)Scientific Linux6をインストール

ログレポート(logwatch)のインストールと設定

まずは、運用ログの監視です。
一日一回、各種ログを読みやすく整形してメールで送ってくれる
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

不正アクセス拒否(denyhosts)のインストール

これは、定期的に 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/

関連する記事:

  1. さくらのVPSに(CentOS6より良い)Scientific Linux6をインストール
  2. [Linux]ソフトウェアのインストール時にやってしまいがちな失敗10選
  3. CentOS 5.4 に munin(サーバー監視ツール) をインストール MRTG/cacti

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

さくらのVPSに(CentOS6より良い)Scientific Linux6をインストール 17 Nov 2011 6:07 PM (13 years ago)

Scientific Linux

▼参考サイト
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"

iptables の設定

# 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

SSH設定の変更

# vi /etc/sysconfig/sshd

※ポート番号変更
※パスワード認証を拒否
※rootでのログインを拒否

OPTIONS="-p 10022 -o PermitRootLogin=no -o PasswordAuthentication=no"

=============
ほとんどのブログでは「/etc/ssh/sshd_config」を
書き換えているのが主流のようですが、

「/etc/sysconfig/sshd」の方を書き換えた方が
アップデートの時にrpmnewが出来て~、diffして~、書き換えて反映して~
って作業が無くなるので楽だと思います。
=============

SSHの再起動

# /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/

関連する記事:

  1. [Linux]ソフトウェアのインストール時にやってしまいがちな失敗10選
  2. CentOS5.5にPHP5.3 やMySQL5.1 などの最新版をyum でインストールする方法
  3. 送受信メールサーバー構築設定(sendmail+Dovecot)

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

DELL等のサーバー消費電力計算ツール 18 Oct 2010 6:46 PM (14 years ago)

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/

関連する記事:

  1. DELL タワー型サーバー SC440 激安特価!
  2. 最近欲しい(読みたい)と思う本
  3. rootアカウントのパスワードを忘れてしまった時の対処法。

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

CentOS5.5 に redmine-1.0.2 をインストールする 3 Oct 2010 3:32 PM (14 years ago)

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を再起動してください。

以上です。

関連する記事:

  1. CentOS5.5にPHP5.3 やMySQL5.1 などの最新版をyum でインストールする方法
  2. 「ServersMan@VPS」にPHP5.3,MySQL5.1,PostgreSQL8 をインストールする
  3. 「ServersMan@VPS」にsubversion をインストールする

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

「ServersMan@VPS」にsubversion をインストールする 21 Aug 2010 9:03 PM (14 years ago)

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かと思います。

関連する記事:

  1. 「ServersMan@VPS」にPHP5.3,MySQL5.1,PostgreSQL8 をインストールする
  2. 送受信メールサーバー構築設定(sendmail+Dovecot)
  3. 最近欲しい(読みたい)と思う本

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?