前提
- CentOS 5.9 インストール済み
- CUI で SSH 接続可能
- CentOS に IP アドレス割り振り済み
つまり、VPS 契約した直後のような状態です。
インストールして最低限の設定をするパッケージ
- Apache
- PHP
- APC
- XDebug
- PHPUnit
- MySQL
- PostgreSQL
LAMP + PostgreSQL → LAMPP!と思っていのですけれども、別の構成ですでにこのような名前がありました><。ぜんぶまとめて強引に略称にすれば、、、LAMPPPAX (らんぷぷぱっくす)でしょうか♪
それはともかく、開発環境ですので SQL サーバーとして MySQL に加え、PostgreSQL をインストールします。
はじめるまえに
わたくしは今回の手順を行う前に時刻同期やメモリ節約として次のことを行なっています。
それでは、はじめます。
1.Apache、MySQL、PHP、PostgreSQL、APC、XDebug、PHPUnit インストール
まずはリポジトリを導入して最新版をインストールできるようにします。
# 作業場所として一時ファイルを保存するディレクトリに移動 cd /tmp/ # リポジトリ導入。ダウンロード。 wget http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm wget http://yum.postgresql.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.noarch.rpm wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm rpm -Uvh epel-release-5-4.noarch.rpm pgdg-centos92-9.2-6.noarch.rpm remi-release-5.rpm rpmforge-release-0.5.2-2.el5.rf.i386.rpm
今回は開発環境ですのでリポジトリは常に有効にします。逆に本番環境では無効、つまり「enabled=0」としています。
# リポジトリ導入。今回は全て「enabled=1」とする。 vim /etc/yum.repos.d/epel.repo vim /etc/yum.repos.d/pgdg-92-centos.repo vim /etc/yum.repos.d/remi.repo vim /etc/yum.repos.d/rpmforge.repo
Apache、MySQL、PHP、PostgreSQL をインストールします。
同時に、PHP のモジュールとして php-gd(図表を扱う)、php-mbstring(日本語(マルチバイト文字)を扱う)、php-mcrypt(暗号化を扱う)、php-soap(PHPUnit に必要(本来は「SOAPサーバーおよびクライアントを書くために使用する」とのこと))、php-xml(PHPUnit に必要(本来は「Web における構造化された ドキュメント交換用のデータフォーマット」とのこと))をインストルします。
さらに、PHP の拡張機能として APC、XDebug、PHPUnit もインストールします。
# LAMP + PostgreSAQL + APC + XDebug + PHPUnit インストール yum install httpd mod_ssl mysql-server php php-devel php-gd php-mbstring php-mcrypt php-mysql php-pecl-apc php-pecl-xdebug php-pgsql postgresql92-server php-soap php-xml # PHPUnit インストール # その前にコマンドラインあるいは依存性情報から、 新規チャネルを自動的に探す pear config-set auto_discover 1 pear install --alldeps pear.phpunit.de/PHPUnit # 自動起動設定・確認 chkconfig httpd on chkconfig mysqld on chkconfig postgresql-9.2 on chkconfig --list | grep httpd chkconfig --list | grep mysqld chkconfig --list | grep postgresql-9.2
また、以前インストールに際し、調べたことや困難に遭遇したことなどをリンクしておきます。
- PHP
- APC
- MySQL
- PostgreSQL
2.Apache と PHP 設定
2−1・まずは準備てきなものでございます
ウェブブラウザから CentOS の IP アドレスへアクセスしてもうまくいきません。「iptables -nL」などで確認してみますと、ポートが 22 以外、開いておりませんでした。デフォルトではなにも設定してないと思ったのですが、CentOS 5.9 でははじめからある程度設定されているのですね。現在の設定に、http(ポート 80)、https(ポート 443)の INPUT も受け入れるよう設定します。
# iptables でポートhttp(80)、https(443) の INPUT を許可 vim /etc/sysconfig/iptables
「COMIMT」前の 2 行を追加し、次のようになりました。
# Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *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 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
# iptables 再起動して設定変更を反映 /etc/init.d/iptables restart # Apache を起動し、ウェブブラウザからアクセスできることを確認しておく /etc/init.d/httpd start
2−2.Apache 設定ファイルを編集します
# Apache 設定ファイル編集 cp -ap /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org vim /etc/httpd/conf/httpd.conf
次の 5 箇所になります。
ServerTokens Prod
今回 CentOS 5.9 に割り振った IP アドレス「192.168.56.112」を設定します。
ServerName 192.168.56.112:80
次のはじめの 2 つは <Directory “/var/www/html”> 〜 </Directory> の設定を変更しています。
Options -Indexes FollowSymLinks
AllowOverride All
ServerSignature Off
各設定の意味はこちらをご参照ください♪
# 文法確認そして再起動し、ウェブブラウザからアクセスして確認 apachectl configtest /etc/init.d/httpd start
2−3.そして PHP 設定ファイル編集
# PHP 設定ファイル編集 cp -a /etc/php.ini /etc/php.ini.org vim /etc/php.ini
[PHP] ディレクティブ
expose_php = Off
[PHP] ディレクティブでエラー関係
error_reporting = E_ALL | E_STRICT
display_errors = On
log_errors_max_len = 4096
error_log = "/var/log/php_errors.log"
[PHP] ディレクティブで文字コード関係
default_charset = "UTF-8"
[Date] ディレクティブ
date.timezone = "Asia/Tokyo"
[mbstring] ディレクティブ
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.detect_order = auto
これらの設定については以前の投稿で調べたことを元にしております。
続いて、php.ini で設定したエラーログファイルを作成、パーミッション設定します。さらに、その PHP エラーログファイルのローテーション設定を行っておきます。
# PHP エラーログファイル作成、パーミッション設定 touch /var/log/php_errors.log chown apache:apache /var/log/php_errors.log # PHP エラーログファイルのローテート設定(Apache の設定をもとに) cp -ap /etc/logrotate.d/httpd /etc/logrotate.d/php vim /etc/logrotate.d/php
ローテート設定は Apache の設定ファイルをコピーしてそのまま使用します。ですので変更するのは対象設定ファイルを指定する 1 行目のみです。
/var/log/php_errors.log { missingok notifempty sharedscripts postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
エラーログファイルを予め作成しなけれならないとわかった顛末、logrotate の各パラメーターの詳細、その設定を決めることについて、以前調べましたのでよろしければ御覧ください。
- php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24
- logrotate の設定をサンプルから勉強します♪【実践的】 | oki2a24
- 【logrotate】PHP エラーログでローテーションを!【できました!】 | oki2a24
これで完了♪ Apache を再起動して、ウェブブラウザからアクセスできることを確認しておきます。
/etc/init.d/httpd restart
3.MySQL 設定
まずは起動して、初期化します。
# MySQL 起動 /etc/init.d/mysqld start # MySQL セキュアインストールスクリプトを実行( [Y/n] で尋ねられる質問はすべて y) /usr/bin/mysql_secure_installation
設定を編集します。
# MySQL の設定ファイル編集 cp -a /etc/my.cnf /etc/my.cnf.org vim /etc/my.cnf
[mysqld] ディレクティブ
character-set-server=utf8
次の 3 つのディレクティブを追加
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
再起動して設定を反映させます。
# MySQL 再起動 /etc/init.d/mysqld restart
4.PostgreSQL 設定
初期化します。そして認証の設定をします。psql でプロンプトを使うためには、パスワードによる認証を必要とするようにします。
# PostgreSQL 初期化 /etc/init.d/postgresql-9.2 initdb # PostgreSQL 起動 /etc/init.d/postgresql-9.2 start # PostgreSQL 認証設定 cp -ap /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.2/data/pg_hba.conf.org vim /var/lib/pgsql/9.2/data/pg_hba.conf
3 行の末尾を修正します。
# "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
別の設定ファイルを修正して、パスワード設定時は暗号化するようにします。
# PostgreSQL ユーザのパスワード設定時の暗号化設定 cp -ap /var/lib/pgsql/9.2/data/postgresql.conf /var/lib/pgsql/9.2/data/postgresql.conf.org vim /var/lib/pgsql/9.2/data/postgresql.conf
コメントを外します。
password_encryption = on
再起動して設定を有効にする前に、スーパーユーザーのパスワードを設定しておきます。
# スーパーユーザーのパスワード設定 su - postgres psql ALTER USER postgres encrypted password 'super-user-password';
再起動して認証設定を反映、有効にします。
# PostgreSQL を再起動し、設定を反映 /etc/init.d/postgresql-9.2 restart
これも、以前おこなった試みをベースとしております。
- 【不満】PostgreSQL 最初の一歩!ユーザと DB 作成!確認!【CentOS 5.9】【実際ニュービー】 | oki2a24
- 【改善】PostgreSQL 最初の一歩!ユーザと DB 作成!確認!【おれはやった!】 | oki2a24
おわりに
おまけです。Apache、MySQL、PHP、PostgreSQL、APC、XDebug、PHPUnit のインストールで導入されたものの一覧です。依存の関係で、こんなにもたくさんのパッケージがインストールされるのですね!
Installed: httpd.i386 0:2.2.3-76.el5.centos mod_ssl.i386 1:2.2.3-76.el5.centos mysql-server.i386 0:5.5.30-1.el5.remi php.i386 0:5.4.14-1.el5.remi php-devel.i386 0:5.4.14-1.el5.remi php-gd.i386 0:5.4.14-1.el5.remi php-mbstring.i386 0:5.4.14-1.el5.remi php-mcrypt.i386 0:5.4.14-1.el5.remi php-mysql.i386 0:5.4.14-1.el5.remi php-pecl-apc.i386 0:3.1.14-1.el5.remi php-pecl-xdebug.i386 0:2.2.2-1.el5.remi php-pgsql.i386 0:5.4.14-1.el5.remi php-soap.i386 0:5.4.14-1.el5.remi php-xml.i386 0:5.4.14-1.el5.remi postgresql92-server.i386 0:9.2.4-1PGDG.rhel5 Dependency Installed: apr.i386 0:1.2.7-11.el5_6.5 apr-util.i386 0:1.2.7-11.el5_5.2 autoconf.noarch 0:2.59-12 automake.noarch 0:1.9.6-2.3.el5 distcache.i386 0:1.4.5-14.1 gmp.i386 0:4.1.4-10.el5 imake.i386 0:1.0.2-3 libXaw.i386 0:1.0.2-8.1 libXmu.i386 0:1.0.2-5 libXpm.i386 0:3.5.5-3 libXt.i386 0:1.0.2-3.2.el5 libcurl.i386 0:7.21.7-5.el5.remi.2 libedit.i386 0:20090923-3.0_1.el5.rf libmcrypt.i386 0:2.5.8-4.el5.centos libssh2.i386 0:1.2.9-1.el5.rf libtool-ltdl.i386 0:1.5.22-7.el5_4 libxslt.i386 0:1.1.17-4.el5_8.3 mysql.i386 0:5.5.30-1.el5.remi mysql-libs.i386 0:5.5.30-1.el5.remi mysqlclient15.i386 0:5.0.67-1.el5.remi perl-DBD-MySQL.i386 0:3.0007-2.el5 perl-DBI.i386 0:1.52-2.el5 php-cli.i386 0:5.4.14-1.el5.remi php-common.i386 0:5.4.14-1.el5.remi php-pdo.i386 0:5.4.14-1.el5.remi php-pear.noarch 1:1.9.4-12.el5.remi.1 postgresql-libs.i386 0:8.1.23-6.el5_8 postgresql92.i386 0:9.2.4-1PGDG.rhel5 postgresql92-libs.i386 0:9.2.4-1PGDG.rhel5 t1lib.i386 0:5.1.2-1.el5.rf Complete!
以上です。
「VirtualBox で LAMP + PostgreSQL + APC + XDebug + PHPUnit の開発環境構築手順♪」への2件の返信
[…] CentOS 5.9 に LAMP 環境構築済み → VirtualBox で LAMP + PostgreSQL + APC + XDebug + PHPUnit の開発環境構築手順♪ | oki2a24 […]
[…] VirtualBox で LAMP + PostgreSQL + APC + XDebug + PHPUnit の開発環境構築手順♪ | oki2a24 […]