内容
Redmine、MediaWiki、Pleasanter、Amazon S3、ファイルサーバを一括検索する仕組みをつくってみた
背景
- 運用改善の中でいろいろとツールを入れたので運用ツールが増えた
- 各ツールの区分けは出来ているがどこを見るかたまに迷うこともある
- 「情報を探す」という時間を短縮して運用改善につなげたい
概要図
- FESSの検索画面からキーワード検索で各システムを一括検索する
- RedmineとPleasanterはPostgresをMediaWikiはMariaDBをデータストアクローラで設定
- S3はそれようのプラグインがあるのでプラグイン追加後、データストアクローラで設定
- ファイルサーバはファイルシステムクローラで設定
- スケジューラ設定で毎日各システムからクローラーで情報を取得してくる
作成したもの
環境・前提条件
- AlmaLinux release 8.5 (Arctic Sphynx)
- systemctl disable firewalld
手順
FESSのインストール
JDKをインストール
yum install -y java-11-openjdk
Elasticsearchのインストール
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.0-x86_64.rpm
rpm -ivh elasticsearch-7.15.0-x86_64.rpm
Elasticsearchプラグインのインストール
/usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:7.15.0
/usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:7.15.0
/usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:7.15.0
elasticsearch-configsyncのインストール
curl -o /tmp/configsync.zip https://repo.maven.apache.org/maven2/org/codelibs/elasticsearch-configsync/7.15.0/elasticsearch-configsync-7.15.0.zip
mkdir -p /usr/share/elasticsearch/modules/configsync
unzip -d /usr/share/elasticsearch/modules/configsync /tmp/configsync.zip
Elasticsearchの設定変更
/etc/elasticsearch/elasticsearch.yml
configsync.config_path: /var/lib/elasticsearch/config
FESSのインストール
wget https://github.com/codelibs/fess/releases/download/fess-13.15.3/fess-13.15.3.rpm
rpm -ivh fess-13.15.3.rpm
systemctl daemon-reload
FESSの設定変更(下記コメントを外す)
/usr/share/fess/bin/fess.in.sh
ES_HTTP_URL=http://localhost:9200
FESS_DICTIONARY_PATH=/var/lib/elasticsearch/config/
Elasticsearch・FESSの起動
systemctl enable elasticsearch
systemctl enable fess
systemctl start elasticsearch
systemctl status elasticsearch
systemctl start fess
systemctl status fess
http://ipaddress:8080/にアクセス
自己証明書でSSL化
Apacheのインストール
yum install -y httpd
yum install -y mod_ssl
モジュール確認
httpd -M | grep proxy
~
proxy_module (shared) #プロキシに必要
proxy_http_module (shared) #プロキシに必要
ssl_module (shared) #SSL使用時に必要
~
ない場合はモジュール追加
/etc/httpd/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
リバースプロキシ設定
/etc/httpd/conf.d/httpd-proxy.conf
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
Apache再起動
systemctl restart httpd
接続確認
- http://xxx.xxx.xxx.xxxでFESSにアクセス出来ることを確認
秘密鍵を作成
cd /etc/httpd/conf
openssl genrsa -des3 -out server.key 2048
CSR作成を作成
openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:XXXX
Locality Name (eg, city) [Default City]:XXXX
Organization Name (eg, company) [Default Company Ltd]:XXXX
Organizational Unit Name (eg, section) []:XXXX
Common Name (eg, your name or your server's hostname) []:XXXX
Email Address []:XXXX
秘密鍵からパスワード除去
cp -p server.key server.key.org
openssl rsa -in server.key -out server.key
設定ファイル修正
cp /etc/pki/tls/openssl.cnf openssl_san.cnf
vim openssl_san.cnf
[ req ]
req_extensions = v3_req #コメント解除
[ usr_cert ]
authorityKeyIdentifier=keyid,issuer:always #:alwaysを追加
[ v3_req ]
subjectAltName=IP:xx.xx.xx.xx #追加(IPまたはFQDN)
証明書ファイル作成
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -sha256 -extensions v3_req -extfile openssl_san.cnf
SSL設定
/etc/httpd/conf.d/ssl.conf
SSLEngine on
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
待受けポート追加
/etc/httpd/conf/httpd.conf
Listen 443
Apache再起動
systemctl restart httpd
接続確認
- https://xxx.xxx.xxx.xxxでFESSにアクセス出来ることを確認
ファイルサーバ検索設定
ファイルクロールの設定
ファイル認証の設定
ジョブの設定
ジョブスケジューラの手動起動
検索
S3検索設定
備考
- パラメータ、スクリプトの記載方法は下記参照
- Amazon S3 Data Store for Fess
- AWS側にアクセス用のIAMユーザ作成
- ※コンソールアクセスは無効、ポリシーはAmazonS3ReadOnlyAccessでOK
プラグインのインストール
クローラー設定
region=ap-northeast-1
access_key_id=XXXXXXXX
secret_key=XXXXXXXX
- スクリプト
url=object.url
title=object.key
content=object.contents
mimetype=object.mimetype
filetype=object.filetype
filename=object.filename
content_length=object.size
last_modified=object.last_modified
ジョブスケジューラ作成と手動起動
- 「ファイルサーバ検索設定」のジョブ設定・ジョブスケジューラ手動起動参照
検索
Redmine検索設定
JDBCドライバの配置
- FESSサーバ側の設定です
wget https://jdbc.postgresql.org/download/postgresql-42.3.2.jar
mv postgresql-42.3.2.jar /usr/share/fess/app/WEB-INF/lib/
外部からPostgresにアクセス許可設定
- Redmineサーバ側の設定です
/var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
/var/lib/pgsql/data/pg_hba.conf
host redmine redmine 192.168.1.0/24 md5
systemctl restart postgresql.service
systemctl status postgresql.service
データストアクローラの設定
- FESS管理画面からの設定です
- ハンドラー名:DatabaseDataStore
- パラメーター
driver=org.postgresql.Driver
url=jdbc:postgresql://"Redmineホスト名":5432/"DB名"
username="DBアクセスユーザ"
password="DBアクセスパスワード"
sql=select * from issues
- スクリプト
url="http://"Redmineホスト名"/issues/" + id
host="Redmineホスト名"
site="Redmineホスト名"
title= subject
content=description
cache=description
digest=description
anchor=
content_length=description.length()
last_modified=updated_on.substring(0,10) + "T" + updated_on.substring(11,23) + "Z"
ジョブスケジューラ作成と手動起動
- 「ファイルサーバ検索設定」のジョブ設定・ジョブスケジューラ手動起動参照
ログ確認
- 何回かアクセスエラーなどで上手く行かなかったため、ログ確認
tail -f /var/log/fess/fess-crawler.log
検索
- FESSで検索してRedmineのチケットが検索できるか確認
プリザンター検索設定
Postgresに接続
psql -h localhost -p 5432 -U postgres -d Implem.Pleasanter
テーブル確認
- Itemsテーブル内にチケットの情報が入っています
Implem.Pleasanter=# \dt
List of relations
Schema | Name | Type | Owner
--------+---------------------------+-------+-------------------------
~~~~省略~~~~
public | Items | table | Implem.Pleasanter_Owner
public | Items_deleted | table | Implem.Pleasanter_Owner
public | Items_history | table | Implem.Pleasanter_Owner
~~~~省略~~~~
テーブル構造確認
Implem.Pleasanter=# \d "Items";
Table "public.Items"
Column | Type | Collation | Nullable | Default
------------------------+--------------------------------+-----------+----------+----------------------------------
~~~~省略~~~~
ReferenceType | character varying(32) | | not null |
SiteId | bigint | | not null | 0
Title | character varying(1024) | | |
FullText | text | | |
~~~~省略~~~~
UpdatedTime | timestamp(3) without time zone | | not null | CURRENT_TIMESTAMP
データ確認
- 必要そうなデータだけSelectしたクエリで確認
Implem.Pleasanter=# select "Title","ReferenceId","FullText","UpdatedTime" from "Items";
Title| ReferenceId |FullText|UpdatedTime
-----------------------------------------------+-------------
【プリザンタチケット】顧客管理 |1 | 【プリザンタチケット】顧客管理 顧客管理 test plesanter Administrator | 2022-02-10 08:39:03.857
データストアクローラ設定
- FESS管理画面からの設定です
- ハンドラー名:DatabaseDataStore
- パラメーター
driver=org.postgresql.Driver
url=jdbc:postgresql://"プリザンタホスト名"/Implem.Pleasanter
username=postgres
password="パスワード"
sql=select "Title","ReferenceId","FullText","UpdatedTime" from "Items";
- スクリプト
url="http://"プリザンタホスト名"/items/" + ReferenceId
host="プリザンタホスト名"
site="プリザンタホスト名"
title=Title
content=FullText
cache=FullText
digest=FullText
anchor=
ジョブスケジューラ作成と手動起動
- 「ファイルサーバ検索設定」のジョブ設定・ジョブスケジューラ手動起動参照
ログ確認
- 何回かアクセスエラーなどで上手く行かなかったため、ログ確認
tail -f /var/log/fess/fess-crawler.log
検索
- FESSで検索してプリザンタのチケットが検索できるか確認
MediaWiki検索設定
備考
MariaDBに接続
mysql -u root -p
MariaDB [(none)]> use my_wiki;
テーブル確認
- pageテーブルのpage_latestにページの最新リビジョンを持っています
- 実際のデータはtextテーブルにあります
MariaDB [(none)]> use my_wiki;
MariaDB [my_wiki]> select page_title,page_latest from page;
+--------------------------------------+-------------+
| page_title | page_latest |
+--------------------------------------+-------------+
| Wikiテスト1 | 15 |
| Wikiテスト2 | 16 |
| Wikiテスト3 | 13 |
| Wikiテスト4 | 14 |
+--------------------------------------+-------------+
MariaDB [my_wiki]> select old_id,old_text from text where old_id=15;
+--------+----------------------------+
| old_id | old_text |
+--------+----------------------------+
| 15 | Wikiテスト1
編集1 |
+--------+----------------------------+
FESSで使用するSQL作成
- pageテーブルのpage_latestとtextテーブルのold_idを外部結合して最新リビジョンのデータを取り出します
MariaDB [my_wiki]> select page.page_title,text.old_id,text.old_text from page LEFT OUTER JOIN text ON page.page_latest = text.old_id;
プラグインインストール
- FESSの管理画面「システム」⇒「プラグイン」からmysql-connector-javaを追加した
データストアクローラ設定
- FESS管理画面からの設定です
- ハンドラー名:DatabaseDataStore
- パラメーター
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://"MediaWikiホスト名":3306/my_wiki?useUnicode=true&characterEncoding=UTF-8
username="WikiDB接続ユーザ"
password="WikiDB接続パスワード"
sql=select page.page_title,text.old_id,text.old_text from page LEFT OUTER JOIN text ON page.page_latest = text.old_id;
- スクリプト
url="http://"MediaWikiホスト名"/wiki/index.php?title=" + page_title
host="MediaWikiホスト名"
site="MediaWikiホスト名"
title=page_title
content=old_text
ジョブスケジューラ作成と手動起動
- 「ファイルサーバ検索設定」のジョブ設定・ジョブスケジューラ手動起動参照
ログ確認
- 何回かアクセスエラーなどで上手く行かなかったため、ログ確認
tail -f /var/log/fess/fess-crawler.log
検索
- FESSで検索してMediaWikiの記事が検索できるか確認