PHP:Line Bot 開發 Server 問題紀錄

  • 問題:本地測試都可以正常回應,上正式站 VPS 主機卻已讀不回,查看 PHP 沒噴 Error log
  • 解決:測試將 SELINUX 設為 0 後正常,爬文了下 LINEBotTiny.php 裡有使用 file_get_contents() 方法需要
$ sudo setsebool -P httpd_can_network_connect on
  • 問題:存放設定檔及 assets 可被下載
  • 解決:調整 Nginx 設定後 reload
location ~ \.(ini|env|conf)$ {
        deny all;
        return 404;
}
location /assets {
        deny all;
        return 404;
}
$ sudo nginx -s reload
  • 問題:連線資料庫顯示 Uncaught PDOException: could not find driver ,但程式碼沒毛病啊
  • 解決:調整 php.ini 把 pdo extension 打開
extension=pdo_mysql
  • 問題:本地開發要怎麼讓 Webhook 連到本機?
  • 解決:使用 ngrok,下載後執行
$ ngrok http 80

Session Status                online
Session Expires               1 hour, 59 minutes
Update                        update available (version 3.0.4, Ctrl-U to update)
Terms of Service              https://ngrok.com/tos
Version                       3.0.3
Region                        Japan (jp)
Latency                       calculating...
Web Interface                 http://127.0.0.1:4040
Forwarding                    https://15c9-125-231-144-48.jp.ngrok.io -> http://localhost:80

把 https 的連結貼到 Webhook URL 就可以了
  • 問題:如何同步到 Production 環境?
  • 解決:使用 VS Code 外掛 SFTP

Ctrl + Shifp + P

產生的 sftp.json 檔
{
    "name": "App Server",
    "host": "域名",
    "protocol": "sftp",
    "port": 22,
    "username": "vps 主機帳號",
    "remotePath": "遠端目錄",
    "uploadOnSave": false, 
    "privateKeyPath": "D:\\私鑰位置", // Windows 每一層目錄都要兩個 \\ 喔
    "passphrase": "私鑰密碼",
    "watcher": {
        "files": "**/*",
        "autoUpload": true,
        "autoDelete": true
    },
    "ignore": [
        ".vscode",
        ".git",
        ".DS_Store",
        "README.md",
        "環境設定檔"
    ]
}

SFTP: Sync Local ➝ Remote 這樣就可以即時同步,測試結果啦

如遇彈跳窗說明遠端目錄沒有權限話,可以修改遠端目錄權限,因為是 Nginx 使用者資料夾,所以用 setfacl 給予權限
$ sudo setfacl -R -m user:帳號:rwx 目錄
  • 問題:Flex Message 怎麼寫?
  • 解決:除了上面佛心網友的教學,可以直接使用官方的 FLEX MESSAGE SIMULATOR 來製作,非常方便