CakePHPで時刻のズレを修正するためにCakePHPやMySQLファイルをいくらいじっても改善されない場合の対処法


ハマったこと

CakePHPで開発を進めていく中で記事の投稿日時が正しく表示されなかったので、
下記の記事などを参考にconfig/appやconfig/bootstrapをいじりましたが時刻のズレは改善されませんでした。

参考記事:CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法

環境

  • CentOS
  • Vagrant
  • CakePHP3.6
  • MySQL

原因

OS内部の時刻設定が正しく設定されていなかったことが原因でした。

試しに下記のコマンドを打ち込んでみると確かに時刻が大幅にずれていました。

$ date

根本となる時刻がずれていたのでいくらCakePHPやMySQLの設定をいじってみても意味がなかったのですね。

解決策

CentOSの時刻を正しく設定することで解決しました。

CentOS内の時刻を手動で合わせることで対応することも可能なのですが、この方法だと時間が経過するとまた時刻がずれてきてしまいます。

そこでNTPの日本標準時刻とCentOS内の時刻を常に同期させることで対応しました。

※「NTP」とは「Network Time Protocol」の略で、ネットワークを介してコンピュータ内部の時刻(システムクロック)を正しく同期させるための仕組みのことです。
参考記事:NTPとは? NTPの仕組み含めておおまかに解説

以下にNTPとの同期設定の方法を記述します。(下記設定は全てroot権限での設定となります。)

1.NTPをインストールする

$ yum install ntp

2.時刻を合わせる

$ ntpdate ntp.nict.jp

こちらのntp.nict.jpは日本標準時刻に直結しています。

3.ntp.confの編集

/etc/ntp.confを以下の通りに変更します。

変更前

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

変更後

server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp

4.ntpdの起動

$ service ntpd start

NTPのデーモンを起動します。
※デーモンとはUNIX系OSの常駐プログラムのことです。

$ chkconfig ntpd on

次回サーバー起動時より自動でNTPデーモンを起動するように設定します。

5.日時の確認

$ date

日時が現在時刻となっていればOKです。
私はこの段階で現在時刻が正常に表示されました。