さくらVPSで一般的な?LAMP環境を構築する

プランが一新され、今借りてるメモリ1.5Gのプランと同じ値段でCPU3コア、メモリ2Gが借りられるということで移行することにした。
その際に、イチから構築したのでその備忘録。

注意

自己流。

とりあえずログイン

VPSの作成が終わるとさくらからメールが来るので、所定のIPおよびアカウント情報を用いてssh接続する。

アカウント周り&SSH周りを変更

rootで弄り続けるのは危ない(と言われている)ので、普段使い用のアカウントを作り、sudo経由で弄れるようにする。
併せて、ssh経由でのrootログインを禁止し、パスフレーズでのsshログインも禁止する。

ユーザー追加

# useradd -g users pull
# passwd pull

# visudo
>> 以下の部分を変更。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
pull    ALL=(ALL)       ALL <- 追加

sshキー作成

# su - pull
$ ssh-keygen -t rsa
$ cd .ssh/
$ chmod 600 *

$ mv id_rsa.pub authorized_keys
>> 本当はこうやった方が意味合い的には良さげ?

$ touch authorized_keys
$ cat id_rsa.pub >> authorized_keys

id_rsaをローカルに移動に移動してわかりやすい名前に変えておく(内容をコピペでも可)。
MacおよびLinuxの場合は「chmod 600 (移動したid_rsa)」をしないと怒られるかも(WinSCPとかPuttyとかFilezilla使う場合は「puttygen」を使ってppk形式に変える必要有り)。

sshd設定

# vi /etc/ssh/sshd.conf
>> 以下の部分を変更

PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no
UsePAM no

作ったユーザーでログイン&sudo確認

ssh -i (ローカルのid_rsa) pull@(ip)
sudo -s

以上が確認できたらrootでログインしているsshを切断して、以降はこのアカウントで構築作業を進める。

remi,rpmforgeリポジトリ入れる

epelはすでに入ってた・・・

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

enable(リポジトリのデフォルト有効化)はまあ、どっちでもいいんじゃないすかね・・・。

dagリポジトリ入れる

# vi /etc/yum.repos.d/dag.repo
[dag]
name=Dag
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag/
enabled=0
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

アップデート

# yum update

途中でGPGキーの警告が出るのでy入力して進める。
ちょっと時間かかる。

Zsh入れる

この辺でいい加減Zshといつもの.zshrcじゃねーからストレス溜まるわ!!!」ってなってくると思います。そういう方はさっさとインストールしてログインシェル変えましょう。

ちなみに、CentOS5.x系においてZshyum経由で入れると日本語入力に難ありなのでいちいちソースから入れてたのですが、6.x系はそのバグが解消された4.3.10がインストールされるようなので*1yumで入れて問題無しです。
ついでに他の環境で使ってるオレオレ仕様の.zshrcを入れておくと良いでしょう(当たり前ですけど元の環境でしか必要ない設定は事前にコメントアウトしてからsourceした方がいいですよ)。

# yum install zsh

$ chsh
>> /bin/zshを指定

「sudo -s」対策(非推奨)

CentOSの5.x系と6.x系で(個人的な観点で)大きく変わっているのは「sudo -s」の挙動だと思われます。

  • ホームディレクトリが変更される(ログインしたユーザーのホームではなく「/root」になる)
  • ログインシェルは変わらないが、.zshrcはやはり「/root」にある.zshrcを読む

多分、これが本来の挙動なんだと思います。前者は別に良いとして、後者はなんとなく落ち着かないので「/root」ディレクトリに先ほど移動させた.zshrcのエイリアスを作成しておきます。

というよりは、「sudo -s」をやめろっていう簡単な話なんでしょうね。。。

# ln -s /home/pull/.zshrc /root/.zshrc

byobu入れる

別にscreenでもいいんですけど。

# yum --enablerepo=epel-testing install byobu

Apache入れる

一時期ソースから入れてたりしましたが、設定ファイルの構成とかが面倒なのでyumから入れるようにします。

yum install httpd httpd-devel

MySQL入れる

remiリポジトリから最新stable(5.5.23)を入れられたりしますが、
ソースらしきものが見当たらなかったりする*2のでrpmから入れます。
MySQLの公式サイト(多分登録が必要・・・)から以下のrpmを落として普通にインストールします。

どうでもいいんですが、MySQL公式のダウンロードページのリスト、ディストリビューションがプルダウンで分かれてるのはいいんですが、その代わりアーキテクチャi686とかx64)とかrpmの種類がごっちゃになってるのでその辺もっと見やすくして欲しいです。。。

インストールする順番はserver入れてその先は適当でいいんじゃないでしょうか。
ちなみに私はserver->client->devel->shared->shared-compat->srcと入れてます。

尚、細かいですが5.x系の時とソースのインストール場所が変わってます。
(5.x系は「/usr/src/redhat/SOURCES/」に入ってたはず・・・)
とりあえず、(MySQL本体を弄らないのであれば)適当なディレクトリに移して解凍しておくといいんじゃないでしょうか。

