JoruriCMS2017 WEB x CMS 設定手順
※ Joruri CMS 2017のシステムを複数のサーバーで構成したシステムについてのお問い合わせは、有償サポートのユーザー様のみ承っています。
https://joruri-cms.jp/2017/support/
Joruri CMS 2017 WEBxCMS 設定手順書[TXT:15.3KB]
## JoruriCMS2017 WEBxCMS 設定マニュアル
**********************************************************************
1. 前提条件
**********************************************************************
管理画面(CMS)と公開画面(WEB)のサーバーを分離してパフォーマンスとセキュリティを向上させることができます。
同じバージョンのJoruriCMSがCMSおよびWEBサーバーにインストール済みとします。
OSのバージョンはCentOS8で、データベースのバージョンはpostgres12です。
CentOS7の場合、標準で組み込まれているPostgresのバージョンが異なるため、対応するバージョン(9.5)に置き換えて実行してください。
[設定]
公開画面(WEBサーバー)
ドメイン : www.example.com
IPアドレス : 192.168.0.2
管理画面(CMSサーバー)
ドメイン : admin.example.com
IPアドレス : 192.168.0.3
ポートはSSH(22)、Postgresql(5432)をプライベートネットワークで開放しておくこと。
**********************************************************************
2. PostgreSQLレプリケーション設定
**********************************************************************
CMSサーバーとWEBサーバーで作業が必要となります。
[WEBサーバー][CMSサーバー]共通
Slonyをインストール
# cd /usr/local/src/
# wget https://www.slony.info/downloads/2.2/source/slony1-2.2.8.tar.bz2 --no-check-certificate
# tar xf slony1-2.2.8.tar.bz2
Slonyをインストールします。
# cd slony1-2.2.8
# ./configure --prefix=/usr/local/slony --with-pgconfigdir=/usr/pgsql-12/bin/ --with-perltools
# make && make install
slonyの同期対象の書き出し
$ su - joruri
$ cd /var/www/joruri
$ RAILS_ENV=production ./bin/rails generate cms:slony:slony_sets
「config/slony/slony_sets.conf」にレプリケーション対象のテーブルとシーケンスが書き出されます。
後述する出力した値は、「slon_tools.conf」の設定時に使用します。
$ cat config/slony/slony_sets.conf
設定ファイルを準備します。
# su -
# cd /usr/local/slony/etc/
# cp -ap slon_tools.conf-sample slon_tools.conf
「pkeyedtables」と「sequences」は省略していますが、
「※省略」の部分を「slony設定ファイル書き出し機能」で出力したものと差し替えます。
# vi slon_tools.conf
-------------------------
# (26行目)
#$PIDFILE_DIR = '/var/run/slony1'; # コメントアウト
$PIDFILE_DIR = '/run'; # pidファイルの保存場所を変更
#(47行目)
# $LOG_NAME_SUFFIX = '%a';
$LOG_NAME_SUFFIX = "node"; # 仮の名前を付ける「joruri_production-node.log」となる
#(75行目)
add_node(node => 1,
host => '192.168.0.3', # IPで指定
dbname => 'joruri_production', # 対象データベースへ変更
port => 5432,
user => 'joruri', # postgresqlのユーザで「SUPERUSER」権限を付与する必要がある
password => ''
# config => '/path/to/node1_config_file.conf' # コメントアウト
);
add_node(node => 2,
host => '192.168.0.2', # IPで指定
dbname => 'joruri_production', # 対象データベースへ変更
port => 5432,
user => 'joruri',# postgresqlのユーザで「SUPERUSER」権限を付与する必要がある
password => ''
# config => '/path/to/node2_config_file.conf' # コメントアウト
);
# 使用しないnodeはコメントアウト
# add_node(node => 3,
# host => 'server3',
# dbname => 'database',
# port => 5432,
# user => 'postgres',
# password => '',
# config => '/path/to/node3_config_file.conf');
# add_node(node => 4,
# parent => 3,
# host => 'server4',
# dbname => 'database',
# port => 5432,
# user => 'postgres',
# password => '',
# config => '/path/to/node4_config_file.conf');
#(149行目)
"table_id" => 1,
"sequence_id" => 1,
# Primary Keyを持つ同期対象テーブルを設定
"pkeyedtables" => [
※省略
],
# 修正(keyedtablesの内容を削除)
# "keyedtables" => {
# 'table3' => 'index_on_table3',
# 'table4' => 'index_on_table4',
# },
"keyedtables" => {
},
# 同期対象のシークエンスを設定
"sequences" => [
※省略
],
},
#コメントアウト
# "set2" => {
# "set_id" => 2,
# "table_id" => 6,
# "sequence_id" => 3,
# "pkeyedtables" => ["table6"],
# "keyedtables" => {},
# "sequences" => [],
# },
};
-------------------------
Postgresqlの他サーバからの接続を許可します。
# cd /var/lib/pgsql/12/data/
# cp -ap postgresql.conf postgresql.conf`date "+%Y%m%d%H%M"`
# vi postgresql.conf
- - - - - - - - - - - - - - - - - - - -
(53行目:CONNECTIONS AAND AUTEHNTICATION項目)
listen_addresses = '*'
- - - - - - - - - - - - - - - - - - - -
Postgresqlでローカルネットワークからの接続を許可します。
# cp -ap pg_hba.conf pg_hba.conf.`date "+%Y%m%d%H%M"`
# vi pg_hba.conf
-------------------------
host joruri_production joruri 192.168.0.2/32 md5
host joruri_production joruri 192.168.0.3/32 md5
-------------------------
実行するユーザの権限にSUPERUSER権限を付与します。
# su - postgres
$ psql
postgres=# ALTER USER joruri WITH PASSWORD 'joruripass';
postgres=# ALTER ROLE joruri SUPERUSER;
postgres=# \q
slonプロセスにパスワードが表示されるため、.pgpassを作成します。
$ vi ~/.pgpass
-------------------------
192.168.0.2:5432:joruri_production:joruri:joruripass
192.168.0.3:5432:joruri_production:joruri:joruripass
-------------------------
$ chmod 600 ~/.pgpass
$ exit
# vi ~/.pgpass
-------------------------
192.168.0.2:5432:joruri_production:joruri:joruripass
192.168.0.3:5432:joruri_production:joruri:joruripass
-------------------------
# chmod 600 ~/.pgpass
# systemctl restart postgresql-12
[WEBサーバー]
Joruriユーザーーのcrontab設定を全て削除(コメントアウトでも可)にします。
# su - joruri -c 'crontab -e'
delayed_jobを停止します。
# systemctl stop joruri_delayed_job && systemctl disable joruri_delayed_job
[CMSサーバー]
連携機能の有効化
# su - joruri
$ cd /var/www/joruri
slonik.ymlをコピー
$ cp config/original/slonik.yml config/slonik.yml
$ vi config/slonik.yml
-------------------------
default: &default
enabled: true # ここをtrueにする
-------------------------
$ exit
Slonyを初期設定します。
# su -
# cd /usr/local/slony/bin/
# ./slonik_init_cluster --config=../etc/slon_tools.conf | ./slonik
MasterでSlonyによるレプリケーション構成を作成します。
# ./slonik_create_set --config=../etc/slon_tools.conf set1 | ./slonik
MasterでSlonyのレプリケーションを開始します。
# ./slon_start --config=../etc/slon_tools.conf node1
Slonyが稼働していることを確認します。
# ps -ef | grep slony
# cd /usr/local/slony/bin/
# ./slon_start --config=../etc/slon_tools.conf node2
[WEBサーバー]
# su -
# cd /usr/local/slony/bin/
# ./slon_start --config=../etc/slon_tools.conf node2
[CMSサーバー]
同期状態を確認します。
# su - postgres
$ psql joruri_production
joruri_production=# select * from _replication.sl_status;
st_origin | st_received | st_last_event | st_last_event_ts | st_last_received | st_last_received_ts | st_last_received_event_ts | st_lag_num_events | st_lag_time
-----------+-------------+---------------+-------------------------------+------------------+-------------------------------+-------------------------------+-------------------+-----------------
2 | 1 | 5000000138 | 2019-11-12 14:54:34.786548+09 | 5000000137 | 2019-11-12 14:54:25.378416+09 | 2019-11-12 14:54:24.777618+09 | 1| 00:00:13.089255
(1 行)
「st_last_event」と「st_last_received」がMaster-Slave間のトリガイベントを表しており、
更新は「st_lag_time」が一定間隔(数十秒以下)であれば正常に行われています。
[WEBサーバー][CMSサーバー]共通
自動起動、環境変数、ログローテート設定を追加します。
# su -
# cd /usr/local/slony/etc/
自動起動用の設定を作成します。[node-id]は各環境に合わせて変更してください。
# vi slony.service
-------------------------
[Unit]
Description=Slony-I daemon
After=postgresql-12.service
[Service]
Type=simple
PIDFile=/run/replication_node[node-id].pid
ExecStart=/usr/local/slony/bin/slon_start --config=/usr/local/slony/etc/slon_tools.conf node[node-id]
ExecStop=/usr/local/slony/bin/slon_kill
[Install]
WantedBy=multi-user.target
-------------------------
環境変数の設定を作成します。
# vi slony.sh
-------------------------
export PATH="/usr/local/slony/bin:${PATH}"
-------------------------
logrotateによるログローテート設定を作成します[node-id]は各環境に合わせて変更してください。
# vi slony_logrotate
-------------------------
"/var/log/slony1/node[12]/*.log" {
rotate 5
daily
copytruncate
delaycompress
compress
notifempty
missingok
su root root
postrotate
/usr/local/slony/bin/slon_kill node[node-id] > /dev/null 2>&1
sleep 10
/usr/local/slony/bin/slon_start node[node-id] > /dev/null 2>&1
endscript
}
-------------------------
作成したファイルを各設定ディレクトリへコピーします。
# cp -ap ./slony.sh /etc/profile.d/
# cp -ap ./slony_logrotate /etc/logrotate.d/
# cp -ap ./slony.service /usr/lib/systemd/system/
Slonyを自動起動に設定します。
# systemctl start slony && systemctl enable slony
※何らかの原因でレプリケーションに失敗する場合はSlonyの初期化を行ってください。
Slonyプロセスを停止します。
# systemctl stop slony
[CMSサーバー]
Postgresqlのslony用のスキーマと設定を削除します。
# slonik_uninstall_nodes | slonik
Slonyを初期化します。
# slonik_init_cluster --config=/usr/local/slony/etc/slon_tools.conf | slonik
MasterでSlonyによるレプリケーション構成を作成します。
# slonik_create_set --config=/usr/local/slony/etc/slon_tools.conf set1 | slonik
Masterのnodeを開始します。
# slon_start --config--config=/usr/local/slony/etc/slon_tools.conf node1
Slaveのnodeを開始します。
# slon_start --config=/usr/local/slony/etc/slon_tools.conf node2
Slaveのレプリケーションを開始します。
# slonik_subscribe_set --config=/usr/local/slony/etc/slon_tools.conf set1 node2 | slonik
**********************************************************************
3. RSAキーペア認証の設定
**********************************************************************
パスなしRsyncが利用できるようにRSAキーペア認証を設定します。
[CMSサーバー]
joruriユーザーのキーペアを生成
# su - joruri -c 'cd && ssh-keygen -t rsa'
パスフレーズは空でenterを押すこと
public keyをメモします。
# cat /home/joruri/.ssh/id_rsa.pub
-------------------------
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzlmMnohZgk9vRsgLeVlwWmlwSuwJA0sbx3J/x8sIu1Vv2ypLHuOaRx6v0cN72VzR1HXV2Lsy5GfBF7LhNBole0DqWE228NLJhzHwGAegbnhsVcphnHYUlm1tV4+bTB/XFzErsTr6Uuok6HlE9nFcFgyTr+c/ifjRkOdLXgk4O1zgzUaj36ld6XB8Bl+f/dCG92hnSP+CTnfeMKk2sUTI8aUZ8QlIblBkL6ydcwxypvpYoUAL9mHKjE/G+fPfOtsh7DwDIgt/7f3+yzclXv2Hhqp5oRQbAKy7H+T/kbZjWDmK/GaCpYBKdoMxmXRvFvHey1MGc2FVRnKv2MJIqeWoQw== joruri@cms
-------------------------
[WEBサーバー]
CMSサーバーのpublic keyをauthorized_keysファイルに追加
# su - joruri -c 'cd && mkdir .ssh && chmod 700 .ssh && touch .ssh/authorized_keys'
# vi /home/joruri/.ssh/authorized_keys
-------------------------
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzlmMnohZgk9vRsgLeVlwWmlwSuwJA0sbx3J/x8sIu1Vv2ypLHuOaRx6v0cN72VzR1HXV2Lsy5GfBF7LhNBole0DqWE228NLJhzHwGAegbnhsVcphnHYUlm1tV4+bTB/XFzErsTr6Uuok6HlE9nFcFgyTr+c/ifjRkOdLXgk4O1zgzUaj36ld6XB8Bl+f/dCG92hnSP+CTnfeMKk2sUTI8aUZ8QlIblBkL6ydcwxypvpYoUAL9mHKjE/G+fPfOtsh7DwDIgt/7f3+yzclXv2Hhqp5oRQbAKy7H+T/kbZjWDmK/GaCpYBKdoMxmXRvFvHey1MGc2FVRnKv2MJIqeWoQw== joruri@web
-------------------------
# chmod 600 /home/joruri/.ssh/authorized_keys
SSH設定にRSAキー認証の有効かとjoruriユーザーを追加
# vi /etc/ssh/sshd_config
-------------------------
RSAAuthentication yes
AllowUsers joruri
-------------------------
SSHを再起動
# systemctl restart sshd.service
**********************************************************************
4. RSYNCの設定
**********************************************************************
CMSサーバーからWEBサーバーへのRsyncを設定します。
file_transferを有効にすることで、ページ書き出し処理時にRsync転送処理も実行されるようになります。
[CMSサーバー]
# su - joruri
$ vi /var/www/joruri/config/application.yml
-------------------------
# ファイル転送機能
file_transfer: true
-------------------------
$ vi /var/www/joruri/config/rsync.yml
-------------------------
production:
bin: rsync
opts: -lptzv --delete -e "ssh -p 22"
dests:
- path: joruri@192.168.0.2:/var/www/joruri/
-------------------------
コンフィグファイルの転送設定
$ mkdir /home/joruri/shell
$ vi /home/joruri/shell/file_sync.sh
-------------------------
# WEBサーバー
rsync -avz --delete --copy-links -e ssh /var/www/joruri/sites/ 192.168.0.2:/var/www/joruri/sites/
-------------------------
$ vi /home/joruri/shell/site_conf_sync.sh
-------------------------
# WEBサーバー
rsync -avz --delete --copy-links -e ssh /var/www/joruri/config/nginx/servers/ 192.168.0.2:/var/www/joruri/config/nginx/servers/
rsync -lptzv --delete -e ssh /var/www/joruri/sites/*/ 192.168.0.2:/var/www/joruri/tmp/sites/*/
rsync -avz --delete -e ssh /var/www/joruri/tmp/reload_servers.txt 192.168.0.2:/var/www/joruri/tmp/
-------------------------
$ chmod 755 /home/joruri/shell/file_sync.sh
$ chmod 755 /home/joruri/shell/site_conf_sync.sh
$ crontab -e
-------------------------
# file transfer
#*/30 * * * * /home/joruri/shell/file_sync.sh > /home/joruri/shell/file_sync.log
# site conf transfer
29,59 * * * * /home/joruri/shell/site_conf_sync.sh > /home/joruri/shell/site_conf_sync.log
-------------------------
$ exit
**********************************************************************
5. WEBサーバーの管理画面URLを無効化
**********************************************************************
[CMSサーバー]
/_systemのURLを無効化する設定を追加
# su - joruri
$ mkdir /var/www/joruri/config/nginx/servers/site.d
$ vi /var/www/joruri/config/nginx/servers/site.d/deny_systems.conf
-------------------------
location ~ ^/_system {
try_files $uri $uri/index.html @proxy;
deny all;
}
-------------------------
$ mkdir /var/www/joruri/config/nginx/servers/ssl_site.d
$ cp -arp /var/www/joruri/config/nginx/servers/site.d/deny_systems.conf /var/www/joruri/config/nginx/servers/ssl_site.d/deny_systems.conf
$ exit
**********************************************************************
6. アンケートフォーム等の取り込み設定
**********************************************************************
WEBサーバーで受け付けた情報をCMSサーバーに取り込むためのデータベース接続設定です。
[CMSサーバー]
# su - joruri
$ cd /var/www/joruri/config
$ cp -ap database.yml database.yml_`date "+%Y%m%d"`
$ vi database.yml
-------------------------
#末尾に追記
production_pull_database:
<<: *default
database: joruri_production
username: joruri
password: joruripass
host: 192.168.0.2
-------------------------
$ exit
サービス再起動
# su -
# systemctl restart joruri_delayed_job
# systemctl restart joruri_unicorn
# systemctl restart nginx
以上