feat: 完成后端-管理后台集成及部署配置

🚀 主要功能:
- 完善后端API服务层,实现完整的CRUD操作
- 开发管理后台所有核心页面 (仪表板、照片、分类、标签、用户、设置)
- 完成前后端完全集成,所有API接口正常对接
- 配置完整的CI/CD流水线,支持自动化部署

🎯 后端完善:
- 实现PhotoService, CategoryService, TagService, UserService
- 添加完整的API处理器和路由配置
- 支持Docker容器化部署
- 添加数据库迁移和健康检查

🎨 管理后台完成:
- 仪表板: 实时统计数据展示
- 照片管理: 完整的CRUD操作,支持批量处理
- 分类管理: 树形结构展示和管理
- 标签管理: 颜色标签和统计信息
- 用户管理: 角色权限控制
- 系统设置: 多标签配置界面
- 添加pre-commit代码质量检查

🔧 部署配置:
- Docker Compose完整配置
- 后端CI/CD流水线 (Docker部署)
- 管理后台CI/CD流水线 (静态文件部署)
- 前端CI/CD流水线优化
- 自动化脚本: 部署、备份、监控
- 完整的部署文档和运维指南

 集成完成:
- 所有API接口正常连接
- 认证系统完整集成
- 数据获取和状态管理
- 错误处理和用户反馈
- 响应式设计优化
This commit is contained in:
xujiang
2025-07-09 16:23:18 +08:00
parent c57ec3aa82
commit 72414d0979
62 changed files with 12416 additions and 262 deletions

View File

