SYSTEM238 / NOTES1 / その他 / PHP5.6とPostgreSQL9.3のインストール手順

NOTES1 PROG1
PHP5.6とPostgreSQL9.3のインストール手順
開発環境のCentOS6.6にPHP5.6とPostgreSQL9.3をインストールした際の作業メモ。

セットアップするバージョン

  • CentOS 6.6.x
  • Apache 2.2.x
  • PHP 5.6.x
  • PostgreSQL 9.3.x

ユーザ作成

1.作成するユーザ

  • www: httpd/PHPバッチ処理の実行ユーザ
  • postgres: PostgreSQL実行ユーザ

2.ユーザの作成

$ sudo useradd www
$ sudo passwd www

//ユーザ"postgres"はyumで作成されるのでPostgreSQLインストール完了後、パスワードのみセット
$ sudo passwd postgres

3.ssh環境整備

$ su - www
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cd .ssh
$ vi authorized_keys
    ssh-rsa AAAAB3NzaC ... snip ... Bq0TxGi+q0RWfaBiw== xxx@xxx
$ chmod 644 authorized_keys

//postgresも同様にして作成する

yumの準備

1.リポジトリを追加

$ sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo rpm -ivh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-3.noarch.rpm
  // mod 2016/10/11(pgdg-centos93-9.3-1 -> pgdg-centos93-9.3-3)

2.設定の修正

CentOS-Base.repo

$ sudo vi /etc/yum.repos.d/CentOS-Base.repo

[base]
...
priority=1
exclude=php* postgresql*    //追加:phpとPostgreSQLを標準リポジトリから除外

[updates]
...
priority=1
exclude=php* postgresql*    //追加:phpとPostgreSQLを標準リポジトリから除外

[...]
priority=1

remi.repo

$ sudo vi /etc/yum.repos.d/remi.repo

[remi]
...
enabled=1                   //変更:0→1 remiリポジトリを有効化

priorityが、標準リポジトリ(1) > remiリポジトリ(未指定は99)なので重複するパッケージは標準リポジトリが使用される。phpとpostgresqlは標準リポジトリでexcludeしているのでremiリポジトリが使用される。

PHPインストール

1.現在インストールされているPHPの確認

rpm -qa | grep php    //5.6系ならそのまま使う、以降の手順はスキップ

2.古いPHPを削除

$ sudo yum remove php*

3.PHPのインストール

$ sudo yum install --enablerepo=remi-php56 php php-devel
$ sudo yum install --enablerepo=remi-php56 php-pdo php-pgsql
$ sudo yum install --enablerepo=remi-php56 php-mbstring
$ sudo yum install --enablerepo=remi-php56 php-bcmath
$ sudo yum install --enablerepo=remi-php56 php-opcache
$ sudo yum install --enablerepo=remi-php56 php-gd
$ sudo yum install --enablerepo=remi-php56 php-xml

4.確認

