搜尋此網誌

2026年10月23日 星期五

初試 PHP Laravel

緣起:


    這個月都在找工作,找跟寫程式有關的,在 104 上注意到 PHP 有不少的職缺,而且都有提到 Laravel 的框架。我只有在大學時為了專題稍微摸過 PHP,當時還是在 windows 上安裝那種 tomcat + PHP + MySQL + phpmyadmin 全家桶套餐,寫完一些簡單的程式後就沒再碰了,當時對 PHP 印像最深的就,它的字串是用 . 來連接。

    很好奇那個 Laravel 是什麼,所以就開始研究它,順便學怎麼在 Debian 上架設 PHP 環境。(請 claude 教我)


安裝 PHP:


    先安裝 PHP 與常用擴充套件

sudo apt update
sudo apt install php-cli php-common php-mbstring php-xml php-curl \
  php-zip php-mysql php-sqlite3 php-intl php-gd php-bcmath unzip

    裝好後可以用 php -v 來確認有沒有成功安裝。再來安裝 composer,它是 php 的套件管理器,一樣能用 apt install 來裝,不過版本會比較舊,claude 推薦用官方的方法安裝

curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

    裝好後用 composer -v 來確認有沒有成功安裝。

    
    再來是 Web 伺服器,最簡單的方式是跑 php 的內建伺服器

php -S localhost:8000 -t <網站根目錄>

    不過 claude 說用 nginx + php-fpm 來跑,會比較接近正式環境的做法,所以我就選擇用這方式來跑一個 Laravel 專案。


Laravel 專案:


    我在我的 ~/Data 底下建立一個放 PHP 專案的資料夾,然後建立專案

composer create-project laravel/laravel myapp

    裡頭有這些東西


    claude 說 PHP-FPM 會以 www-data 這身份來跑,所以需要修改 storage 跟 bootstrap/cache 這兩個目錄的權限,讓它能寫入

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

    目前 Laravel 的專案預設是用 sqlite,所以也要讓 database 資料夾裡的東西能被 www-data 存取

sudo chgrp -R www-data database
sudo chmod -R ug+rw database


Nginx & PHP-FPM:


    安裝跟設定 PHP-FPM 與 nginx

sudo apt install nginx php-fpm
sudo systemctl enable --now nginx php8.4-fpm

    確認 sockect 的路徑,看一下版本號是什麼,以它為準


    在 /etc/nginx/site-available 下新增一個 myapp,編輯它,貼上 claude 給我的設定

server {
    listen 8080;
    server_name localhost;
    root /var/www/myapp/public;      # 重點:指到 public/
    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;   # 路由全部交給 Laravel
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }

    location ~ /\.(?!well-known).* {
        deny all;                    # 擋掉 .env 等隱藏檔
    }
}

    然後啟用站台

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

    去瀏覽器打開 localhost:8080


    啊勒?怎麼有錯?我仔細簡查了設定檔,也沒打錯字還什麼的。


除錯:


    總覺得是專案路徑的問題,因為 claude 最一開始是要我把專案放在 /var 下,但我放在自己家目錄下,所以往這方面問


    有學到,可以用 namei 來看出整條路徑每層的權限

namei -l <目標路徑>

    claude 給我兩個解法,最簡單的,開放自己家目錄給其它人進入,電腦是單人使用的話,問題不大

chmod o+x ~

    我改完後,查看網頁,成功看到頁面!!


    claude 說的另一個做法是用 acl,它比較推這做法,所以我先把 ~ 的 other 權限改回原本狀態,再試著用 acl 做設定

setfacl -m u:www-data:x ~

    哦 ~~ 確實也能讓網頁正常運作,學會了。


補充:


    整個摸完後,最好奇的其實是跟 nginx 有關的設定,有多問 claude 個問題
    


沒有留言:

張貼留言