c949204662
借鉴 odysseus 的能力设计,全程净室实现、零 AGPL 代码、不引入 AGPL 依赖。
T1 提示注入防护: pkg/promptguard 包裹外部/知识库内容为不可信数据,buildMessages 移出 system 指令区。 T2 安全 CI: .github/workflows(ci+security: govulncheck/gitleaks/actionlint/hadolint/trivy)+dependabot+.hadolint.yaml;go.mod 加 toolchain go1.25.11 修复 20 个 stdlib CVE。 T3 管理员 2FA: 迁移 000016 + RFC6238 TOTP/备份码(pkg/auth, 零依赖) + 登录流程集成(后端)。 T4 本地模型: LLM/embedding 支持本地 vLLM/Ollama(OpenAI 兼容, 鉴权头条件发送, NoAuth) + docs/local-deploy.md。 T6 深度研究: 迁移 000017 + Python research-worker(净室多步流水线, 检索避开 SearXNG) + Go research 服务/handler/路由。 T7 service 层: 新增 internal/service/{research,twofa}, 2FA 业务逻辑从胖 handler 下沉, 接口注入可单测。 T10 缓存/可观测性: internal/cache(Redis+内存, 优雅降级) 接入 store 热点列表; Prometheus 指标+/metrics; docs/openapi.yaml。 验证: go build/vet/test ./... 全绿(8 包); research-worker 12 单测过; 真实 PG 应用迁移并烟测。
145 lines
4.8 KiB
Makefile
145 lines
4.8 KiB
Makefile
# ============================================================
|
||
# Aily - 企业 AI 应用平台 Makefile
|
||
# ============================================================
|
||
|
||
.PHONY: help dev-api dev-web dev build test lint migrate-up migrate-down migrate-create sqlc docker-up docker-down
|
||
|
||
# Default
|
||
help: ## 显示帮助信息
|
||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
||
|
||
# ==================== Development ====================
|
||
|
||
dev-api: ## 启动后端开发服务器(热重载需安装 air)
|
||
cd server && go run ./cmd/server/
|
||
|
||
dev-web: ## 启动前端开发服务器
|
||
cd apps/web && npm run dev
|
||
|
||
dev: ## 同时启动前后端(需要 goreman 或手动开两个终端)
|
||
@echo "请在两个终端分别运行: make dev-api 和 make dev-web"
|
||
|
||
# ==================== Build ====================
|
||
|
||
build-api: ## 编译后端
|
||
cd server && CGO_ENABLED=0 go build -o ../dist/server ./cmd/server/
|
||
|
||
build-web: ## 编译前端
|
||
cd apps/web && npm run build
|
||
|
||
build: build-api build-web ## 编译前后端
|
||
|
||
# ==================== Test ====================
|
||
|
||
test: ## 运行后端测试
|
||
cd server && go test ./... -v -count=1
|
||
|
||
test-cover: ## 运行测试并生成覆盖率报告
|
||
cd server && go test ./... -coverprofile=coverage.out && go tool cover -html=coverage.out
|
||
|
||
# ==================== Lint ====================
|
||
|
||
lint-api: ## 后端代码检查
|
||
cd server && go vet ./...
|
||
|
||
lint-web: ## 前端代码检查
|
||
cd apps/web && npm run lint
|
||
|
||
lint: lint-api lint-web ## 全部代码检查
|
||
|
||
# ==================== Database ====================
|
||
|
||
MIGRATE_URL ?= "postgres://aily:aily@localhost:5432/aily_portal?sslmode=disable"
|
||
|
||
migrate-up: ## 执行数据库迁移(全部)
|
||
migrate -database $(MIGRATE_URL) -path server/migrations up
|
||
|
||
migrate-down: ## 回滚最近一次迁移
|
||
migrate -database $(MIGRATE_URL) -path server/migrations down 1
|
||
|
||
migrate-create: ## 创建新迁移文件 (用法: make migrate-create NAME=create_xxx)
|
||
migrate create -ext sql -dir server/migrations -seq $(NAME)
|
||
|
||
migrate-status: ## 查看迁移状态
|
||
migrate -database $(MIGRATE_URL) -path server/migrations version
|
||
|
||
# ==================== sqlc ====================
|
||
|
||
sqlc: ## 生成 sqlc 代码
|
||
cd server && sqlc generate
|
||
|
||
# ==================== Docker ====================
|
||
|
||
docker-up: ## 启动基础设施 (PostgreSQL + Redis + MinIO)
|
||
docker compose -f docker/docker-compose.yml up -d
|
||
|
||
docker-down: ## 停止基础设施
|
||
docker compose -f docker/docker-compose.yml down
|
||
|
||
docker-dify-up: ## 启动 Dify 服务
|
||
docker compose -f docker/docker-compose.dify.yml up -d
|
||
|
||
docker-dify-down: ## 停止 Dify 服务
|
||
docker compose -f docker/docker-compose.dify.yml down
|
||
|
||
docker-all-up: docker-up docker-dify-up ## 启动全部服务
|
||
|
||
docker-all-down: docker-dify-down docker-down ## 停止全部服务
|
||
|
||
docker-logs: ## 查看 Docker 日志
|
||
docker compose -f docker/docker-compose.yml logs -f
|
||
|
||
# ==================== Production ====================
|
||
|
||
docker-prod-up: ## 启动生产环境
|
||
docker compose -f docker/docker-compose.prod.yml up -d --build
|
||
|
||
docker-prod-down: ## 停止生产环境
|
||
docker compose -f docker/docker-compose.prod.yml down
|
||
|
||
# ==================== PPT Worker ====================
|
||
|
||
dev-ppt: ## 启动 PPT Worker 开发服务器
|
||
cd ppt-worker && python app.py
|
||
|
||
ppt-worker-install: ## 安装 PPT Worker 依赖
|
||
cd ppt-worker && pip install -r requirements.txt
|
||
|
||
# ==================== Seed ====================
|
||
|
||
seed: ## 初始化种子数据(管理员账号、示例应用)
|
||
PGPASSWORD=aily psql -h localhost -U aily -d aily_portal -f server/migrations/seed.sql
|
||
|
||
seed-ppt: ## 初始化 PPT 生成应用种子数据
|
||
PGPASSWORD=aily psql -h localhost -U aily -d aily_portal -f server/migrations/seed_ppt.sql
|
||
|
||
# ==================== Setup ====================
|
||
|
||
setup: docker-up ## 初始化开发环境(启动基础服务+迁移+种子数据)
|
||
@echo "⏳ 等待数据库启动..."
|
||
@sleep 3
|
||
$(MAKE) migrate-up
|
||
$(MAKE) seed
|
||
@echo "✅ 开发环境初始化完成!"
|
||
@echo " 管理员账号: admin@aily.com / admin123"
|
||
@echo " 创作者账号: zhangsan@aily.com / admin123"
|
||
@echo " 普通用户: lisi@aily.com / admin123"
|
||
@echo ""
|
||
@echo "运行 make dev-api 和 make dev-web 启动开发服务器"
|
||
|
||
# ==================== Clean ====================
|
||
|
||
clean: ## 清理构建产物
|
||
rm -rf dist/ server/server apps/web/.next apps/web/out
|
||
|
||
# ==================== Research Worker ====================
|
||
|
||
dev-research: ## 启动深度研究 Worker(FastAPI + 后台消费线程)
|
||
cd research-worker && python app.py
|
||
|
||
research-worker-install: ## 安装 Research Worker 依赖
|
||
cd research-worker && pip install -r requirements.txt
|
||
|
||
research-worker-test: ## 运行 Research Worker 纯逻辑单测(无需外部依赖)
|
||
cd research-worker && python3 -m unittest test_core -v
|