建设用地规划许可证数字档案馆系统搭建实战指南
系统架构与核心技术选型
本系统采用微服务架构,前端使用Vue 3 + Element Plus,后端采用Spring Boot 2.7,数据库使用PostgreSQL 14,文件存储使用MinIO。这种组合确保系统的高可扩展性和稳定性。
技术栈详细说明
PostgreSQL负责存储结构化数据,包括许可证信息、用户数据等。MinIO作为对象存储服务,专门存放扫描件、PDF等文件。Spring Boot微服务提供RESTful API,Vue 3前端负责用户交互界面。
环境准备与安装
基础环境配置
在Ubuntu 22.04 LTS系统上执行以下操作:
更新系统并安装必要工具:
``` sudo apt update sudo apt install -y openjdk-17-jdk maven nodejs npm postgresql postgresql-contrib ```安装MinIO对象存储:
``` wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio sudo mv minio /usr/local/bin/ ```数据库初始化
创建PostgreSQL数据库和用户:
``` sudo -u postgres psql CREATE DATABASE land_archive_db; CREATE USER archive_admin WITH PASSWORD 'YourSecurePassword123'; GRANT ALL PRIVILEGES ON DATABASE land_archive_db TO archive_admin; \q ```后端服务搭建
项目结构创建
使用Spring Initializr创建项目,选择以下依赖:Spring Web, Spring Data JPA, PostgreSQL Driver, Spring Security。执行命令:
``` mvn archetype:generate -DgroupId=com.landarchive -DartifactId=backend-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ```核心配置文件
在application.yml中配置:
``` server: port: 8080 spring: datasource: url: jdbc:postgresql://localhost:5432/land_archive_db username: archive_admin password: YourSecurePassword123 driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: update show-sql: true servlet: multipart: max-file-size: 50MB max-request-size: 50MB minio: endpoint: http://localhost:9000 accessKey: minioadmin secretKey: minioadmin123 bucket: land-archive-files ```实体类设计
创建许可证实体类:
``` @Entity @Table(name = "planning_permit") public class PlanningPermit { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String permitNumber; @Column(nullable = false) private String applicantName; @Column(nullable = false) private String landLocation; @Column(nullable = false) private Double landArea; @Column(nullable = false) private LocalDate issueDate; @Column(nullable = false) private LocalDate expiryDate; @Column(name = "document_path") private String documentPath; // Getters and setters } ```文件存储服务实现
创建MinIO服务类:
``` @Service public class MinioService { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.bucket}") private String bucket; private MinioClient minioClient; @PostConstruct public void init() { minioClient = MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } public String uploadFile(MultipartFile file, String permitNumber) throws Exception { String fileName = permitNumber + "_" + System.currentTimeMillis() + getFileExtension(file.getOriginalFilename()); if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build())) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build()); } minioClient.putObject( PutObjectArgs.builder() .bucket(bucket) .object(fileName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); return endpoint + "/" + bucket + "/" + fileName; } } ```前端界面开发
Vue项目初始化
创建Vue项目并安装依赖:
``` npm create vue@latest land-archive-frontend cd land-archive-frontend npm install element-plus axios vue-router ```许可证管理组件

创建许可证列表组件:
```文件上传组件
创建文件上传功能:
```
支持PDF、JPG、PNG格式,大小不超过50MB
系统部署与配置
MinIO服务启动
创建MinIO启动脚本:
``` !/bin/bash export MINIO_ROOT_USER=minioadmin export MINIO_ROOT_PASSWORD=minioadmin123 minio server /data/minio --console-address ":9001" ```设置脚本权限并启动:
``` chmod +x start-minio.sh ./start-minio.sh ```Nginx反向代理配置
配置Nginx统一访问入口:
``` server { listen 80; server_name archive.yourdomain.com; location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```系统启动脚本
创建一键启动脚本start-system.sh:
``` !/bin/bash 启动MinIO echo "启动MinIO服务..." ./start-minio.sh & 启动后端服务 echo "启动后端服务..." cd backend-service mvn spring-boot:run & 启动前端服务 echo "启动前端服务..." cd ../land-archive-frontend npm run dev & echo "所有服务启动完成" echo "前端访问: http://localhost:3000" echo "MinIO控制台: http://localhost:9001" ```数据迁移与备份
数据库备份脚本
创建每日自动备份脚本:
``` !/bin/bash BACKUP_DIR="/backups/land-archive" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/backup_$DATE.sql" mkdir -p $BACKUP_DIR pg_dump -U archive_admin land_archive_db > $BACKUP_FILE 保留最近7天备份 find $BACKUP_DIR -name ".sql" -mtime +7 -delete ```文件存储同步
配置MinIO数据同步到备份存储:
``` mc mirror --watch /data/minio backup-minio/land-archive ```系统监控与维护
日志配置
在application.yml中添加日志配置:
``` logging: level: com.landarchive: DEBUG file: name: logs/land-archive.log logback: rollingpolicy: max-file-size: 10MB max-history: 30 ```健康检查接口
添加系统健康检查:
``` @RestController @RequestMapping("/health") public class HealthController { @GetMapping public ResponseEntity