CentOS 7 に Restyaboard をインストールする手順

TL;DR
このガイドでは CentOS 7 上に Restyaboard(自己ホスト型のオープンソース Kanban)を、Nginx + PHP-FPM(Unix ソケット)+ PostgreSQL 環境でセットアップする手順を詳述します。主要な手順は: パッケージ更新、Nginx インストール、PHP 7.0 と PHP-FPM 設定、PostgreSQL の導入とデータベース作成、Restyaboard のダウンロードと設定、Nginx サーバーブロック調整、パーミッション・cron・SELinux の対応です。最後にトラブルシューティング、バックアップ、運用チェックリストを掲載しています。
目的と適用範囲
このドキュメントは、CentOS 7(最小インストール)サーバー上で Restyaboard を自己ホストで稼働させる手順です。対象はシステム管理者や DevOps エンジニア向けで、root 権限を前提とします。必要に応じて SSL 設定やファイアウォール、LDAP 認証、定期バックアップなどの追加項目も解説します。
重要: Restyaboard の配布や依存は変わる可能性があります。常に公式リリースページやパッケージの署名を確認してください。
前提条件
- 最小の CentOS 7 インストール
- root 権限(sudo でも可)
- 基本的な Linux コマンドの理解
重要ノート: 本チュートリアルは元ソースの手順に準拠しています。OS やパッケージのバージョンによっては、代替リポジトリやパッケージ名が変わる場合があります。
準備: パッケージ更新
まずシステムパッケージを最新にします。
yum -y update
更新後に再起動が必要なカーネルやサービスがある場合は適宜再起動してください。
ステップ 1 - Nginx のインストール
Nginx はデフォルトの CentOS YUM リポジトリに無い場合があります。EPEL リポジトリを入れてからインストールします。
yum -y install epel-release
yum -y install nginx
インストール後、Nginx を起動し自動起動を有効化します。
systemctl start nginx
systemctl enable nginx
動作確認:
systemctl status nginx
ss -ltnp | grep nginx
重要: ファイアウォール(firewalld)を使っている場合は 80/tcp(HTTP)や 443/tcp(HTTPS)を開放してください。
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
ステップ 2 - PHP-FPM と mbstring の導入と設定
Restyaboard は記事作成時点で PHP 7.0 を想定しています(配布版に依存)。PHP のバージョンやサポート状況は変化します。可能であれば、Restyaboard がサポートする最新の PHP バージョンを使用してください。
Webtatic リポジトリから PHP 7.0 を導入します。
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
必要な PHP パッケージをインストールします。
yum -y install php70w php70w-fpm php70w-devel php70w-cli php70w-curl php70w-pgsql php70w-mbstring php70w-ldap php70w-pear php70w-imap php70w-xml php70w-pecl-imagick ImageMagick
PHP-FPM の既定設定は Apache 用ユーザー(apache)になっている場合があります。Nginx で動かすために /etc/php-fpm.d/www.conf を編集してユーザー・グループを nginx に変更します。ここでは nano を使います。
yum -y install nano
nano /etc/php-fpm.d/www.conf
www.conf で次の行を確認して変更します(ファイル内のコメントはそのまま残ります)。
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
リッスン方法はポートではなく Unix ソケットを使うのが推奨です。次の行を置き換えます。
listen = 127.0.0.1:9000
を
listen = /run/php-fpm/php7.0-fpm.sock
さらにソケットの所有者とパーミッションを設定します。
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
を
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
php.ini のタイムゾーンを設定します(システムやアプリのログ整合のため)。
nano /etc/php.ini
例:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
date.timezone = Asia/Tokyo
cgi.fix_pathinfo はセキュリティ目的で 0 にします。
cgi.fix_pathinfo=0
GeoIP を使う場合はライブラリを導入し php.ini に拡張を追加します。
yum -y install GeoIP-devel
/etc/php.ini の末尾に次を追加:
extension=geoip.so
PHP-FPM を起動して自動起動を有効化します。
systemctl start php-fpm
systemctl enable php-fpm
Nginx を再起動して PHP-FPM ソケットとの接続を反映します。
systemctl restart nginx
注意: unix ソケットパスは配布やディストリの設定により /run/php-fpm/php7.0-fpm.sock のように異なる場合があります。Nginx 設定と一致させてください。
ステップ 3 - PostgreSQL のインストールと設定
Restyaboard は PostgreSQL を使用します。この記事では PostgreSQL 9.6 のリポジトリとインストール手順を示します。
rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum -y install postgresql96-server postgresql96-contrib
初期化:
/usr/pgsql-9.6/bin/postgresql96-setup initdb
接続方式の設定: /var/lib/pgsql/9.6/data/pg_hba.conf を編集して md5 認証を有効にします。
nano /var/lib/pgsql/9.6/data/pg_hba.conf
元の設定例(編集前):
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
変更後(ローカル接続を md5 にする例):
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
PostgreSQL を起動して自動起動を有効化します。
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
postgres ユーザーのパスワードを設定します。
passwd postgres
postgres ユーザーに切り替え、Restyaboard 用データベースとユーザーを作成します。
su - postgres
createuser rb_user
psql
psql 内でパスワード設定とデータベース作成:
ALTER USER rb_user WITH ENCRYPTED password 'StrongPassword';
CREATE DATABASE rb_data OWNER rb_user ENCODING 'UTF8' TEMPLATE template0;
\q
注意: ‘StrongPassword’ は実運用ではより強固な生成済みパスワードに変更してください。パスワードは安全に管理してください。
ステップ 4 - Restyaboard のダウンロードと初期導入
ダウンロード先は元記事の配布バージョン v0.4.2 の例です。最新のリリースは公式 GitHub を確認してください。
cd /usr/share/nginx/html
wget https://github.com/RestyaPlatform/board/releases/download/v0.4.2/board-v0.4.2.zip
unzip が無ければ導入して展開します。
yum -y install unzip
unzip board-v0.4.2.zip -d board
データベースにスキーマをインポートします。
psql -d rb_data -f "/usr/share/nginx/html/board/sql/restyaboard_with_empty_data.sql" -U rb_user
設定ファイルに DB 情報を反映します。
nano /usr/share/nginx/html/board/server/php/config.inc.php
元の設定例:
define('R_DB_HOST', 'localhost');
define('R_DB_USER', 'restya');
define('R_DB_PASSWORD', 'hjVl2!rGd');
define('R_DB_NAME', 'restyaboard');
define('R_DB_PORT', 5432);
編集後:
define('R_DB_HOST', 'localhost');
define('R_DB_USER', 'rb_user');
define('R_DB_PASSWORD', 'StrongPassword');
define('R_DB_NAME', 'rb_data');
define('R_DB_PORT', 5432);
セキュリティ注意: config.inc.php 内に平文でパスワードがあるため、ファイルのパーミッションを制限し、Web サーバー以外から読めないようにしてください。
chown nginx:nginx /usr/share/nginx/html/board/server/php/config.inc.php
chmod 640 /usr/share/nginx/html/board/server/php/config.inc.php
ステップ 5 - Nginx サーバーブロックの設定
zip に同梱の restyaboard.conf を /etc/nginx/conf.d にコピーし、ドメインと root パスを修正します。
cp /usr/share/nginx/html/board/restyaboard.conf /etc/nginx/conf.d
nano /etc/nginx/conf.d/restyaboard.conf
server ブロックの最初の部分を変更します(default_server を削除し、実際のドメインを指定)。
server {
listen 80;
server_name board.yourdomain.com;
root と location を Restyaboard 配置場所に合わせて修正します。
root /usr/share/nginx/html/board;
location / {
root /usr/share/nginx/html/board/client;
}
# また別箇所にある root 指定も /usr/share/nginx/html/board/client に合わせてください
fastcgi_pass の Unix ソケットパスも合わせます。
fastcgi_pass unix:/run/php-fpm/php7.0-fpm.sock;
ファイルを保存したら、Nginx を検証して再起動します。
nginx -t
systemctl restart nginx
パーミッション設定(必須):
chown -R nginx:nginx /usr/share/nginx/html/board/
chmod -R go+w "/usr/share/nginx/html/board/media"
chmod -R go+w "/usr/share/nginx/html/board/client/img"
chmod -R go+w "/usr/share/nginx/html/board/tmp/cache"
chmod -R 0755 /usr/share/nginx/html/board/server/php/shell/*.sh
cron で定期ジョブを追加します。
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/instant_email_notification.sh" >> /var/spool/cron/root
echo "0 * * * * /usr/share/nginx/html/board/server/php/shell/periodic_email_notification.sh" >> /var/spool/cron/root
echo "*/30 * * * * /usr/share/nginx/html/board/server/php/shell/imap.sh" >> /var/spool/cron/root
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/webhook.sh" >> /var/spool/cron/root
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/card_due_notification.sh" >> /var/spool/cron/root
SELinux について
元手順では SELinux を無効化する手順が示されています。SELinux を永続的に無効化する前に影響範囲を評価してください。可能であれば、SELinux の許可を追加して必要なポリシーだけ許可する方が安全です。即時に無効化するコマンド:
setenforce 0
恒久的に無効にするには /etc/selinux/config を編集します。
nano /etc/selinux/config
# SELINUX=enforcing を SELINUX=disabled に変更
注意: SELinux を無効化することはセキュリティリスクを高めます。代替として fcontext と semanage、setsebool を使用して必要なポリシーを開放することを検討してください。
動作確認と初回ログイン
ブラウザで次の URL にアクセスします(board.yourdomain.com は実際のホスト名に置き換え)。
http://board.yourdomain.com
以下のログイン画面が表示されます。
デフォルトのログイン: ユーザー admin / パスワード restya(初回ログイン後にパスワードを変更してください)。ログイン後のダッシュボード画面例:
ボード作成は画面左上の矢印メニューから「Add Board」または「Organization」を選びます。
テンプレート選択画面例:
新規ボードの表示例:
管理パネルへは画面右下の Admin ボタンから Settings に入れます。
運用と保守のチェックリスト(ロール別)
システム管理者
- Nginx, PHP-FPM, PostgreSQL の自動起動確認
- OS セキュリティ更新の定期適用
- バックアップスクリプトのスケジュール
- SSL 証明書更新の自動化 (Let’s Encrypt 等)
アプリケーション管理者
- Restyaboard のログ監視(エラー/例外)
- 定期的な DB バックアップと復元テスト
- cron ジョブが想定どおり実行されているか確認
開発/運用担当
- カスタムプラグインや統合の互換性確認
- アップグレード前のステージング環境での検証
バックアップと復元のミニ・メソドロジー
- PostgreSQL ダンプ(毎日/重要時間帯):
pg_dump -U rb_user -Fc rb_data > /var/backups/rb_data_$(date +%F).dump
- Restyaboard メディアと設定の同期:
rsync -a --delete /usr/share/nginx/html/board/media/ /backups/restyaboard/media/
rsync -a --delete /usr/share/nginx/html/board/server/php/config.inc.php /backups/restyaboard/config.inc.php
- 復元手順(要テスト):
- DB を停止
- pg_restore でダンプを復元
- ファイルを所定ディレクトリへ復元
- パーミッション確認・再起動
常に定期的に復元テストを行い、バックアップの整合性を検証してください。
セキュリティ強化のヒント
- SSL/TLS を必須にする(Let’s Encrypt + certbot)
- PHP 設定で display_errors をオフにし、本番でエラーメッセージを公開しない
- Web サーバーで適切なヘッダーを追加(HSTS, X-Frame-Options など)
- DB ユーザーには最低限の権限しか与えない
- cfg ファイルやバックアップに平文パスワードを置かない
- SELinux を無効にする代わりに必要なポリシーを付与する
よくあるトラブルと対処法
Nginx が 502 Bad Gateway を返す
- nginx エラーログ (/var/log/nginx/error.log) を確認
- PHP-FPM が起動しているか確認: systemctl status php-fpm
- fastcgi_pass のソケットパスが一致しているか確認
- ソケットの所有権とパーミッションを確認
PostgreSQL 接続エラー
- pg_hba.conf の認証方式を確認(md5 か peer)
- DB ユーザー名/パスワード、データベース名が config.inc.php と一致しているか確認
- psql コマンドで手動接続テストを実行
パーミッションエラーで画像や添付がアップロードできない
- /usr/share/nginx/html/board/media や tmp ディレクトリの書き込み権限を確認
アップグレードとマイグレーションの注意点
- 事前に完全バックアップを取得する
- 本番アップグレード前にステージング環境で検証
- データベース変更がある場合はマイグレーションスクリプトを確認
- カスタムプラグインやテーマの互換性を確認
互換性と代替アプローチ
- PHP の代替: Docker コンテナ内で新しい PHP バージョンを使う方法(ホストと分離)
- DB の代替: Restyaboard は PostgreSQL を使うため、切替は容易ではありません。既存の RDBMS を移行する場合は変換・検証が必要。
テストケース(受入基準)
- ブラウザでホームページにアクセスし、ログイン画面が表示される
- 管理者 admin でログインし、ボード作成ができる
- カード作成と添付ファイルのアップロードが成功する
- cron ジョブが定期実行され、メール通知(有効時)が送信される
- DB バックアップを復元してアプリケーションが正常に動作する
運用リスクと軽減策
- リスク: PHP/OS の脆弱性。軽減策: パッチ適用と隔離(コンテナ化)
- リスク: バックアップの欠如。軽減策: 定期バックアップと復元テスト
- リスク: 平文パスワード。軽減策: シークレットマネージャや権限管理
FAQ
Q: デフォルト admin/restya のパスワードはそのまま使えますか?
A: 初回ログインは可能ですが、必ずログイン後に管理者パスワードを強固なものに変更してください。
Q: SELinux を無効化しても良いですか?
A: 開発環境では一時的に無効化して検証できますが、本番では SELinux を無効化するよりポリシーを調整する方が安全です。
Q: SSL 証明書はどう設定しますか?
A: certbot(Let’s Encrypt)を使って自動で証明書を取得し、Nginx の server ブロックに 443 の設定を追加するのが一般的です。
まとめ
- CentOS 7 上で Restyaboard を動かすには Nginx + PHP-FPM + PostgreSQL が必要です。
- PHP-FPM は Unix ソケットを使い、Nginx 側の fastcgi_pass と一致させることが重要です。
- DB 設定とパーミッション、cron、SELinux の扱いは導入時に確認するポイントです。
主要ポイントの要約は次のとおりです。
- パッケージ更新を行い、依存リポジトリを追加してインストールする
- PHP-FPM のユーザー/ソケット/タイムゾーンを適切に設定する
- PostgreSQL の認証方式と DB ユーザーを作成する
- Restyaboard の設定ファイルに DB 情報を正しく書き込む
- Nginx 設定とパーミッションを確認し、cron を登録する
これで Restyaboard が利用可能になりました。運用項目(バックアップ、ログ監視、セキュリティ更新)を運用フローに組み込み、定期的な検証を行ってください。