$ php --version
PHP 5.6.7 (cli) (built...

5.sessionデータの保存ディレクトリに書き込み許可を与える

Apacheの実行ユーザをwwwに変更するので書き込み権限を与える。

$ ls -l /var/lib/php
drwxrwx---. 2 root apache 24576  6月 18 01:16 2014 session

$ sudo gpasswd -a www apache

//追加したグループを有効にするために再ログイン〜Apacheの再起動を実施する。

6.OPcacheのインストール

とりあえず、デフォルトで使用してもそこそこ効果はある。ただし、開発環境では以下のパラメタをphp.iniに設定するか、開発環境の設定ファイルでini_set()しておかないと変更が即時反映されない。(デフォルトでは2秒)

opcache.revalidate_freq = 0

確認用ツールは以下のurlからソースを取得してインストールする。

OCP – Opcache Control Panel
OpCache-Status

*.未インストール

/*
phpモジュールが肥大化するのが嫌なので、必要になったら都度、インストールする。
php-mcrypt
php-pear php-xmlrpc php-soap
php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof
*/

PostgreSQLインストール

1.現在インストールされているPostgreSQLの確認

rpm -qa | grep postgres    //9.3系ならそのまま使う、以降の手順はスキップ

2.古いPostgreSQLを削除

$ sudo yum remove postgres*

3.PostgreSQLのインストール

$ sudo yum install postgresql93-server postgresql93-devel

4.DB用ディレクトリの作成

$ sudo mkdir -p /var/pgsql/data
$ sudo chown postgres:postgres /var/pgsql/data

5.環境変数の設定

$ su - postgres
$ vi ~/.bash_profile
    
    ...
    export PATH=$PATH:/usr/pgsql-9.3/bin:$HOME/bin
    export PGDATA=/var/pgsql/data
    

$ exit
$ su - postgres

//PostgreSQLを使用するユーザが他にもあるなら設定する

6.psql環境の設定

$ su - postgres
$ vi ~/.psqlrc
    \set PROMPT1 '%[%033[0;31m%]XXX%[%033[0m%]:%n@%/=%# '
    \set COMP_KEYWORD_CASE upper

//PostgreSQLを使用するユーザが他にもあるなら設定する

参照:psqlをカスタマイズする

7.DB初期化

$ su - postgres
$ initdb --encoding=UTF8 --no-locale

8.環境設定ファイルの修正

$ cd /var/pgsql/data

$ vi postgresql.conf
    
    [取りあえずデフォルト値のまま]

$ vi pg_hba.conf
    
    [取りあえずデフォルト値のまま]

9.起動

$ pg_ctl -w start

10.確認

$ psql
psql (9.3.6)
"help" でヘルプを...

11.DBユーザ/スキーマ作成

手順7で作成したデータベース(postgres)を分割して使用するためにユーザ/スキーマを作成する。

//$から始まる行はシェル、#から始まる行はpsqlで実行します

$ createuser hoge

$ psql
# CREATE SCHEMA hoge AUTHORIZATION hoge;
# \dn
     スキーマ一覧
   名前    |  所有者   
-----------+-----------
 public    | postgres
 hoge      | hoge
(2 行)

12.おまけ(スキーマの利用方法)

同じオブジェクト名を複数のスキーマで使用できる。たとえば、schema1とschema2の両方のスキーマにtable_aというテーブルを作成できる。

スキーマはデータベースとは異なり厳格に分離されていないので、ユーザは権限さえ持っていれば接続しているデータベース内のどのスキーマのオブジェクトにでもアクセスすることがでる。(ネストできないディレクトリみたいな感じ)

以下の操作例はスキーマhogeとpostgresに同じ名前のテーブルtbl_aを作成してpostgres側からhogeのテーブル内容を参照している。

$ psql postgres hoge                    //データベース:postgres、スキーマ:hogeに接続

> create table tbl_a(b text);
> insert into tbl_a (b) values ('hoge');
> select * from tbl_a;
  b   
------
 hoge
(1 行)

> \c postgres postgres                  //データベース:postgres、スキーマ:postgresに接続
# create table tbl_a(b text);
# insert into tbl_a (b) values ('postgres');
# select * from tbl_a;
    b     
----------
 postgres
(1 行)
# insert into tbl_a select * from hoge.tbl_a ;
# select * from tbl_a;
    b     
----------
 postgres
 hoge
(2 行)

Apache環境設定

環境設定ファイルの修正

$ sudo cd /etc/httpd/conf
$ sudo cp httpd.conf httpd.conf.bkYYMMDD
$ sudo vi httpd.conf
    ...
    User apache
    Group apache
        ↓
    User www
    Group www
    ...
    Options Indexes FollowSymLinks
        ↓
    Options -Indexes FollowSymLinks
    ...
    AllowOverride None
        ↓
    AllowOverride All
    ...
    DirectoryIndex index.html index.html.var
        ↓
    DirectoryIndex index.html index.php index.html.var
    ...
    #ServerName www.example.com:80
        ↓
    ServerName xxx.xxx.xxx

$ sudo cp httpd.conf httpd.conf.latest
$ sudo apachectl stop
$ sudo apachectl start