さくらVPSで一般的な?LAMP環境を構築する
プランが一新され、今借りてるメモリ1.5Gのプランと同じ値段でCPU3コア、メモリ2Gが借りられるということで移行することにした。
その際に、イチから構築したのでその備忘録。
注意
自己流。
アカウント周り&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系においてZshをyum経由で入れると日本語入力に難ありなのでいちいちソースから入れてたのですが、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
MySQL入れる
remiリポジトリから最新stable(5.5.23)を入れられたりしますが、
ソースらしきものが見当たらなかったりする*2のでrpmから入れます。
MySQLの公式サイト(多分登録が必要・・・)から以下のrpmを落として普通にインストールします。
- MySQL-5.5.23-1.el6.src.rpm
- MySQL-client-5.5.23-1.el6.x86_64.rpm
- MySQL-devel-5.5.23-1.el6.x86_64.rpm
- MySQL-server-5.5.23-1.el6.x86_64.rpm
- MySQL-shared-5.5.23-1.el6.x86_64.rpm
- MySQL-shared-compat-5.5.23-1.el6.x86_64.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]