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

さくらの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

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

さくらの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/

CentOS5.5 に redmine-1.0.2 をインストールする

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

以上です。