Friction River Software

  • お問い合わせ

CakePHP5入門【CakePHP5実用編⑯】本番環境へのデプロイ

B美

さーて、それじゃ、本番環境(我が社のWebサーバ)にチャットアプリを設置デプロイしていきましょうか

C菜

色々と手順が複雑だったような記憶があります~

A子

過去の記事を読み返してみたんだけど、こんな流れだったと思うよ
(【CakePHP5応用編⑩】を参照)

まず開発環境側での準備だけど…

1.mysqldumpでデータベースのバックアップを取ったら、それを加工してデータベースの定義ファイルを作成する
2.キャッシュクリアを実行する
3.SCPを使って、本番環境へのアップロードを実行する

で、本番環境側での処理がこうだね

4.SSH接続してから、データベースを作成する(定義ファイルを読み込む)
5.「config/app_local.php」の中にあるデータベースパスワードを書き換える
6.「config/const.php」の内容を本番環境に合わせて書き換える
7.「logs」ディレクトリ及び「webroot/personal」ディレクトリ内のファイルを削除する(ただし「default.png」は削除しない)
8.「webroot/personal」ディレクトリのオーナーを「www-data」に変更する
9.WebSocketサーバの自動起動設定を行う(+サーバ起動)
10.ブラウザから(httpsで)アクセスし、動作確認を行う

B美

おぉ、よく分かってるじゃない

その手順で大丈夫だから、A子とC菜の二人でやってみなさい
(実は、6番では定数を一つ追加しないといけないんだけど…)

C菜

了解です~
まずは

1.mysqldumpでデータベースのバックアップを取ったら、それを加工してデータベースの定義ファイルを作成する

ですねぇ~

A子

MATE端末」を開いたら、次のコマンドを打ち込むよ

mysqldump -u root -p chatdb > chatdb_backup.sql[Enter]

C菜

chatdb_backup.sql」を開いたら、「CREATE TABLE」文だけを残しますね~
(ただし、テーブル定義の末尾にある「AUTO_INCREMENT=○」だけは削除しておきます~)

あと、先頭に以下の二行を追加するです~

create database chatdb;

use chatdb;



B美

ちょーっと待ったぁ!

上記の「chatdb_backup.sql」だけど、「users」テーブルの定義を一番上に移動してね

C菜

なぜでしょうか~?

B美

「users」テーブルの主キーを別のテーブルで外部キー参照しているからよ

先に外部キー参照の記述があると、エラーになるかもしれない…
(ならないかもしれない…よく分からん(苦笑))



A子

へぇー、なるほどね(適当)
んじゃ、次…

2.キャッシュクリアを実行する

これは簡単だね

cd html/authapp[Enter]
bin/cake cache clear_all[Enter]

C菜

では3番目です~

3.SCPを使って、本番環境へのアップロードを実行する

gFTP」を使って「authapp」ディレクトリを本番環境のドキュメントルートへアップロードしますね~
(【CakePHP5応用編⑩】を参照)

これは少し時間がかかりますよ~

A子

あ、1番で作った「chatdb_backup.sql」も忘れずにアップロードしないとね
(ドキュメントルートじゃなくて、ユーザホームへ)

んで、アップロードが終われば、いったん接続を切って…っと

よし!
ここからは本番環境上での作業だね

4.SSH接続してから、データベースを作成する(定義ファイルを読み込む)

MATE端末」を開いて

ssh -i .ssh/sakura.pem -p nnnn xxxx@friction-river.jp[Enter]

を入力すれば良いんだよね?
(「nnnn(ポート番号)」と「xxxx(ユーザ名)」の部分はもちろん伏字)

C菜

それではデータベースを作成しますね~

mysql -u root -p < chatdb_backup.sql[Enter]

A子

うん
確認してみたけど、問題なくデータベース自体もその中のテーブルも作られてた…

5.「config/app_local.php」の中にあるデータベースパスワードを書き換える

これは、さくっと完了したよ

6.「config/const.php」の内容を本番環境に合わせて書き換える

これは少し面倒くさいね(汗)

