La!cooda WIZとphpPgAdmin

      1. PostgreSQL
      2. La!cooda WIZとphpPgAdmin
        1. 概要
        2. La!cooda WIZの導入
        3. register_globalsの対応
        4. WIZの機能ファイル共有/fileディレクトリの変更
        5. ロボットエンジンへの対応
        6. SSLとバーチャルドメインとWIZ
        7. WIZを複数インストールする
        8. cronと連携したlogの処理
        9. バックアップとリストア
        10. phpPgAdmin
        11. 補記

概要

  La!cooda WIZ(補記参照)はオープンソースのグループウェアです。グループウェア (補記参照)とはネットワーク上で、特定の関係者のスケジュール調整や、情報交換を行うものといえます。 Webデータベースアプリケーションとしてその機能を発揮します。LinuxでのデータベースエンジンはPostgreSQLが採用されています。 補足ですが、WIZはSkyboardの後継の位置にあるようです。
  phpPgAdminは、ブラウザでPostgreSQLにアクセスでき、設定やデータの操作が行えるものです。
  ここでは、このWIZとphpPgAdminの導入と運用までを、自身の備忘録として紹介します。導入したLinuxディストリビュジョンは、 TurbolLinuxW8です。
  WIZのソースファイルはPHPで記述されています。この前提で「php.ini」のスーパーグローバル変数の設定が「On」 となっています。思いとしては「Off」で行きたいのですが、この点の善後策も取ってみます。さらにインストールにあたって、 関連するURLを閲覧し、参考にさせて頂きましたが、多くの前提がソースからApache、PostgreSQL、PHPを導入する手順でした。そこでここではあえて、 RPM環境を前提にWIZの導入を行います。さらにまた、バーチャルドメインへの導入をたどってみます。 つまり、サーバ内に複数のWIZを導入するということになります。ApacheとPostgreSQLは同機ですでに稼働していることにします。 その他の前提は、以下です。

ns.tako.co.jp(202.212.232.2x2)       ← 導入サーバドメイン
/var/www/html       ← 導入サーバドメインのドキュメントroot
info.tako.co.jp          ← バーチャルドメイン
/home/tako/public_html     ← バーチャルドメインのドキュメントroot


La!cooda WIZの導入

  ソースをマニュアルにならい /usr/local/src に置くことにします。

# cd /usr/local/src/ ;  ;  ← ディレクトリの移動
# tar zxvf wiz_linux_1.1.3.tar.gz     ← 伸長と展開
# cd wiz     ← 伸長と展開でできた「wiz」へ移動
# su - postgres ;    ← ここで一旦「postgres」になる
$ cd /usr/local/src/wiz     ← ディレクトリの移動
$ ./postgres.sh     ← 実行
 Name your database.(default:masters)-> takodb       ← 入力: データベース名「takodb」
 Name database username.(default:nobody) -> nobody    ← 入力: データベース接続は「nobody」
$ exit     ← rootに戻る
# ./root.sh     ← 実行
 Where is DocumentRoot of Apache? -> /home/tako/public_html      ← ドキュメントroot
 What is your server name?(default:localhost) -> info.tako.co.jp     ← 入力: FQDNかIP
 Name httpd username.(default:nobody) -> nobody     ← 入力: httpdユーザ名
 Name database username.(default:nobody) -> nobody     ← 入力: dbユーザ名

  ここでのコマンド作業で、wizディレクトリが「/home/tako/public_html/wiz」として作成されます。 しかし、この「wizディレクトリ」のオーナは「nobody」です。環境によって所有権等を変える必要があるかも知れません。 筆者の場合、変更しませんでした。
  この段階で、phpの「register_globals」が「On」であれば、ブラウザでアクセスできる状態です。 PostgreSQLの調整をしたのであれば、PostgreSQLの再起動をあらかじめしておきます。

http://info.tako.co.jp/wiz/

  接続できたでしょうか?
  接続できたのであれば、ユーザ名とパスワードを聞いて来ますので入力します。

ユーザ名    admin
パスワード  wiz=0yen

  が初期設定になっています。ログイン画面が以下です。

wiz

  まずは管理者のパスワードを変更しておきましょう。あとは環境に応じてのユーザ登録、機能のカスタマイズとなります。


