从零搭建烟台数字档案馆系统的技术选型与实施指南

系统架构设计

数字档案馆系统采用分层架构设计,确保系统的可扩展性和可维护性。

技术栈选型

以下是核心技术的选型依据和具体版本:

  • 后端框架:Spring Boot 2.7.18,提供快速启动和自动配置能力。
  • 数据库:PostgreSQL 15.3,用于存储结构化元数据;MinIO 2023-11-15,用于存储非结构化电子文件。
  • 全文检索:Elasticsearch 8.12.0,提供档案目录和内容的快速检索。
  • 前端框架:Vue 3.3.4 + Element Plus 2.3.9,构建管理后台。

环境搭建与基础服务部署

1. 服务器环境准备

使用CentOS 7.9作为操作系统,执行以下命令初始化环境:

``` 更新系统并安装基础工具 sudo yum update -y sudo yum install -y wget curl vim git net-tools 安装Docker及Docker Compose sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ```

2. 使用Docker Compose部署基础服务

创建 `docker-compose.yml` 文件,内容如下:

``` version: '3.8' services: postgres: image: postgres:15.3 container_name: archive-postgres environment: POSTGRES_DB: digital_archive POSTGRES_USER: archive_admin POSTGRES_PASSWORD: YourStrong@Pass123 volumes: - ./postgres_data:/var/lib/postgresql/data ports: - "5432:5432" restart: unless-stopped minio: image: minio/minio:RELEASE.2023-11-15T20-43-25Z container_name: archive-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin123 volumes: - ./minio_data:/data ports: - "9000:9000" - "9001:9001" restart: unless-stopped elasticsearch: image: elasticsearch:8.12.0 container_name: archive-es environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms512m -Xmx512m - xpack.security.enabled=false ulimits: memlock: soft: -1 hard: -1 volumes: - ./es_data:/usr/share/elasticsearch/data ports: - "9200:9200" restart: unless-stopped ```

在文件所在目录执行命令启动服务:

``` sudo docker-compose up -d ```

等待1-2分钟后,通过以下命令验证服务状态:

``` sudo docker-compose ps ```

所有服务的状态应为 `Up`。

后端服务开发与配置

1. 创建Spring Boot项目

使用Spring Initializr(https://start.spring.io)生成项目,依赖选择:

  • Spring Web
  • Spring Data JPA
  • PostgreSQL Driver
  • Lombok

下载生成的项目压缩包并解压,使用IDE导入。

2. 配置核心连接

编辑 `src/main/resources/application.yml` 文件:

``` spring: datasource: url: jdbc:postgresql://your_server_ip:5432/digital_archive username: archive_admin password: YourStrong@Pass123 driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect format_sql: true minio: endpoint: http://your_server_ip:9000 accessKey: minioadmin secretKey: minioadmin123 bucket: archive-files elasticsearch: host: your_server_ip port: 9200 ```

注意:将 `your_server_ip` 替换为你的实际服务器IP地址。

3. 实现档案实体与存储逻辑

创建档案核心实体类 `ArchiveItem.java`:

``` import javax.persistence.; import java.time.LocalDateTime; @Entity @Table(name = "archive_items") @Data // Lombok注解,自动生成getter/setter public class ArchiveItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String archiveCode; // 档号 @Column(nullable = false) private String title; // 题名 @Column(length = 1000) private String description; // 描述 private String fonds; // 全宗 private String filingYear; // 归档年度 @Column(nullable = false) private String filePath; // 在MinIO中的存储路径 private String fileType; private Long fileSize; @Column(nullable = false) private LocalDateTime createTime = LocalDateTime.now(); private String creator; } ```

创建MinIO文件服务类 `MinioService.java`,实现文件上传、下载、删除功能。关键上传方法如下:

``` @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 bucketName; private MinioClient minioClient; @PostConstruct public void init() { this.minioClient = MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } public String uploadFile(MultipartFile file, String objectName) throws Exception { // 检查存储桶是否存在 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } // 上传文件 minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); return objectName; } } ```

4. 集成Elasticsearch实现全文检索

在 `pom.xml` 中添加依赖:

``` org.springframework.boot spring-boot-starter-data-elasticsearch ```

从零搭建烟台数字档案馆系统的技术选型与实施指南

创建ES文档类 `ArchiveDocument.java` 和对应的Repository接口,实现档案信息的索引与检索。

前端管理界面开发

1. 初始化Vue项目

使用Vite创建项目:

``` npm create vue@latest digital-archive-admin ```

按照提示选择项目配置,务必包含 TypeScriptRouter

进入项目目录,安装Element Plus和Axios:

``` cd digital-archive-admin npm install element-plus axios npm install ```

2. 配置API请求与全局状态

创建 `src/utils/request.ts` 文件,配置Axios实例:

``` import axios from 'axios'; const request = axios.create({ baseURL: 'http://your_backend_ip:8080/api', timeout: 10000, }); // 请求拦截器 request.interceptors.request.use( config => { const token = localStorage.getItem('archive_token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => { return Promise.reject(error); } ); export default request; ```

3. 实现档案上传组件

创建 `src/components/ArchiveUpload.vue` 组件,核心模板部分:

``` ```

系统集成与部署

1. 前后端联调

启动后端服务:

``` cd /path/to/spring-boot-project ./mvnw spring-boot:run ```

启动前端开发服务器:

``` cd /path/to/vue-project npm run dev ```

访问 http://localhost:5173 测试前端界面,确保能调用后端API完成档案上传、检索等操作。

2. 生产环境部署配置

后端打包为JAR:

``` ./mvnw clean package -DskipTests ```

创建生产环境Dockerfile部署后端:

``` FROM openjdk:11-jre-slim COPY target/digital-archive-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] ```

前端构建静态文件:

``` npm run build ```

使用Nginx部署前端,配置示例:

``` server { listen 80; server_name your_domain.com; root /var/www/digital-archive; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```

3. 数据备份策略配置

创建数据库备份脚本 `backup_postgres.sh`:

``` !/bin/bash BACKUP_DIR="/backup/postgres" DATE=$(date +%Y%m%d_%H%M%S) docker exec archive-postgres pg_dump -U archive_admin digital_archive > $BACKUP_DIR/archive_$DATE.sql 保留最近7天备份 find $BACKUP_DIR -name ".sql" -mtime +7 -delete ```

添加到crontab,每天凌晨2点执行:

``` 0 2 /path/to/backup_postgres.sh ```

关键问题排查

  • MinIO连接失败:检查服务器防火墙是否开放9000端口,执行 `sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent && sudo firewall-cmd --reload`。
  • Elasticsearch启动报内存不足:编辑 `docker-compose.yml` 中ES服务的 `ES_JAVA_OPTS` 参数,根据服务器内存调整,如 `-Xms1g -Xmx1g`。
  • 档案文件无法预览:检查MinIO存储桶的访问策略,确保文件设置为可公开读取或通过预签名URL访问。
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统