*PostgreSQL+PHP+Apacheインストール [#v11f3a4a]
*PostgreSQL+PHP+Apacheインストール [#rb500603]
#contents

[[PostgreSQL8.0の解説:http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050124/155152/]]
*注意事項 [#g30639be]

*パッケージの削除 [#je4bf41d]
 # rpm -qa | grep postgres | xargs rpm -e
 # rpm -qa | grep httpd | xargs rpm -e
 # rpm -qa | grep php | xargs rpm -e
バージョン8.1.4, 8.0.8, 7.4.13, 7.3.15以前のバージョンにはマルチバイト処理にSQLインジェクションの脆弱性があります。~
[[詳細(SRA OSS):http://www.sraoss.co.jp/PostgreSQL/8.1.4/changes.html]]~
[[詳細(ITpro):http://itpro.nikkeibp.co.jp/article/COLUMN/20060530/239359/]]

*PostgreSQL準備 [#va7cd56a]
バージョンアップする場合はpg_dumpしてpg_ctl stopしておきましょう
*PostgreSQLのインストール [#pce29962]
PostgreSQL,PHP,ApacheのRPMは全て削除しておきます~
バージョンアップする場合はバックアップを取って止めておきましょう

postgres ユーザーの作成

 # /usr/sbin/useradd -d /usr/local/pgsql postgres
 # passwd postgres
 # chmod 755 /usr/local/pgsql

作業ディレクトリ作成

 # mkdir -p /usr/local/src/postgresql-7.4.3
 # chown postgres /usr/local/src/postgresql-7.4.3
 # mkdir -p /usr/local/pgsql
 # chown postgres /usr/local/pgsql
 # mkdir /usr/local/src/postgresql-7.4.9
 # chown postgres /usr/local/src/postgresql-7.4.9

ソース取得 http://www.postgresql.jp/

*ソースの展開とパッチ [#nb14e5e2]
 # su postgres
 $ tar xvzf postgresql-7.4.3.tar.gz
 $ cd postgresql-7.4.3
 $ tar xvzf postgresql-7.4.9.tar.gz
 $ cd postgresql-7.4.9
 $ ./configure

7.3以降はマルチバイトサポートはデフォルトで有効になる~
ログを取るときは --enable-syslog ODBC接続する場合は --enable-odbc --with-unixodbc~
JDBCドライバをビルドする場合は --with-java でもANT1.5以上がいるらしい~
&color(red){--without-readline を指定しろとか言われると readline-devel と libtermcap-devel を入れてみよう};

 $ make all
 $ make check
 $ make install
バージョンを上げるとエラーが出てmake checkができないことがある
こんな感じ↓

 ============== removing existing temp installation    ==============
 ============== creating temporary installation        ==============
 ============== initializing database system           ==============
 ============== starting postmaster                    ==============
 running on port 65432 with pid 4246
 ============== creating database "regression"         ==============
 /usr/local/src/postgresql- 7.4.2/src/test/regress/./tmp_check/install//usr/local/pgsql/bin/createdb:
 relocation error: /usr/local/src/postgresql-7.4.2/src/test/regress/./tmp_check/install//usr/local/pgsql
 /bin/createdb: undefined symbol: get_progname
 pg_regress: createdb failed
 make[2]: *** [check] エラー 2
 make[2]: 出ます ディレクトリ `/usr/local/src/postgresql-7.4.2/src/test/regress'
 make[1]: *** [check] エラー 2
 make[1]: 出ます ディレクトリ `/usr/local/src/postgresql-7.4.2/src/test'
 make: *** [check] エラー 2
バージョンを上げるとエラーが出てmake checkができないことがある~
これは古いlibpq.soが残っているかららしい

 # rm -fr /usr/local/pgsql/lib
などとして削除しちゃいましょう 

*contrib関連のインストール [#z3453a89]
**contrib関連のインストール [#z3453a89]
別にインストール必要はありません~
bisonが必要です

 $ su postgres
 $ cd /usr/local/src/postgresql-7.4.3/contrib
 $ cd /usr/local/src/postgresql-7.4.9/contrib
 $ gmake all
 $ gmake install

*パスの設定 [#i007af38]
**パスの設定 [#i007af38]
postgresとPostgreSQLを使用するユーザー全ての.bashrcに以下を追加

 PATH="$PATH":/usr/local/pgsql/bin
 export POSTGRES_HOME=/usr/local/pgsql
 export PGLIB=$POSTGRES_HOME/lib
 export PGDATA=$POSTGRES_HOME/data
 export MANPATH="$MANPATH":$POSTGRES_HOME/man
 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"

設定の反映

 $ source ~/.bashrc

データベース初期化

 $ initdb --encoding=EUC_JP --no-locale
postmasterの起動

 $ pg_ctl -w start

一行追加
 # vi /etc/ld.so.conf
 /usr/local/pgsql/lib
 # /sbin/ldconfig
自動起動の設定

 # cp /usr/local/src/postgresql-7.4.3/contrib/start-scripts/linux /etc/rc.d/init.d/postgresql
**自動起動の設定 [#p075a31b]

 # cp /usr/local/src/postgresql-7.4.9/contrib/start-scripts/linux /etc/rc.d/init.d/postgresql
 # chmod 755 /etc/rc.d/init.d/postgresql
 # /sbin/chkconfig --add postgresql
 # /etc/rc.d/init.d/postgres start

*Pg.pmのインストール [#c3d3dd44]
**Pg.pmのインストール [#c3d3dd44]
Pg.pmは7.3から別管理になったそうな~
PerlからPg.pmで接続する場合は以下を実行

http://gborg.postgresql.org/project/pgperl/download/download.php

pgperl-2.0.2.tar.gz
Pg-2.1.1.tar.gz

 # tar xvzf pgperl-2.0.2.tar.gz
 # cd Pg-2.0.2
 # tar xvzf Pg-2.1.1.tar.gz
 # cd Pg-2.1.1
 # POSTGRES_HOME=/usr/local/pgsql
 # export POSTGRES_HOME
 # perl Makefile.PL
 # make
 # make test
 # make install

*syslog関連設定 [#e134909b]
**syslog関連設定 [#e134909b]
[[参考サイト:http://search.net-newbie.com/pgsql/runtime-config.html]]

 $ vi /usr/local/pgsql/data/postgresql.conf
 log_connections = true # 接続ログを残す
 log_statement = true # 全てのSQL文を記録
 debug_print_parse = true # パースツリーを出力します
 debug_print_rewritten = true # 書き換え後のパースツリーを出力します
 debug_print_plan = ture # 問合せプランを出力します
 syslog = 2 # 出力を制御します(0:出力なし 1:syslogとstdoutに出力 2:syslogのみに出力)
 syslog_facility = 'LOCAL0' 

 $ pg_ctl stop
 $ pg_ctl -w start
 # /etc/rc.d/init.d/postgres restart

PostgreSQLのログファイルは別に吐き出すように設定

 $su
 # vi /etc/syslog.conf
 local0.* /var/log/postgres # 他にlocal0を使っていないか注意

 # ps ax | grep syslog
 # kill -HUP 調べたsyslogdのPID
ログローテーション設定

 # vi /etc/logrotate.d/postgres
 "/var/log/postgres"
 {
    rotate 4
    weekly
    sharedscripts
    postrotate
      /usr/bin/killall -HUP syslogd
    endscript
 }

*Apacheのインストール [#tf8c8011]
http://www.apache.or.jp/

 # tar xvzf apache_1.3.31.tar.gz
 # cd apache_1.3.31
 # tar xvzf apache_1.3.34.tar.gz
 # cd apache_1.3.34
 # OPTIM="-O2" ./configure --enable-module=so --enable-module=rewrite
 # make
 # make install

Options
|FollowSymLinks|シンボリックリンクを有効|
|Indexes|ディレクトリ内丸見え|
|Includes|SSI有効|
|ExecCGI|CGI有効|
|MultiViews|ブラウザを判定(?)|

AllowOverride
|AuthConfig|認証有効|
|FileInfo|ドキュメントタイプのディレクディブ使用許可|
|Indexes|ディレクトリインデックス制御|
|Limit|ホストへのアクセス制御|

Apacheのバージョンを表示させないようにするには httpd.conf において

ServerSignature Off~
ServerTokens ProductOnly # 他にminimal,OS,Fullが指定できる
 ServerSignature Off
 ServerTokens ProductOnly

画像ファイルはログに記録しないためには httpd.conf において

 <IfModule mod_setenvif.c>
 
    # no add images log
    SetEnvIf Request_URI "\.(gif)|(jpg)|(png)$" no_log
 
 .....
 
 CustomLog /usr/local/apache/logs/access_log combined env=!no_log

**自動起動の設定 [#g7d8ed26]

 # cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
 # chmod 755 /etc/rc.d/init.d/httpd

 # vi /etc/rc.d/init.d/httpd

以下を追加
 #!/bin/sh
 # chkconfig: - 85 15
 # description: Apache is a World Wide Web server.  It is used to serve \
 #              HTML files and CGI.
 # processname: httpd
 # pidfile: /usr/local/apache/logs/httpd.pid
 # config: /usr/local/apache/conf/httpd.conf

 # /sbin/chkconfig --add httpd
 # /etc/rc.d/init.d/httpd start

**ログのローテーション設定 [#ddb838ec]

 # vi /etc/logrotate.d/apache

 /usr/local/apache/logs/*_log
 {
   rotate 4
   compress # ZIP圧縮する場合
   weekly
   sharedscripts
   postrotate
   /usr/local/apache/bin/apachectl restart
   endscript
 }

 # /usr/sbin/logrotate -f /etc/logrotate.d/apache
コマンドにて /usr/local/apache/logs 内に access_log.1 error_log.1 が作成されていればOK

*PHP4のインストール [#ud9566ad]
 # tar xvzf php-4.3.7.tar.gz
 # cd php-4.3.7

[[PHPめも]]も参考にして下さい :D

 # tar xvzf php-4.4.1.tar.gz
 # cd php-4.4.1
 # ./configure --with-pgsql --with-apxs=/usr/local/apache/bin/apxs --enable-zend-multibyte --enable-mbstring --enable-mbregex
&color(red){--enable-mbstr-enc-trans は4.3.0以降は廃止};~
&color(red){--enable-trans-sid は4.2.0移行は常にコンパイルされます};~
&color(red){--enable-trans-sid は4.2.0以降は常にコンパイルされます};~
&color(red){コマンドライン版は4.3.0から常に構築される};~
&color(red){CGI版とCLI版は違うものらしいぞっ};

GDを使用する場合はこんな感じ
 # ./configure \
 --with-pgsql --with-apxs=/usr/local/apache/bin/apxs \
 --enable-zend-multibyte --enable-mbstring --enable-mbregex \
 --with-gd --with-zlib-dir=/usr --with-jpeg-dir=/usr \
 --with-png-dir=/usr --with-freetype-dir=/usr --with-ttf \
 --enable-gd-native-ttf --enable-gd-jis-conv
libpng, libjpeg, freetype がないと言われたら devel を入れてみる

php.iniの設定
 # cp /usr/local/src/php-4.3.7/php.ini-dist /usr/local/lib/php.ini
**php.iniの設定 [#babc391d]
 # cp /usr/local/src/php-4.4.1/php.ini-dist /usr/local/lib/php.ini

 ;; 出力バッファリングを有効にする
 output_buffering = On 
 
 ;; mb_output_handlerによる出力変換を有効にする 
 output_handler = mb_output_handler
 
 ;; HTTPヘッダ charset を設定
 default_charset = Shift_JIS
 
 ;;日本語主体で使用
 mbstring.language = Japanese
 
 ;; 内部エンコーディングをEUC-JPに設定
 mbstring.internal_encoding = EUC-JP 
 
 ;; HTTP入力エンコーディング変換をautoに設定
 mbstring.http_input = auto 
 
 ;; SJISに変換
 mbstring.http_output = SJIS
 
 mbstring.encoding_translation = On 必要?
 mbstring.detect_order = auto 必要?
  
 ;; 無効な文字を出力しない
 mbstring.substitute_character = none;
 
 mbstring.func_overload = 0
 
 ;; 4.1.0から推奨
 register_globals = Off

 # make
 # make install

httpd.confの書き換え
**httpd.confの書き換え [#c1c1e70e]

 AddType application/x-httpd-php .php
を追加してApache再起動

CGI版をインストールする場合(4.3.0以降は不要)
**CGI版をインストールする場合 [#p9bf9de7]
&color(red){4.3.0以降は不要};

 # make distclean
 # ./configure --with-pgsql --enable-track-vars --enable-force-cgi-redirect --enable-mbstring --enable-mbstr-enc-trans
 # make
 # make install
これで/usr/local/bin/php にバイナリがインストールされる
これで/usr/local/bin/php にバイナリがインストールされる 

*Apache自動起動の設定 [#j3f1f9d7]
/etc/rc.d/rc.localに以下を記述

 if [ -x /usr/local/apache/bin/apachectl ]; then
   /usr/local/apache/bin/apachectl start
 fi 

*ログのローテーション設定 [#j9c57060]
インストールしたままではログファイルが肥大してディスク容量を圧迫するので必ず設定しましょう  /etc/logrotate.d/apache ファイルを作成して以下を記述

 /usr/local/apache/logs/*_log
 {
   rotate 4
   compress # ZIP圧縮する場合
   weekly
   sharedscripts
   postrotate
   /usr/local/apache/bin/apachectl restart
   endscript
 }

 # /usr/sbin/logrotate -f /etc/logrotate.d/apache
コマンドにて /usr/local/apache/logs 内に access_log.1 error_log.1 が作成されていればOK

-$_GET GETを通じて送信された内容が格納されます 
-$_POST POSTを通じて送信された内容が格納されます 
-$_COOKIE HTTPクッキーの内容が格納されます 
-$_SERVER サーバ変数の内容が格納されます(例:REMOTE_ADDR) 
-$_ENV 環境変数が格納されます 
-$_REQUEST GET, POST, クッキーの内容が格納されます 
-$_SESSION セッションモジュールにより登録された内容が格納されます 

*ミニメモ [#g2f3b125]
PostgreSQL7.3からはホームディレクトリの .pgpass に、 データベースホストとユーザパスワードが記述できるようになりました。 環境変数 PGPASSWORD ではなく、.pgpass を使用するようにしてください。
#exlink


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS