いざ!passbolt!!の前のnginxの.confファイルの設定
nginxのバーチャルホストの設定をするだけでしょ?と思ったらつまづいた…ので一から丁寧に設定してみた。
導入環境
EC2
CentOS7
PHP7
MariaDB
Nginx
参考
passbotl How to install passbolt on your own server
URLリライティング
手順
- nginx上でPHPが動いているのか確認する。
- CakePHPのindex.phpに接続する。
だけのはずなのに…
1. nginx上でPHPが動いているのか確認する。
パスワード管理ツール「Passbolt」を導入してみた
でpassboltのインストールが終わっているところからの手順です。
まず/var/www/index.php を作成し表示させてみる。中身は何でもよい。
続いてnginxの*.confファイルをコピーして作成する。default.confはじゃまなのでdefault.conf.ORGなどリネームしておいた。
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/passbolt.conf
passbolt.conf を編集する。
- rootのパスをindex.phpを置いているパスに変更する。
- location ~ .php$ のコメントアウトを外す
- fastcgi_paramもindex.phpを置いているパスに変更する。
location / {
root /var/www;
index index.php;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
ブラウザから接続してみるとPHPがnginx上で動作していることとバーチャルホスト設定がうまくいっていることが確認できる。
今回はechoで「testtest」と表示されれば設定がうまくいったことになる。
testtest
2. CakePHPのindex.phpに接続する。
CackPHPのrootは /passboltをインストールしたディレクトリ/passbolt/app/webroot の中の index.php なのでそのように設定をする。
パスをpassboltように変更しただけではCakePHPは表示できないようなので、公式ページを参考に書き直す。
公式ページ
ついでにlogのファイル設定もする。
root /passboltがあるところのパス/app/webroot;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /passboltがあるところのパス/app/webroot$fastcgi_script_name;
}
nginxを再起動する。
systemctl restart nginx
ブラウザから確認したら真っ白だったので app/Config/core.php を編集してエラーが出るようにした。1がエラーが表示されるデバッグモード。
Configure::write('debug', 1);
もう一度確認するとエラーが大量にでた。
Warning: _cake_core_ cache was unable to write 'cake_dev_ja' to File cache in /.../passbolt/lib/Cake/Cache/Cache.php on line 327
Warning: /.../passbolt/app/tmp/cache/persistent/ is not writable in /.../passbolt/lib/Cake/Cache/Engine/FileEngine.php on line 385
Fatal error: Uncaught CacheException: Cache engine "_cake_core_" is not properly configured. Ensure required extensions are installed, and credentials/permissions are correct in /.../passbolt/lib/Cake/Cache/Cache.php:186 Stack trace: #0 /.../passbolt/lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('_cake_core_') #1 /.../passbolt/app/Config/core.php(400): Cache::config('_cake_core_', Array) #2 /.../passbolt/lib/Cake/Core/Configure.php(72): include('/.../p...') #3 /.../passbolt/lib/Cake/bootstrap.php(432): Configure::bootstrap(true) #4 /.../passbolt/app/webroot/index.php(95): include('/.../p...') #5 {main} thrown in /.../passbolt/lib/Cake/Cache/Cache.php on line 186
このエラーが表示された時の原因は主に3つ。
- Permissionがrootになっている。
- Permissionに書き込み権限がない。
- SELinuxが有効になっている。
Permissionの変更
app/tmp/cache以下にいつのまにか作られていたフォルダが作られていた。
- models
- persistent
app/tmp/cache/ 以下の権限を変更し、変更されたことを確認する。
chown -R nginx:nginx app/tmp/cache/
chmod -R 766 app/tmp/cache/
SELinuxを無効にする
今回はEC2上にインストールしている。EC2はデフォルトでSELinuxがenforcingになっていて、それが原因でアクセスできないらしい。
まずはサーバーのSELinuxの状態を確認する。
getenforce
このコマンドでEnforcingと表示されればSELinuxが有効になっている。
Enforcing
/etc/selinux/config を編集して無効の状態にする。
permissiveは警告はするけど無効という状態。
SELINUX=permissive
SELinuxの変更を反映させるためにサーバーを再起動させる。
reboot
nginx、mariadb、php-fpmをstartさせる。
systemctl start nginx
service mariadb start
service php-fpm start
もう一度ブラウザから接続すると別のエラーがでた。
The GPG Server key defined in the config is not found in the gpg keyring
Error: An Internal Error Has Occurred.
Stack Trace
APP/Controller/Component/Auth/GpgAuthenticate.php line 49 → GpgAuthenticate->_initKeyring()
CORE/Cake/Controller/Component/AuthComponent.php line 770 → GpgAuthenticate->authenticate(CakeRequest, CakeResponse)
CORE/Cake/Controller/Component/AuthComponent.php line 611 → AuthComponent->identify(CakeRequest, CakeResponse)
APP/Controller/AuthController.php line 35 → AuthComponent->login()
[internal function] → AuthController->login()
CORE/Cake/Controller/Controller.php line 491 → ReflectionMethod->invokeArgs(AuthController, array)
CORE/Cake/Routing/Dispatcher.php line 193 → Controller->invokeAction(CakeRequest)
CORE/Cake/Routing/Dispatcher.php line 167 → Dispatcher->_invoke(AuthController, CakeRequest)
APP/webroot/index.php line 110 → Dispatcher->dispatch(CakeRequest, CakeResponse)
調べてみると、前回設定したはずの /opt/passbolt/.gnupg のPermissionが不足していた。
chmod -R 777 /opt/passbolt/.gnupg/
これでやっとつながった…が、「ユーザーが一人も作成されていませんよ?」的な警告を受けたのでそちらの手順も残しておくことにした。
管理者を作成する前にメールの設定も行っておくと、登録時のメールアドレスにpassboltからメールが送信されるのでそちらもしておく。
cp app/Config/email.php.default app/Config/email.php
vim app/Config/email.php
passboltの公式サイトを参考に設定する。
public $default = array(
'transport' => 'Smtp',
'from' => array('passbolt@yourdomain.com' => 'Passbolt'),
'host' => 'メールを送信するサーバーのホスト名',
'port' => 587,
'timeout' => 30,
'username' => 'ユーザー名',
'password' => 'パスワード名',
);
cronで送信を実行するコマンドも設定してあげる。
* * * * * /passboltまでのパス/app/Console/cake EmailQueue.sender > /passboltまでのパス/app/log/sendmail.log
メール送信の設定がうまく行われていれば、次のコマンドで管理者を作成後に指定したメールアドレスにpassboltからメールが届く。
app/Console/cake passbolt register_user -u 登録する人のメールアドレス -f myFirtsname -l myLastname -r admin
あとはメールに記載されているリンクからpassboltに接続をして完了。