本目錄包含讓本專案可在 VS Code Dev Containers、GitHub Codespaces 或任何 Docker-based 環境中一鍵啟動的配置。
| 項目 | 版本 |
|---|---|
| PHP | 8.4(Debian Bookworm) |
| Composer | 最新穩定版(隨 base image) |
| Node.js | 22 LTS |
| npm | 10.x |
| SQLite | 內建(供 PHPUnit 使用) |
| MariaDB client | 內建(連線外部 DB 用) |
下列 extensions 均已在容器中啟用:
pdo · pdo_mysql · pdo_sqlite · mbstring · xml · curl · zip · intl · bcmath · tokenizer · ctype · json · fileinfo · openssl
- 安裝 Dev Containers 擴充功能
- 用 VS Code 開啟本專案資料夾
- 按
F1→ Dev Containers: Reopen in Container - 等待容器 build 與
postCreateCommand完成
- 在 GitHub 儲存庫頁面點選 Code → Codespaces → Create codespace on …
- Codespaces 會自動 build 容器並執行
postCreateCommand
postCreateCommand(.devcontainer/post-create.sh)會:
composer install– 安裝 PHP 依賴npm install– 安裝 Node 依賴- 若
.env不存在,從.env.example複製並執行php artisan key:generate
注意:若
.env已存在,postCreateCommand不會覆蓋它。
# 啟動 Laravel 開發伺服器(轉發至 :8000)
php artisan serve --host=0.0.0.0
# 啟動 Vite 前端 dev server
npm run dev
# 編譯前端資源(production build)
npm run build
# 執行所有 PHPUnit 測試(使用 :memory: SQLite,不需要外部 DB)
./vendor/bin/phpunit
# 執行單一測試
./vendor/bin/phpunit --filter PersonBrowserTest
# 代碼格式化(乾跑,不實際修改)
./vendor/bin/php-cs-fixer fix --dry-run --diff
# 代碼格式化(實際修改)
./vendor/bin/php-cs-fixer fixphpunit.xml 已將測試環境設為 DB_CONNECTION=sqlite、DB_DATABASE=:memory:(In-Memory SQLite),因此 ./vendor/bin/phpunit 完全不需要外部資料庫,直接可執行。
這是本專案推薦的標準測試模式,可避免依賴完整的 MySQL schema,也使 CI/CD 保持穩定。
Dev Container 本身未內建 MariaDB 服務(第一版維持輕量)。若需要連線 MariaDB:
選項 A:Docker Compose(本地開發)
在專案根目錄新增 docker-compose.override.yml(不納入版本控制),啟動 MariaDB service:
services:
db:
image: mariadb:10.11
environment:
MARIADB_ROOT_PASSWORD: secret
MARIADB_DATABASE: cbdb
MARIADB_USER: cbdb
MARIADB_PASSWORD: secret
ports:
- "3306:3306"然後在 .env 中設定:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=cbdb
DB_USERNAME=cbdb
DB_PASSWORD=secret
DB_TIMEZONE=+08:00
選項 B:連線外部 MariaDB
直接在 .env 填入外部 DB 的 host/port/credentials,容器內已安裝 mariadb-client,可用 mysql 指令測試連線:
mysql -h <DB_HOST> -u <DB_USERNAME> -p <DB_DATABASE>根據 AGENTS.md 的規範:
DB_TIMEZONE必須使用數字偏移格式,例如+08:00- 不可使用命名時區(如
Asia/Shanghai) - 必須與
config/app.php的timezone(Asia/Shanghai,即 GMT+8)一致
預設的 .env.example 已正確設定 DB_TIMEZONE=+08:00,請勿更改此值。
| 擴充功能 | 用途 |
|---|---|
| GitHub Copilot | AI 代碼補全 |
| GitHub Copilot Chat | AI 對話輔助 |
| PHP Intelephense | PHP 語言智慧提示 |
| Laravel Extra Intellisense | Laravel 自動補全 |
| Laravel Blade Snippets | Blade 模板支援 |
| ESLint | JavaScript/TypeScript linting |
| Prettier | 代碼格式化(JS/TS/CSS) |