在 Raspberry Pi 上部署 Django 應用時,我們遇到了一個常見的權限問題。Apache 伺服器(運行在 www-data 用戶下)無法訪問位於用戶家目錄中的 Django 專案文件。以下是我們診斷和解決這個問題的步驟:
- 問題診斷
首先,我們檢查了相關目錄的權限:
ls -ld /home/marco /home/marco/todolist
輸出顯示:
drwx------ 19 marco marco 4096 Sep 29 09:17 /home/marco
drwxr-xr-x 5 marco www-data 4096 Sep 29 09:54 /home/marco/todolist
我們發現 /home/marco
目錄的權限是 700(drwx——),這意味著只有 marco 用戶可以訪問該目錄。這就是為什麼 Apache(運行在 www-data 用戶下)無法訪問 /home/marco/todolist
目錄的原因。
- 解決方案
為了解決這個問題,我們需要修改 /home/marco
目錄的權限,允許其他用戶有執行(進入目錄)的權限:
sudo chmod 711 /home/marco
這個命令將 /home/marco
目錄的權限改為 711(drwx–x–x),允許其他用戶(包括 www-data)進入該目錄,但不允許他們讀取或修改其中的內容。
- 驗證更改
執行更改後,我們再次檢查目錄權限:
ls -ld /home/marco /home/marco/todolist
新的輸出顯示:
drwx--x--x 19 marco marco 4096 Sep 29 09:17 /home/marco
drwxr-xr-x 5 marco www-data 4096 Sep 29 09:54 /home/marco/todolist
- 重啟 Apache
為了使更改生效,我們重新啟動了 Apache 服務:
sudo systemctl restart apache2
- 結果
完成這些步驟後,Django 應用成功在 Raspberry Pi 上運行,可以通過瀏覽器訪問 http://192.168.xxx.xxx(或者 Raspberry Pi 的 IP 地址)來查看。
結論: 這個案例展示了在 Linux 系統上部署 Web 應用時,正確設置文件和目錄權限的重要性。通過仔細分析錯誤日誌和目錄權限,我們能夠識別並解決問題,同時保持適當的安全性。這種方法不僅解決了當前的問題,還為未來可能遇到的類似情況提供了寶貴的經驗。