register_globalsの対応

  さて、接続できない場合のことですが、以下の四点に切り分けられると思います。

  • a,PostgreSQL
  • b,wizディレクトリのパーミッション
  • c,WIZ初期設定ファイルgw.php
  • d,phpスーパーグローバル変数
  •   [a][b][c]は割愛します。[d]のスーパーグローバル変数は先述したようにWIZは「On」の前提です。セキュリティ上「Off」がいいのですが、 また、PHPの最新のバージョンはデフォルトが「Off」です。WIZのためだけに「On」にするのは大層です。そこでApache制御の「.htaccess」を使います。 Apacheでtakoが「.htaccess」を使用できるようにしておきます。この「.htaccess」ファイルを「/home/tako/public_html/wiz/」直下に置きます。
      Apacheの「.htaccess」使用設定については、補記のサイト内 「Apacheによるアクセス制限」ページを参照してください。

           /home/tako/public_html/wiz/.htaccess
    php_flag register_globals on

      この処置で「/home/tako/public_html/wiz/」下のphpスクリプトは「register_globals」が「On」として作動することになります。

      老婆心ながら、PostgreSQLの設定は環境によって異なるのは前提ですが、WIZの利用では /var/lib/pgsql/data/postgresql.conf の設定で、

           /var/lib/pgsql/data/postgresql.conf
    tcpip_socket = true

    の一行が記述されていなければ、ブラウザからアクセスできませんのでご注意ください。


    WIZの機能ファイル共有/fileディレクトリの変更

      WIZの機能にファイル共有というのがあります。必要な各種ファイルを、 アクセス制限をかけるなどしてサーバにアップロードします。このファイルを、WIZユーザが作成したグループで利用するというものです。
      このアップロードしたファイルは、ファイル名に日時が付加されて~/wiz/files/recordに格納されます。これがデフォルトです。 この状態では~public_html内の公開ディレクトリ内にあるので、セキュリティ上Web公開外のディレクトリに移動させることにします。
      現状が/home/tako/public_html/wiz/であるとします。

    # cd /home/tako/public_html/wiz
    # rsync -avz files /home/tako
    # mv -rf files

      上記の場合デフォルトをそのまま再現したことになります。ちなみに、すべて770でnobody.nobodyです。 変更するなら、nobodyがこれらのディレクトリを利用できるなら、システム上問題ないことになります。
      次にWIZの初期設定ファイルであるgw.phpを変更します。

           /home/tako/public_html/wiz/gw.php
    $host = "localhost";
    $masterdb = "takodb";
    $db_user = "nobody";
    $db_password = "";
    $db_port = "5432";
    $admin = "tako@tako.co.jp";
    $maxfilesize = "5242880";
    $hostname = "info.tako.co.jp";
    $db_type = "PostgreSQL";
    $os_type = "Linux";
    $savefile_path = "../../files/";
    $_ROOT_DIR_ = "/home/tako/public_html/wiz/";
    $_ROOT_URL_ = "http://info.tako.co.jp/~tako/wiz/";


    ロボット検索エンジンへの対応

      WIZは一般公開で使用することはないでしょう。従ってロボット検索エンジンに検索される必要はありません。 イントラネット内のりようであれば「.htaccess」を使用してApacheでアクセス制限をかけることでOKでしょうが、 インターネット上での利用となるとそうもいきません。ここでは、以下のURLページを参照し、対応してみました。
      この他に良い方法がありましたら、是非紹介いただきたいと思います。
      Webサーバーのrootディレクトリにrobots.txtという名のファイル設置します。

    No Need Robot Club

      具体例を簡単に紹介します。
      本記事の設定内容の例でいきますと、robots.txtの内容は以下です。

    # cd /var/www/html
    # cat robots.txt
    User-agent: *
    Disallow: /~tako/wiz/


    SSLとバーチャルドメインとWIZ

      WIZが稼働し、使用できているとします。この状態でSSLをApacheで走らせ、そこでWIZを使用することにします。SSLについては、 サイト内ページを参照下さい。この狙いは、パスワードを含めたデータをより安全に交換するための処置です。 なお、ここでのSSL認証は第三者発行の認証ではなく、自発行認証です。以下にこれまでの環境設定の「gw.php」を示します。
      SSL認証については補記の「OpenSSL」ページを参照ください。

           バーチャル  /home/tako/public_html/wiz/gw.php
    $host = "localhost";
    $masterdb = "takodb";
    $db_user = "nobody";
    $db_password = "";
    $db_port = "5432";
    $admin = "tako@tako.co.jp";
    $maxfilesize = "5242880";
    $hostname = "info.tako.co.jp";
    $db_type = "PostgreSQL";
    $os_type = "Linux";
    $savefile_path = "./files/";
    $_ROOT_DIR_ = "/home/tako/public_html/wiz/";
    $_ROOT_URL_ = "http://info.tako.co.jp/wiz/";

      上記が全文です。この中でデータベース名「$masterdb」は変更しますが、WIZのインストール時に作成されたものです。
      この設定では、SSLを使用できません。SSLの認証キーの作成は、FQDN-ns.tako.co.jp環境設定にしておくののが順当でしょう。 つまり、ns.tako.co.jp ではSSLが稼働しているというのを前提にしています。 そこでバーチャルドメイン-info.tako.co.jpはそれに合わせることになります。その場合の設定は以下です。

           SSL    /home/tako/public_html/wiz/gw.php
    $host = "localhost";
    $masterdb = "takodb";
    $db_user = "nobody";
    $db_password = "";
    $db_port = "5432";
    $admin = "tako@tako.co.jp";
    $maxfilesize = "5242880";
    $hostname = "info.tako.co.jp";
    $db_type = "PostgreSQL";
    $os_type = "Linux";
    $savefile_path = "./files/";
    $_ROOT_DIR_ = "/home/tako/public_html/wiz/";
    $_ROOT_URL_ = "https://info.tako.co.jp/~tako/wiz/";

      赤色部位が変更箇所です。正確には「info」部が「ns」あるいは「www」となるのでしょうが、 上記で名前解決とパスは保証されるはずです。つまりは、名前解決できているFQDN-ns.tako.co.jpのフルパスを記述することになります。(04.01.17)


    WIZを複数インストールする

      いろいろ試したのですが、結果からいえば、複数のWIZのインストール手順は単体の場合と大差はありません。 変更はデータベースサーバ名を任意で決定すること。WIZのディレクトリはwiz名で作成されるので、 wizのルートディレクトリを異なったディレクトリにすること。それをgw.phpに反映させることです。

    # cd /usr/local/src/                                                  ← ディレクトリの移動
    # tar zxvf wiz_linux_1.1.3.tar.gz                                            ← 伸長と展開
    # cd wiz                                                  ← 伸長と展開でできた「wiz」へ移動
    # su - postgres                                             ← ここで一旦「postgres」になる
    $ cd /usr/local/src/wiz                                               ← ディレクトリの移動
    $ ./postgres.sh                                                                   ← 実行
     Name your database.(default:masters)-> hanakodb              ← 入力: データベース名
     Name database username.(default:nobody) -> nobody    ← 入力: データベースへ接続は「nobody」
    $ exit                                                                       ← rootに戻る
    # ./root.sh                                                                       ← 実行
     Where is DocumentRoot of Apache? -> /home/hanako/public_html         ← ドキュメントroot
     What is your server name?(default:localhost) -> info.tako.co.jp        ← 入力: FQDNかIP
     Name httpd username.(default:nobody) -> nobody                     ← 入力: httpdユーザ名
     Name database username.(default:nobody) -> nobody                     ← 入力: dbユーザ名

           /home/hanako/public_html/wiz/gw.php
    $host = "localhost";
    $masterdb = "hanakodb";
    $db_user = "nobody";
    $db_password = "";
    $db_port = "5432";
    $admin = "tako@tako.co.jp";
    $maxfilesize = "5242880";
    $hostname = "info.tako.co.jp";
    $db_type = "PostgreSQL";
    $os_type = "Linux";
    $savefile_path = "./files/";
    $_ROOT_DIR_ = "/home/hanako/public_html/wiz/";
    $_ROOT_URL_ = "http://info.tako.co.jp/~hanako/wiz/";


    cronと連携したlogの処理

    《 ■ スクリプトファイルtakodb_logdelete ■ 》

      WIZの運用を開始するとlogが発生し、ほっておけば、利用者数によっては大量のログがテーブルに蓄積されることになります。 この節ではlog対策をまとめておきます。
      開発元のHPを覗くと、紹介記事がありますが「La!cooda WIZ 1.1.3」ヴァージョンの機能としてはlog削除のためのスクリプトはなく、 次期ヴァージョンで実装予定ととなっています。実状は手動か、シェルスクリプトによる手順が「FAQ」に紹介されています。

    Webグループウェア La! cooda WIZ FAQ

      ここではシェルスクリプトについて診ていきます。以下が全文の引用です。

       FAQ引用文
    #!/bin/sh
    R=$(date --date '4 months ago' +%Y%m)
    /bin/echo 'gwlog old data delete'
    /usr/local/pgsql/bin/pg_dump masters -t gwlog -f /home/postgres/gwlog_$R.out
    /usr/local/pgsql/bin/psql masters -c "DELETE FROM gwlog WHERE to_char(record_time, 'yyyymm') <= '$R';"

      残念ながらわたしの環境では、このスクリプトは使用できませんでした。「pg_dump」や「psql」のパスが違います。 ここではPostgreSQLをRPMでインストールした、が前提ですので、次のように書き改めます。
      その前に書き改める前提を確認しておきます。
    1. WIZのデーターベース名は「takodb」
    2. postgresのルートディレクトリ「/var/lib/psql」
    3. postgresのルートディレクトリ直下にデータベース名のディレクトリを作成。
    4. ディレクトリ名「takodb」。ここで作業します。
    5. このディレクトリ「takodb」の中に、これから書き改めるスクリプトのファイルを格納。
    6. スクリプトのファイル名「takodb_logdelete」。パーミッションは700、として実行権限を与える。
    7. pg_dumpのパスは「/usr/bin/pg_dump」
    8. psqlのパスは「/usr/bin/psql」
      なお、この記事の前提は複数のWIZを稼働させることを前提としていますので、 新たなWIZを作成するごとにpostgresのルートディレクトリ「/var/lib/psql」直下にWIZのデータベース名で、ディレクトリを作成し、 そこを作業場とします。たとえば、もう一つのWIZのデータベース名が「wizdb02」なら「wizdb02」というディレクトリを作成し、 そこに「wizdb02_logdelete」というファイル名でスクリプトを格納する、という手順です。
      実際のコマンドは以下のようになります。

    # which pg_dump
       /usr/bin/pg_dump
    # which psql
       /usr/bin/psql
    # su - postgres
    $ pwd
       /var/lib/pgsql
    $ mkdir takodb
    $ cd takodb
    $ vi takodb_logdelete

      viかあるいは任意のエディタで作成したスクリプトファイルの内容は以下です。

        /var/lib/psql/takodb/takodb_logdelete
    #!/bin/sh
    R=$(date --date '4 months ago' +%Y%m)
    /bin/echo 'gwlog old data delete'
    /usr/bin/pg_dump takodb -t gwlog -f /var/lib/pgsql/takodb/gwlog_$R.out
    /usr/bin/psql takodb -c "DELETE FROM gwlog WHERE to_char(record_time, 'yyyymm') <= '$R';"

      色つき文字が修正部位です。

    《 ■ cronとtakodb_logdelete ■ 》

      作成した「takodb_logdelete」実行ファイルは必要なとき、コマンドとして打てばいいのですが、 ここではcronと連携で自動処理を行うこととします。
      自動処理には複数の方法があると思いますが、ここではroot権限でおこなう手続きを紹介します。
      シェルスクリプトファイル「takodb_logdelete」に対する指示書を「/etc/cron.d」に格納します。
      なお、シェルスクリプトファイル「takodb_logdelete」の実行はpostgresが行う設定です。

    01 * * * * postgres /var/lib/pgsql/takodb/takodb_logdelete       ← 毎時01分に実行
    22 4 * * 0 postgres /var/lib/pgsql/takodb/takodb_logdelete       ← 毎週日曜の午前4時22分に実行
    42 4 1 * * postgres /var/lib/pgsql/takodb/takodb_logdelete       ← 毎月1日の午前4時42分に実行

      このうち希望の一行をファイルとして「/etc/cron.d」に置きます。なおファイル名は任意です。

        /etc/cron.d/takodb_logdelete
    42 4 1 * * postgres /var/lib/pgsql/takodb/takodb_logdelete

      また、希望の行を「/etc/crontab」ファイルに追記することで同様の結果を得ることができます。

      ログ処理の補足を少々。
      例によって、開発元から引用したスクリプトを設定し、機能させるためのカスタマイズはスンナリとはいきませんでした。 この間、関係するログなどを診ながら自動処理の調整を行うことになるのですが、参考のため以下を引用しておきます。

    gwlog old data delete
    /etc/cron.hourly/takodb_logdelete: /usr/local/pgsql/bin/pg_dump: No such file or directory
    /etc/cron.hourly/takodb_logdelete: /usr/local/pgsql/bin/psql: No such file or directory

      引用したシェルスクリプトを少々改編しただけで動かしたところ、パス先にないとのcronからのメッセージです。

    gwlog old data delete
    pg_dump: [archiver (db)] connection to database "takodb" failed: FATAL 1: user "root" does not exist
    psql: FATAL 1: user "root" does not exist

      パスは通ったのですがrootではPostgreSQLサーバにアクセスできない、とのメッセージです。

    (04.02.18)


    バックアップとリストア

    [ 1,手動でするバックアップとリストア ]

      データベースがいつまでも正常に、現状のまま稼働することはないでしょう。また管理の都合上、変更を余儀なくされる場合があります。 いろいろなことに対応していくことになるのですが、まず作業を始める前に、現状復旧できるようにバックアップをしておくことが大切です。
      バックアップを手動で行うコマンドは以下です。WIZの場合は、データベースにアクセスできないようにApacheを停止しておきます。

    # /etc/init.d/httpd stop
    # su - postgres
    $ pg_dump データベース名 > バックアップファイル名
    $ exit
    # /etc/init.d/httpd start

      バックアップがうまくいかない場合は、PostgreSQLを再起動して行ってみてください。

    # su - postgres
    $ pg_ctl stop
    $ pg_ctl -w start

      バックアップしたデータを流し込む手順です。この場合、まずデーターベースを削除し、新規にデータベースを作成しておきます。

    # su - postgres
    $ dropdb 削除するデータベース名
    $ createdb データベース名
    $ psql -e データベース名 < バックアップファイル名

      以上で復旧したことになります。なお、これらの作業手順を整理するにあたりWIZ開発元のHPを参照しました。

    [ 2,バックアップの自動化 ]

      バックアップの定期的な自動化をここでは行います。データベース名は「takodb」です。
      WIZの複数のインストールが前提ですので、 まずPostgreSQLのデフォルトで「/var/lib/pgsql」内に作成される「backups」ディレクトリを作業場として利用します。 この中にtakaodbのためのディレクトリ「takodb」を作成します。 このディレクトリ「takodb」中にシェルスクリプトファイル「takodb_backup」を実行権限を付加して置きます。

    # cd /var/lib/pgsql/backups
    # mkdir takodb
    # cd takodb
    # vi takodb_backup
    # chmod 700 takodb_backup

      viかあるいは任意のエディタで作成したスクリプトファイルの内容は以下です。

        /var/lib/pgsql/backups/takodb/takodb_backup
    #!/bin/sh
    #
    # PostgreSQL for takodb_backup
    #
    if [ -x /usr/bin/pg_dump ]; then
    su postgres -c "/usr/bin/pg_dump takodb > /var/lib/pgsql/backups/takodb/takodb.out"
    fi

    exit 0

      上記のスクリプトをcron操作により自動化します。前期ログの自動化処理の場合は「/etc/cron.d」に指示書を置いたのですが、 今回は、指示を直接「/etc/crontab」ファイルに記述してみます。以下が内容です。

        /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly

    #1日一回、夜中の午前5時30分にコマンドを実行
    30 5 * * * root /var/lib/pgsql/backups/takodb/takodb_backup

      上記色つき部位が追記です。前から10行目まではデフォルトです。
      なお、バックアップファイルを何らかの事情で「takodb」に流し込むには、 まず「takodb」を削除して新たに「takodb」を作成して行うことになります。

    $ dropdb takodb
    $ createdb takodb
    $ psql -e takodb < takodb/takodb.out


    phpPgAdmin

    pgadmin01


    補記

    《 ■ 参照URL   ※サイト内参照ページ    引用、参照書籍 ■ 》
    La!cooda WIZ
    グループウエアの再構築方法
    No Need Robot Club
    phpPgAdmin
    phpPgAdmin日本語メッセージファイル
    PostgreSQLのインストール
    ※ Apacheによるアクセス制限
    ※ OpenSSL
    ※ PostgreSQL とMySQLのコマンド対応表
    ※ グループウェア
    ※ OpenSSL
    『グループウエア構築術』 日経Linux 2005年2月号 刊/日経PB社

    このページの作成にあたり、上記に掲げたURLや書籍を参考にしました。謝意を表します。具体的な引用については明記しました。 内容の間違いや、誤字は筆者の責任であり、関係する参照先の責任ではありません。


      top   home:top   server library:top   PHP PostgreSQL MySQL サンプルスクリプトへ