.PHONY: help build run test clean docker-build-app docker-build-docreader docker-build-frontend docker-build-all docker-run migrate-up migrate-down docker-restart docker-stop start-all stop-all start-ollama stop-ollama build-images build-images-app build-images-docreader build-images-frontend clean-images check-env list-containers pull-images show-platform # Show help help: @echo "WeKnora Makefile 帮助" @echo "" @echo "基础命令:" @echo " build 构建应用" @echo " run 运行应用" @echo " test 运行测试" @echo " clean 清理构建文件" @echo "" @echo "Docker 命令:" @echo " docker-build-app 构建应用 Docker 镜像 (wechatopenai/weknora-app)" @echo " docker-build-docreader 构建文档读取器镜像 (wechatopenai/weknora-docreader)" @echo " docker-build-frontend 构建前端镜像 (wechatopenai/weknora-ui)" @echo " docker-build-all 构建所有 Docker 镜像" @echo " docker-run 运行 Docker 容器" @echo " docker-stop 停止 Docker 容器" @echo " docker-restart 重启 Docker 容器" @echo "" @echo "服务管理:" @echo " start-all 启动所有服务" @echo " stop-all 停止所有服务" @echo " start-ollama 仅启动 Ollama 服务" @echo "" @echo "镜像构建:" @echo " build-images 从源码构建所有镜像" @echo " build-images-app 从源码构建应用镜像" @echo " build-images-docreader 从源码构建文档读取器镜像" @echo " build-images-frontend 从源码构建前端镜像" @echo " clean-images 清理本地镜像" @echo "" @echo "数据库:" @echo " migrate-up 执行数据库迁移" @echo " migrate-down 回滚数据库迁移" @echo "" @echo "开发工具:" @echo " fmt 格式化代码" @echo " lint 代码检查" @echo " deps 安装依赖" @echo " docs 生成 API 文档" @echo "" @echo "环境检查:" @echo " check-env 检查环境配置" @echo " list-containers 列出运行中的容器" @echo " pull-images 拉取最新镜像" @echo " show-platform 显示当前构建平台" # Go related variables BINARY_NAME=WeKnora MAIN_PATH=./cmd/server # Docker related variables DOCKER_IMAGE=wechatopenai/weknora-app DOCKER_TAG=latest # Platform detection ifeq ($(shell uname -m),x86_64) PLATFORM=linux/amd64 else ifeq ($(shell uname -m),aarch64) PLATFORM=linux/arm64 else ifeq ($(shell uname -m),arm64) PLATFORM=linux/arm64 else PLATFORM=linux/amd64 endif # Build the application build: go build -o $(BINARY_NAME) $(MAIN_PATH) # Run the application run: build ./$(BINARY_NAME) # Run tests test: go test -v ./... # Clean build artifacts clean: go clean rm -f $(BINARY_NAME) # Build Docker image docker-build-app: @echo "获取版本信息..." @eval $$(./scripts/get_version.sh env); \ ./scripts/get_version.sh info; \ docker build --platform $(PLATFORM) \ --build-arg VERSION_ARG="$$VERSION" \ --build-arg COMMIT_ID_ARG="$$COMMIT_ID" \ --build-arg BUILD_TIME_ARG="$$BUILD_TIME" \ --build-arg GO_VERSION_ARG="$$GO_VERSION" \ -f docker/Dockerfile.app -t $(DOCKER_IMAGE):$(DOCKER_TAG) . # Build docreader Docker image docker-build-docreader: docker build --platform $(PLATFORM) -f docker/Dockerfile.docreader -t wechatopenai/weknora-docreader:latest . # Build frontend Docker image docker-build-frontend: docker build --platform $(PLATFORM) -f frontend/Dockerfile -t wechatopenai/weknora-ui:latest frontend/ # Build all Docker images docker-build-all: docker-build-app docker-build-docreader docker-build-frontend # Run Docker container (传统方式) docker-run: docker-compose up # 使用新脚本启动所有服务 start-all: ./scripts/start_all.sh # 使用新脚本仅启动Ollama服务 start-ollama: ./scripts/start_all.sh --ollama # 使用新脚本仅启动Docker容器 start-docker: ./scripts/start_all.sh --docker # 使用新脚本停止所有服务 stop-all: ./scripts/start_all.sh --stop # Stop Docker container (传统方式) docker-stop: docker-compose down # 从源码构建镜像相关命令 build-images: ./scripts/build_images.sh build-images-app: ./scripts/build_images.sh --app build-images-docreader: ./scripts/build_images.sh --docreader build-images-frontend: ./scripts/build_images.sh --frontend clean-images: ./scripts/build_images.sh --clean # Restart Docker container (stop, start) docker-restart: docker-compose stop -t 60 docker-compose up # Database migrations migrate-up: ./scripts/migrate.sh up migrate-down: ./scripts/migrate.sh down # Generate API documentation docs: swag init -g $(MAIN_PATH)/main.go -o ./docs # Format code fmt: go fmt ./... # Lint code lint: golangci-lint run # Install dependencies deps: go mod download # Build for production build-prod: VERSION=$${VERSION:-unknown}; \ COMMIT_ID=$${COMMIT_ID:-unknown}; \ BUILD_TIME=$${BUILD_TIME:-unknown}; \ GO_VERSION=$${GO_VERSION:-unknown}; \ LDFLAGS="-X 'github.com/Tencent/WeKnora/internal/handler.Version=$$VERSION' -X 'github.com/Tencent/WeKnora/internal/handler.CommitID=$$COMMIT_ID' -X 'github.com/Tencent/WeKnora/internal/handler.BuildTime=$$BUILD_TIME' -X 'github.com/Tencent/WeKnora/internal/handler.GoVersion=$$GO_VERSION'"; \ go build -ldflags="-w -s $$LDFLAGS" -o $(BINARY_NAME) $(MAIN_PATH) clean-db: @echo "Cleaning database..." @if [ $$(docker volume ls -q -f name=weknora_postgres-data) ]; then \ docker volume rm weknora_postgres-data; \ fi @if [ $$(docker volume ls -q -f name=weknora_minio_data) ]; then \ docker volume rm weknora_minio_data; \ fi @if [ $$(docker volume ls -q -f name=weknora_redis_data) ]; then \ docker volume rm weknora_redis_data; \ fi # Environment check check-env: ./scripts/start_all.sh --check # List containers list-containers: ./scripts/start_all.sh --list # Pull latest images pull-images: ./scripts/start_all.sh --pull # Show current platform show-platform: @echo "当前系统架构: $(shell uname -m)" @echo "Docker构建平台: $(PLATFORM)"