緣起:
這個月都在找工作,找跟寫程式有關的,在 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
裡頭有這些東西
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 的路徑,看一下版本號是什麼,以它為準
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 -l <目標路徑>
claude
給我兩個解法,最簡單的,開放自己家目錄給其它人進入,電腦是單人使用的話,問題不大
chmod o+x ~
我改完後,查看網頁,成功看到頁面!!
setfacl -m u:www-data:x ~
哦 ~~ 確實也能讓網頁正常運作,學會了。
補充:
整個摸完後,最好奇的其實是跟 nginx 有關的設定,有多問 claude 個問題





沒有留言:
張貼留言