Files
GovAI/Makefile
T
freedakgmail c949204662 feat(govai): 0617 优化首批 — 安全/私有化/深度研究/服务层/可观测性
借鉴 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 应用迁移并烟测。
2026-06-17 17:52:47 +08:00

145 lines
4.8 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 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: ## 启动深度研究 WorkerFastAPI + 后台消费线程)
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