@ -1,174 +1,165 @@
.PHONY: build run test clean install dev docker-build docker-run docker-stop migrate
# Photography Backend Makefile
# Simple and functional Makefile for Go backend project with Docker support
# 应用配置
.PHONY: help dev dev-up dev-down build clean docker-build docker-run prod-up prod-down status health fmt mod
# Color definitions
GREEN := \033[0;32m
YELLOW := \033[1;33m
BLUE := \033[0;34m
RED := \033[0;31m
NC := \033[0m # No Color
# Application configuration
APP_NAME := photography-backend
VERSION := 1.0.0
BUILD_TIME := $(shell date +%Y%m%d_%H%M%S)
LDFLAGS := -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME)
# 构建相关
# Build configuration
BUILD_DIR := bin
MAIN_FILE := cmd/server/main.go
# 数据库配置
# Database configuration
DB_URL := postgres://postgres:password@localhost:5432/photography?sslmode=disable
MIGRATION_DIR := migrations
# 安装依赖
install:
@echo "Installing dependencies..."
go mod download
go mod tidy
# Default target
.DEFAULT_GOAL := help
# 构建应用
build:
@echo "Building $(APP_NAME)..."
mkdir -p $(BUILD_DIR)
CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_FILE)
##@ Development Environment Commands
# 运行应用
run:
@echo "Running $(APP_NAME)..."
go run $(MAIN_FILE)
dev: ## Start development server with hot reload
@printf "$(GREEN)🚀 Starting development server...\n$(NC)"
@air -c .air.toml || go run $(MAIN_FILE)
# 开发模式运行
dev:
@echo "Running in development mode..."
air -c .air.toml || go run $(MAIN_FILE)
dev-up: ## Start development environment with Docker
@printf "$(GREEN)🐳 Starting development environment...\n$(NC)"
@docker-compose -f docker-compose.dev.yml up -d
@printf "$(GREEN)✅ Development environment started successfully!\n$(NC)"
# 运行测试
test:
@echo "Running tests..."
go test -v ./...
dev-down: ## Stop development environment
@printf "$(GREEN)🛑 Stopping development environment...\n$(NC)"
@docker-compose -f docker-compose.dev.yml down
@printf "$(GREEN)✅ Development environment stopped!\n$(NC)"
# 运行测试(带覆盖率)
test-coverage:
@echo "Running tests with coverage..."
go test -v -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
##@ Build Commands
# 代码检查
lint:
@echo "Running linter..."
golangci-lint run
build: ## Build the Go application
@printf "$(GREEN)🔨 Building $(APP_NAME)...\n$(NC)"
@mkdir -p $(BUILD_DIR)
@CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_FILE)
@printf "$(GREEN)✅ Build completed: $(BUILD_DIR)/$(APP_NAME)\n$(NC)"
# 格式化代码
fmt:
@echo "Formatting code..."
go fmt ./...
clean: ## Clean build artifacts
@printf "$(GREEN)🧹 Cleaning build files...\n$(NC)"
@rm -rf $(BUILD_DIR)
@rm -f coverage.out coverage.html
@printf "$(GREEN)✅ Clean completed!\n$(NC)"
# 清理构建文件
clean:
@echo "Cleaning build files..."
rm -rf $(BUILD_DIR)
rm -f coverage.out coverage.html
##@ Docker Commands
# 数据库迁移
migrate-up:
@echo "Running database migrations..."
migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" up
docker-build: ## Build Docker image
@printf "$(GREEN)🐳 Building Docker image...\n$(NC)"
@docker build -t $(APP_NAME):$(VERSION) .
@docker tag $(APP_NAME):$(VERSION) $(APP_NAME):latest
@printf "$(GREEN)✅ Docker image built: $(APP_NAME):$(VERSION)\n$(NC)"
migrate-down:
@echo "Rolling back database migrations..."
migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" down
docker-run: ## Run application in Docker container
@printf "$(GREEN)🐳 Running Docker container...\n$(NC)"
@docker-compose up -d
@printf "$(GREEN)✅ Docker container started!\n$(NC)"
migrate-force:
@echo "Forcing migration version..."
migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" force $(VERSION)
##@ Production Commands
# 创建新的迁移文件
migrate-create:
@echo "Creating new migration: $(NAME)"
migrate create -ext sql -dir $(MIGRATION_DIR) -seq $(NAME)
prod-up: ## Start production environment
@printf "$(GREEN)🚀 Starting production environment...\n$(NC)"
@docker-compose up -d
@printf "$(GREEN)✅ Production environment started!\n$(NC)"
# Docker 相关
docker-build:
@echo "Building Docker image..."
docker build -t $(APP_NAME):$(VERSION) .
docker tag $(APP_NAME):$(VERSION) $(APP_NAME):latest
prod-down: ## Stop production environment
@printf "$(GREEN)🛑 Stopping production environment...\n$(NC)"
@docker-compose down
@printf "$(GREEN)✅ Production environment stopped!\n$(NC)"
docker-run:
@echo "Running Docker container..."
docker-compose up -d
##@ Health Check & Status Commands
docker-stop:
@echo "Stopping Docker containers..."
docker-compose down
status: ## Check application and services status
@printf "$(GREEN)📊 Checking application status...\n$(NC)"
@printf "$(BLUE)Docker containers:$(NC)\n"
@docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "($(APP_NAME)|postgres|redis)" || echo "No containers running"
@printf "$(BLUE)Application build:$(NC)\n"
@if [ -f "$(BUILD_DIR)/$(APP_NAME)" ]; then \
printf "$(GREEN)✅ Binary exists: $(BUILD_DIR)/$(APP_NAME)\n$(NC)"; \
ls -lh $(BUILD_DIR)/$(APP_NAME); \
else \
printf "$(RED)❌ Binary not found. Run 'make build' first.\n$(NC)"; \
fi
docker-logs:
@echo "Showing Docker logs..."
docker-compose logs -f
health: ## Check health of running services
@printf "$(GREEN)🏥 Checking service health...\n$(NC)"
@printf "$(BLUE)Testing application endpoint...\n$(NC)"
@curl -f http://localhost:8080/health 2>/dev/null && printf "$(GREEN)✅ Application is healthy\n$(NC)" || printf "$(RED)❌ Application is not responding\n$(NC)"
@printf "$(BLUE)Database connection...\n$(NC)"
@docker exec photography-postgres pg_isready -U postgres 2>/dev/null && printf "$(GREEN)✅ Database is ready\n$(NC)" || printf "$(RED)❌ Database is not ready\n$(NC)"
# 开发环境
dev-up:
@echo "Starting development environment..."
docker-compose -f docker-compose.dev.yml up -d
##@ Code Quality Commands
dev-down:
@echo "Stopping development environment..."
docker-compose -f docker-compose.dev.yml down
fmt: ## Format Go code
@printf "$(GREEN)🎨 Formatting Go code...\n$(NC)"
@go fmt ./...
@printf "$(GREEN)✅ Code formatted!\n$(NC)"
# 生产环境
prod-up:
@echo "Starting production environment..."
docker-compose -f docker-compose.prod.yml up -d
mod: ## Tidy Go modules
@printf "$(GREEN)📦 Tidying Go modules...\n$(NC)"
@go mod tidy
@go mod download
@printf "$(GREEN)✅ Modules tidied!\n$(NC)"
prod-down:
@echo "Stopping production environment..."
docker-compose -f docker-compose.prod.yml down
lint: ## Run code linter
@printf "$(GREEN)🔍 Running linter...\n$(NC)"
@golangci-lint run
@printf "$(GREEN)✅ Linting completed!\n$(NC)"
# 数据库备份
backup-db:
@echo "Backing up database..."
docker exec photography-postgres pg_dump -U postgres photography > backup_$(shell date +%Y%m%d_%H%M%S).sql
test: ## Run tests
@printf "$(GREEN)🧪 Running tests...\n$(NC)"
@go test -v ./...
@printf "$(GREEN)✅ Tests completed!\n$(NC)"
# 工具安装
install-tools:
@echo "Installing development tools..."
go install github.com/cosmtrek/air@latest
go install github.com/golang-migrate/migrate/v4/cmd/migrate@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
##@ Utility Commands
# 初始化项目
init: install-tools install
@echo "Initializing project..."
mkdir -p logs uploads
install: ## Install dependencies
@printf "$(GREEN)📦 Installing dependencies...\n$(NC)"
@go mod download
@go mod tidy
@printf "$(GREEN)✅ Dependencies installed!\n$(NC)"
# 检查依赖更新
mod-update:
@echo "Checking for module updates..."
go list -u -m all
logs: ## Show application logs
@printf "$(GREEN)📄 Showing application logs...\n$(NC)"
@docker-compose logs -f $(APP_NAME)
# 生成 API 文档
docs:
@echo "Generating API documentation..."
swag init -g cmd/server/main.go -o docs/swagger
migrate-up: ## Run database migrations
@printf "$(GREEN)🗄️ Running database migrations...\n$(NC)"
@migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" up
@printf "$(GREEN)✅ Migrations completed!\n$(NC)"
# 全面检查
check: fmt lint test
@echo "All checks passed!"
migrate-down: ## Rollback database migrations
@printf "$(GREEN)🗄️ Rolling back database migrations...\n$(NC)"
@migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" down
@printf "$(GREEN)✅ Migrations rolled back!\n$(NC)"
# 构建发布版本
release: clean build
@echo "Building release version..."
tar -czf $(BUILD_DIR)/$(APP_NAME)-$(VERSION)-$(BUILD_TIME).tar.gz -C $(BUILD_DIR) $(APP_NAME)
##@ Help
# 帮助信息
help:
@echo "Available commands:"
@echo " install - Install dependencies"
@echo " build - Build the application"
@echo " run - Run the application"
@echo " dev - Run in development mode"
@echo " test - Run tests"
@echo " lint - Run linter"
@echo " fmt - Format code"
@echo " clean - Clean build files"
@echo " migrate-up - Run database migrations"
@echo " migrate-down - Rollback database migrations"
@echo " docker-build - Build Docker image"
@echo " docker-run - Run Docker container"
@echo " docker-stop - Stop Docker containers"
@echo " dev-up - Start development environment"
@echo " prod-up - Start production environment"
@echo " help - Show this help message"
help: ## Display this help message
@printf "$(GREEN)Photography Backend Makefile\n$(NC)"
@printf "$(GREEN)============================\n$(NC)"
@printf "$(YELLOW)Simple and functional Makefile for Go backend project with Docker support\n$(NC)\n"
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z_-]+:.*?##/ { printf "$(BLUE)%-15s$(NC) %s\n", $$1, $$2 } /^##@/ { printf "\n$(GREEN)%s\n$(NC)", substr($$0, 5) } ' $(MAKEFILE_LIST)
@printf "\n$(YELLOW)Examples:\n$(NC)"
@printf "$(BLUE) make dev$(NC) - Start development server\n"
@printf "$(BLUE) make dev-up$(NC) - Start development environment\n"
@printf "$(BLUE) make build$(NC) - Build the application\n"
@printf "$(BLUE) make docker-build$(NC) - Build Docker image\n"
@printf "$(BLUE) make status$(NC) - Check application status\n"
@printf "$(BLUE) make health$(NC) - Check service health\n"
@printf "\n$(GREEN)For more information, visit: https://github.com/iriver/photography\n$(NC)"