# mv /root/rpmbuild/SOURCES/mysql-5.5.23.tar.gz /usr/local/src/
# cd /usr/local/src/
# tar xvf mysql-5.5.23.tar.gz

標準的な設定(要はmy.cnfのサンプル)が「/usr/share/mysql」(の中の頭が「my」で始まって「.cnf」でおわるもの)にあるので、適当に「my-large.cnf」あたりをコピーしておけばいいと思います。どうせ後で設定変えますよ!

cp /usr/share/mysql/my-large.cnf /etc/my.cnf

PHP入れる

remiで入れると5.3.10入るんだぜぇ〜!
でもソースからビルドして入れたいぜぇ〜!
yumで入れられるなのにだぜぇ〜!
ワイルドだろぉ〜?

とりあえず、その場合は事前に必要なライブラリ類を入れておかないとconfigureでガンガン引っかかりまくりますのでご注意下さい。

# wget http://jp2.php.net/get/php-5.3.10.tar.bz2/from/jp.php.net/mirror
# tar xvf php-5.3.10.tar.bz2
# cd php-5.3.10/
# yum install zlib-devel libxml2-devel libjpeg-devel libmcrypt-devel libpng-devel openssl-devel expect curl curl-devel bzip2-devel
# ./configure \
--prefix=/usr/local/php \ ; 適宜変える(この場合/usr/local/phpの中にPHPに関するファイルが全部入る)
--with-mysql=/usr/bin/ \ ; この辺環境に応じて
--with-mysqli=mysqlnd \ ; ネイティブドライバ
--with-pdo-mysql=mysqlnd \ ; ネイティブドライバ
--enable-mbstring \
--enable-zend-multibyte \
--with-libdir=lib64 \
--with-gd \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/lib \
--with-apxs2 \
--with-mcrypt \
--with-openssl \
--with-zlib \
--with-bz2 \
--enable-zip \
--with-curl \
--enable-pcntl
# make

makeに割と時間が掛かります。
前にさくらVPSでビルドしたときはするするっと行った気がするんですが、今回はmakeの途中で怒られました。

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] エラー 1

なんかlibmcrypt関連のエラーらしいです。
ここのエラー14を参考にして必要なのをインストールしてからmakeすると今度はちゃんと成功しました。

ちなみに(上記設定だと)設定ファイルの場所は「/usr/local/php/lib/php.ini」になります。
とりあえず標準設定をコピーしておきましょう。

# cp /usr/local/src/php-5.3.10/php.ini-production /usr/local/php/lib/php.ini

設定ファイルの場所はcofigure時のオプション「--with-config-file-path=」で変えられるので、たとえば「/etc/php.ini」にしたい場合は「--with-config-file-path=/etc」とすると良いと思います。

PHPのbinディレクトリをPATHに入れる

上記のように、ソースから入れてprefixを変えた場合、php関係のバイナリが全部prefixで指定したディレクトリ以下のbinディレクトリに入ると思うので、.zshrcなり/etc/profileなりにPATHの設定を追加しておかないとcli環境が使えません(たぶんmod_phpは使える)。

$ vi ~/.zshrc
>> 以下を追加

export PATH=${PATH}:/usr/local/php/bin

pecl installで入れた)エクステンションがインストールされる場所

試しにapcなんかをpeclコマンドで入れると、後ろのほうにインストールしたディレクトリが出てくるはずです。恐らくCentOSであれば以下のような場所にインストールされるはず。。。

# pecl install apc
# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
合計 728
-rw-r--r-- 1 root root 741397  4月 20 17:32 2012 apc.so

php.ini変更

# vi /usr/local/php/lib/php.ini
>> 以下の部分を弄っておけばとりあえずなんとか動くはずです

> 変更
short_open_tag = Off(or On)
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626"
max_execution_time = (適宜)
memory_limit = (適宜)
date.timezone = Asia/Tokyo
session.save_path = "/var/lib/php/session"
mysql.default_socket= /var/lib/mysql/mysql.sock
mysqli.default_socket= /var/lib/mysql/mysql.sock
pdo_mysql.default_socket= /var/lib/mysql/mysql.sock

> 追加
[apc]
extension=apc.so

上記にある通り、session.save_pathを変更した場合、当然そのディレクトリを作成してApacheで読み書きできるようにしておかないとセッション管理が出来ませんのでご注意を。

PHPがちゃんとインストールされてるか確認

# php -v
PHP 5.3.10 (cli) (built: Apr 20 2012 17:24:33) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

# php -m
[PHP Modules]
apc <- あるか確認
bz2
Core
ctype
curl
date
dom
ereg
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
SQLite
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

Apacheの設定にPHPの設定を入れる

mod_phpのロードは(以上のようにソースから入れても)自動的にhttpd.confに入るようなのですが、AddTypeの設定がないとPHPが動かないので入れておきます。

AddType application/x-httpd-php .php

以上のような設定でLAMP環境が構築できました。めでたしめでたし。

*1:もしかしたらリポジトリの違いによる物かもしれない。その辺はよく知りません

*2:ソースがないとインストールできないプラグインがあったりするのでバージョンがちゃんとあったソースが欲しい。。。