Welcome! page:no03/resbbs/wizpgadmin.php | |
La!cooda WIZとphpPgAdmin | |
by: 大阪演劇情報センター + 未知座小劇場 2017年 09月 10日(Sun) 11:24:17 AM | |
home:topへ server library:top へ |
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 |
ソースをマニュアルにならい /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 |
が初期設定になっています。ログイン画面が以下です。 |
まずは管理者のパスワードを変更しておきましょう。あとは環境に応じてのユーザ登録、機能のカスタマイズとなります。 |
さて、接続できない場合のことですが、以下の四点に切り分けられると思います。 |
|
[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によるアクセス制限」ページを参照してください。 |
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
の一行が記述されていなければ、ブラウザからアクセスできませんのでご注意ください。 |
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を変更します。 |
$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/ |
WIZが稼働し、使用できているとします。この状態でSSLをApacheで走らせ、そこでWIZを使用することにします。SSLについては、
サイト内ページを参照下さい。この狙いは、パスワードを含めたデータをより安全に交換するための処置です。
なお、ここでのSSL認証は第三者発行の認証ではなく、自発行認証です。以下にこれまでの環境設定の「gw.php」を示します。 SSL認証については補記の「OpenSSL」ページを参照ください。 |
$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はそれに合わせることになります。その場合の設定は以下です。 |
$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のルートディレクトリを異なったディレクトリにすること。それを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ユーザ名 |
$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/"; |
《 ■ スクリプトファイルtakodb_logdelete ■ 》
WIZの運用を開始するとlogが発生し、ほっておけば、利用者数によっては大量のログがテーブルに蓄積されることになります。
この節ではlog対策をまとめておきます。 開発元のHPを覗くと、紹介記事がありますが「La!cooda WIZ 1.1.3」ヴァージョンの機能としてはlog削除のためのスクリプトはなく、 次期ヴァージョンで実装予定ととなっています。実状は手動か、シェルスクリプトによる手順が「FAQ」に紹介されています。 |
Webグループウェア La! cooda WIZ 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でインストールした、が前提ですので、次のように書き改めます。 その前に書き改める前提を確認しておきます。
実際のコマンドは以下のようになります。 |
# 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かあるいは任意のエディタで作成したスクリプトファイルの内容は以下です。 |
#!/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」に置きます。なおファイル名は任意です。 |
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かあるいは任意のエディタで作成したスクリプトファイルの内容は以下です。 |
#!/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」ファイルに記述してみます。以下が内容です。 |
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 |
《 ■ 参照URL ※サイト内参照ページ 引用、参照書籍 ■ 》 |
La!cooda WIZ |
グループウエアの再構築方法 |
No Need Robot Club |
phpPgAdmin |
phpPgAdmin日本語メッセージファイル |
PostgreSQLのインストール |
※ Apacheによるアクセス制限 |
※ OpenSSL |
※ PostgreSQL とMySQLのコマンド対応表 |
※ グループウェア |
※ OpenSSL |
『グループウエア構築術』 日経Linux 2005年2月号 刊/日経PB社 |