define("ADMIN_ID", "********");    //管理者ID
define("ADMIN_PASS", "********");    //管理者パスワード
define("WEBSOCKET_IP", "friction-river.jp");    //WebSocketサーバのIPアドレス
define("CERT_FILE", "/********/server.crt");    //サーバ証明書
define("PK_FILE", "/********/server.key");    //秘密鍵
define("MAIL_URL", "https://friction-river.jp/authapp/applicants/welcome/");    //メール中に記載するURLの中でトークン以外の部分

もちろん「*」の箇所は伏字だよ
(「サーバ証明書」と「秘密鍵」の場所はB美に聞いたんだけど、セキュリティ上明かせません(苦笑))

B美

あー、「WEBSOCKET_IP」はIPアドレスじゃないとダメよ
(これはWebSocketの仕様みたい…)

でもクライアントからはドメイン名でアクセスしないといけないから、定数を一つ(「WEBSOCKET_NAME」を)追加しなさいね

define("WEBSOCKET_IP", "49.212.186.238");    //WebSocketサーバのIPアドレス
define("WEBSOCKET_NAME", "friction-river.jp");    //WebSocketサーバのドメイン名

…ってこと

あと、「templates/Chat」の中にある「index.php」のJavaScript部分に存在する「WEBSOCKET_IP」の箇所を「WEBSOCKET_NAME」に変更してね

A子

むー、めんどくさっ!

開発環境だと、どっちもIPアドレスでOKだったのに…

C菜

では、次は7番ですね~

7.「logs」ディレクトリ及び「webroot/personal」ディレクトリ内のファイルを全て削除する(ただし「default.png」は削除しない)


cd html/authapp[Enter]
cd logs[Enter]
rm -f *[Enter]
cd ../webroot/personal[Enter]
rm -f *[Enter]

このあと「webroot/personal」の中に「default.png」だけ、もう一度アップロードするです~
(個別に削除するのが面倒くさかったので…)

C菜

さらに、続けて8番です~

8.「webroot/personal」ディレクトリのオーナーを「www-data」に変更する


cd[Enter]
cd html/authapp/webroot[Enter]
su[Enter]
chown www-data:www-data personal[Enter]
exit[Enter]

あ、「default.png」をアップロードする前にオーナー変更しちゃダメですよ~

A子

誰に言ってるのよ…(苦笑)

さーて、問題は9番だね

9.WebSocketサーバの自動起動設定を行う(+サーバ起動)

C菜

rootになってからサーバ設定を行っていきましょう~
(【補足④】を参照)

su -[Enter]
cd /etc/systemd/system[Enter]
vi websocket-server.service[Enter]

「nano」ではなく「vi」を勉強してみたので、ちょっと使ってみました~



A子

それじゃ、自動起動設定をしてみよう

systemctl daemon-reload[Enter]
systemctl enable websocket-server[Enter]

で良いんだよね?

C菜

続けて、WebSocketサーバを起動して、状態(status)を確認してみますね~

systemctl start websocket-server[Enter]
systemctl status websocket-server --no-pager[Enter]

ばっちりです~
起動したみたいですよ~

B美

それじゃ、URLとして「https://friction-river.jp/authapp」をブラウザに入力して、さっそくアクセスしてみましょう

んで、最初のユーザ(管理者)として私を登録してみるわね

B美

で、ログインした結果がこれよ
とりあえず、アイコン画像だけは変更してみたわ

あとは「ユーザ管理」画面でA子とC菜のアカウントを作ってみたから、各自ログインして「パスワード」と「アイコン画像」を変更しておきなさいね



A子

OK

ログイン後「パスワード」と「アイコン画像」を変更してから、いったんログアウトしたよ

C菜

私もです~

B美

うん、問題なくログインできたみたいね

んじゃ、チャットルームを一つ作って、三人で会話してみましょうか…

A子

それじゃ、全員でログインしてみよう

B美

私が作ったさっきのチャットルームだけど、入室順番は「私(B美)→A子→C菜」ね
(下記画面の左から右への順番)

まずは私が発言してみたわ



A子

次は私だね

C菜

最後は私です~

B美

んじゃ、退室するわね

C菜

完璧です~

B美

あ、余談だけど、この三つのブラウザって…

左から「Edgeエッジ」「Chromeクローム」「Firefoxファイアフォックス」だからね
(どのブラウザソフトでも問題なく動いたってこと)