*PostgreSQL+PHP+Apacheインストール [#v11f3a4a] #contents [[PostgreSQL8.0の解説:http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050124/155152/]] *パッケージの削除 [#je4bf41d] # rpm -qa | grep postgres | xargs rpm -e # rpm -qa | grep httpd | xargs rpm -e # rpm -qa | grep php | xargs rpm -e *PostgreSQL準備 [#va7cd56a] バージョンアップする場合はpg_dumpしてpg_ctl stopしておきましょう postgres ユーザーの作成 # /usr/sbin/useradd -d /usr/local/pgsql postgres # passwd postgres 作業ディレクトリ作成 # 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 ソース取得 http://www.postgresql.jp/ *ソースの展開とパッチ [#nb14e5e2] # su postgres $ tar xvzf postgresql-7.4.3.tar.gz $ cd postgresql-7.4.3 $ ./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 これは古いlibpq.soが残っているかららしい # rm -fr /usr/local/pgsql/lib などとして削除しちゃいましょう *contrib関連のインストール [#z3453a89] 別にインストール必要はありません~ bisonが必要です $ su postgres $ cd /usr/local/src/postgresql-7.4.3/contrib $ gmake all $ gmake install *パスの設定 [#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 # chmod 755 /etc/rc.d/init.d/postgresql # /sbin/chkconfig --add postgresql *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 # tar xvzf pgperl-2.0.2.tar.gz # cd Pg-2.0.2 # POSTGRES_HOME=/usr/local/pgsql # export POSTGRES_HOME # perl Makefile.PL # make # make test # make install *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 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 # 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が指定できる 画像ファイルはログに記録しないためには 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 *PHP4のインストール [#ud9566ad] # tar xvzf php-4.3.7.tar.gz # cd php-4.3.7 # ./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){コマンドライン版は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 ;; 出力バッファリングを有効にする 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の書き換え AddType application/x-httpd-php .php を追加してApache再起動 CGI版をインストールする場合(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 にバイナリがインストールされる *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