是的,必須調成一致。
如果 NGINX、MySQL 和 PHP 的時間(與時區)不一致,會導致系統出現嚴重的邏輯混亂與維運困難。
NOW() 讓 MySQL 自動產生存檔時間,或是由 PHP 計算時間戳記後存入。若兩者時區不同,資料庫內的時間會出現數小時的落差。如果您是使用 docker-compose.yml 啟動這三個服務,最快且最建議的做法是在每個服務下同步掛載主機的時區檔案,並設定環境變數。
以下是標準的設定範例:
version: '3.8'
services:
nginx:
image: nginx:latest
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
environment:
- TZ=Asia/Taipei
php:
image: php:8.2-fpm
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
environment:
- TZ=Asia/Taipei
mysql:
image: mysql:8.0
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
environment:
- MYSQL_ROOT_PASSWORD=root_password
- TZ=Asia/Taipei
(注意:PHP 另外還受到 php.ini 內的 date.timezone 影響,若設定環境變數後時間仍不對,需修改 php.ini 設定為 date.timezone = "Asia/Taipei")
如果您想看實際的設定調整,可以分享:
docker-compose.yml 檔案內容php:fpm 或 php:apache)我可以直接幫您修改好設定程式碼。