初始化

This commit is contained in:
2026-03-05 21:27:11 +08:00
commit 130de0fd5d
140 changed files with 21972 additions and 0 deletions

View File

@@ -0,0 +1,250 @@
---
name: env-setup
version: 2.0.0
description: "初始化 PHP Hyperf + Vue 3 双栈开发环境。当需要项目初始化、环境配置或安装依赖时使用。含 Docker Compose 和数据库初始化。"
---
# 🔧 Environment Setup (PHP Hyperf + Vue 3 Dual Stack)
## 触发条件
用户要求初始化项目环境、配置开发工具链、设置环境变量。
## 执行流程
### 1. 检测系统依赖
```bash
echo "=== System Dependencies ==="
# PHP
php -v 2>/dev/null && echo "✅ PHP installed" || echo "❌ PHP not found (need >= 8.1)"
# Swoole
php -m 2>/dev/null | grep -i swoole && echo "✅ Swoole installed" || echo "❌ Swoole not found (need >= 5.0)"
# Composer
composer --version 2>/dev/null && echo "✅ Composer installed" || echo "❌ Composer not found"
# Node.js
node -v 2>/dev/null && echo "✅ Node.js installed" || echo "❌ Node.js not found (need >= 20)"
# npm
npm -v 2>/dev/null && echo "✅ npm installed" || echo "❌ npm not found"
# Docker
docker --version 2>/dev/null && echo "✅ Docker installed" || echo "⚠️ Docker not found (optional for local dev)"
# Docker Compose
docker compose version 2>/dev/null && echo "✅ Docker Compose installed" || echo "⚠️ Docker Compose not found"
```
### 2. 后端初始化 (PHP Hyperf)
```bash
cd Case-Database-Backend
# 安装 PHP 依赖
composer install
# 复制环境变量
if [ ! -f ".env" ] && [ -f ".env.example" ]; then
cp .env.example .env
echo "✅ .env created from .env.example"
echo "⚠️ Please fill in required values: DB_HOST, DB_DATABASE, REDIS_HOST, JWT_SECRET"
fi
# 验证 Hyperf 启动
php bin/hyperf.php start --dry-run 2>/dev/null || php bin/hyperf.php di:init-proxy
```
### 3. 前端初始化 (Vue 3 + Vite)
```bash
for dir in Case-Database-Frontend-user Case-Database-Frontend-admin; do
echo "=== $dir ==="
cd $dir
# 安装 Node 依赖
npm install
# 复制环境变量
if [ ! -f ".env.local" ] && [ -f ".env.example" ]; then
cp .env.example .env.local
echo "✅ .env.local created from .env.example"
fi
cd ..
done
```
### 4. 数据库初始化
```bash
cd Case-Database-Backend
# 运行迁移
php bin/hyperf.php migrate
# 运行种子(如有)
php bin/hyperf.php db:seed
```
### 5. Docker Compose 启动(可选)
```bash
# 一键启动全部服务
docker compose up -d
# 验证服务状态
docker compose ps
```
### 6. 初始化工具链
| 工具 | 配置文件 | 前端/后端 |
|------|---------|---------|
| jsconfig | `jsconfig.json` | 前端 |
| ESLint | `.eslintrc.*` / `eslint.config.*` | 前端 |
| Prettier | `.prettierrc` | 前端 |
| Husky | `.husky/` | 全栈 |
| PHPStan | `phpstan.neon` | 后端 |
| PHP CS Fixer | `.php-cs-fixer.php` | 后端 |
### 7. 验证环境
```bash
echo "=== Backend Verification ==="
cd Case-Database-Backend
php -v
composer --version
php bin/hyperf.php --version 2>/dev/null || echo "Run: php bin/hyperf.php start"
echo ""
echo "=== Frontend Verification ==="
for dir in Case-Database-Frontend-user Case-Database-Frontend-admin; do
echo "=== $dir Verification ==="
cd $dir
node -v
npm -v
npm run build --dry-run 2>/dev/null || echo "Run: npm run dev"
cd ..
done
echo ""
echo "=== Services ==="
docker compose ps 2>/dev/null || echo "Docker Compose not running"
```
## 关键环境变量
### 后端 (.env)
| 变量 | 说明 | 示例 |
|------|------|------|
| `APP_NAME` | 应用名称 | `MyApp` |
| `APP_ENV` | 环境 | `dev` / `production` |
| `DB_HOST` | MySQL 主机 | `127.0.0.1` |
| `DB_PORT` | MySQL 端口 | `3306` |
| `DB_DATABASE` | 数据库名 | `myapp` |
| `DB_USERNAME` | 数据库用户 | `root` |
| `DB_PASSWORD` | 数据库密码 | *(Secret)* |
| `REDIS_HOST` | Redis 主机 | `127.0.0.1` |
| `REDIS_PORT` | Redis 端口 | `6379` |
| `JWT_SECRET` | JWT 密钥 | *(auto-generate)* |
### 前端 (.env.local)
| 变量 | 说明 | 示例 |
|------|------|------|
| `VITE_API_BASE_URL` | API 地址 | `http://localhost:9501` |
| `VITE_WS_URL` | WebSocket 地址 | `ws://localhost:9502` |
| `VITE_APP_TITLE` | 应用标题 | `MyApp` |
## 密钥管理最佳实践
### 原则
- **永不硬编码** — 密钥不进入代码仓库
- **运行时注入** — 密钥在部署/启动时注入,不写入磁盘文件
- **最小权限** — 每个服务只拥有必需的密钥访问权限
- **定期轮换** — 密钥和 Token 设置过期时间并定期轮换
### 推荐方案(按场景选择)
| 场景 | 方案 | 复杂度 |
|---|---|---|
| 本地开发 | `.env` 文件 (已在 .gitignore) | 🟢 低 |
| CI/CD | GitHub Secrets / GitLab Variables | 🟡 中 |
| 生产环境 | HashiCorp Vault / 云 KMS | 🔴 高 |
| Docker 部署 | Docker Secrets / Compose env_file | 🟡 中 |
### 本地开发密钥管理
```bash
# ✅ .env 文件必须在 .gitignore 中
echo ".env" >> .gitignore
echo ".env.local" >> .gitignore
# ✅ 提供 .env.example 作为模板(无真实密钥)
cp .env .env.example
# 手动清空 .env.example 中的敏感值
```
### Docker 部署密钥注入
```yaml
# ❌ BAD: docker-compose.yml 中硬编码密钥
services:
app:
environment:
DB_PASSWORD: "my_secret_password"
# ✅ GOOD: 通过 .env 文件注入
services:
app:
env_file:
- .env
environment:
DB_PASSWORD: ${DB_PASSWORD}
```
### JWT 密钥生成
```bash
# 生成强随机 JWT 密钥
openssl rand -base64 64
# 或使用 PHP
php -r "echo bin2hex(random_bytes(32));"
```
### 检查密钥安全
```bash
# 检查是否有密钥意外提交到仓库
rg -rn "(?i)(api.?key|secret|password|token)\s*[=:]\s*['\"][a-zA-Z0-9]{8,}" \
--glob '!vendor/**' --glob '!node_modules/**' --glob '!*.lock' --glob '!.env*'
```
## 常见问题排查
| 问题 | 解决方案 |
|------|---------|
| Swoole 未安装 | `pecl install swoole` 或使用 Docker |
| Composer 依赖失败 | `composer clear-cache && composer install` |
| Node 版本不匹配 | 使用 `nvm use 20` 切换版本 |
| MySQL 连接失败 | 检查 `.env` 中 DB_HOST 和端口,确认 MySQL 正在运行 |
| Redis 连接失败 | 检查 `.env` 中 REDIS_HOST确认 Redis 正在运行 |
| Hyperf 启动失败 | 检查 `runtime/` 目录权限,运行 `php bin/hyperf.php di:init-proxy` |
| 端口冲突 9501 | `lsof -i :9501` 查看占用进程 |
## 验证清单
- [ ] PHP >= 8.1 且 Swoole >= 5.0 扩展已安装
- [ ] Composer 依赖安装成功
- [ ] Node.js >= 20 且 npm 安装成功
- [ ] `php bin/hyperf.php start` 可正常启动 (HTTP 9501)
- [ ] `npm run dev` 可正常启动 (Vite dev server)
- [ ] MySQL 和 Redis 连接正常
- [ ] 数据库迁移成功
- [ ] 所有环境变量已配置