档案制度建设少走弯路 实战教育手把手带你全流程落地
家人们谁懂啊,我去年帮3个小微企业搭档案制度的时候,踩的坑能绕公司前台的奶茶堆三圈。那时候我还是个抱着《档案管理学》啃的理论党,总觉得不就是归个纸嘛有啥难的,直到把公司攒了5年的合同翻得乱七八糟找不到...
2026年08月22日 05:30:18
本溪数字档案馆系统采用B/S架构,前端使用Vue 3 + TypeScript,后端使用Spring Boot 2.7,数据库使用PostgreSQL 14,文件存储采用MinIO。这套技术栈成熟稳定,社区支持完善,能完全满足数字档案的长期保存需求。
首先确保你的开发环境满足以下要求:JDK 11或更高版本、Node.js 16.20.0、PostgreSQL 14、MinIO Server 2023。
后端项目初始化命令:
``` mvn archetype:generate -DgroupId=com.benxi.archives -DartifactId=digital-archive -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ```前端项目初始化命令:
``` npm create vue@latest benxi-archive-frontend -- --typescript --router --pinia ```创建数据库和用户:
``` CREATE DATABASE benxi_archive; CREATE USER archive_admin WITH PASSWORD 'YourSecurePassword123!'; GRANT ALL PRIVILEGES ON DATABASE benxi_archive TO archive_admin; ```核心表结构SQL文件(archive_schema.sql):
``` CREATE TABLE archive_category ( id SERIAL PRIMARY KEY, category_code VARCHAR(50) UNIQUE NOT NULL, category_name VARCHAR(100) NOT NULL, parent_id INTEGER REFERENCES archive_category(id), sort_order INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE digital_archive ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), archive_number VARCHAR(100) UNIQUE NOT NULL, title VARCHAR(500) NOT NULL, category_id INTEGER REFERENCES archive_category(id), keywords TEXT[], security_level INTEGER DEFAULT 0, file_size BIGINT, file_md5 VARCHAR(32), storage_path VARCHAR(500), created_by VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ```application.yml配置文件:
``` server: port: 8080 servlet: context-path: /api spring: datasource: url: jdbc:postgresql://localhost:5432/benxi_archive username: archive_admin password: YourSecurePassword123! driver-class-name: org.postgresql.Driver hikari: maximum-pool-size: 10 minimum-idle: 5 jpa: hibernate: ddl-auto: validate properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect format_sql: true show-sql: true minio: endpoint: http://localhost:9000 accessKey: minioadmin secretKey: minioadmin bucket: benxi-archives ```创建MinIO配置类:
``` @Configuration public class MinioConfig { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ```文件上传控制器:
``` @RestController @RequestMapping("/api/archive") public class ArchiveUploadController { @PostMapping("/upload") public ResponseEntity创建ArchiveUpload.vue组件:
```
创建/etc/nginx/conf.d/benxi-archive.conf:
``` server { listen 80; server_name archive.benxi.gov.cn; 前端静态文件 location / { root /var/www/benxi-archive/dist; index index.html; try_files $uri $uri/ /index.html; } 后端API代理 location /api/ { proxy_pass http://localhost:8080/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 文件访问代理(MinIO) location /files/ { proxy_pass http://localhost:9000/benxi-archives/; proxy_set_header Host $host; } } ```创建启动脚本start_archive.sh:
``` !/bin/bash 启动PostgreSQL sudo systemctl start postgresql-14 启动MinIO cd /opt/minio ./minio server /data/minio --console-address ":9001" & 启动后端服务 cd /opt/benxi-archive/backend nohup java -jar digital-archive-1.0.0.jar > backend.log 2>&1 & 启动Nginx sudo systemctl start nginx echo "本溪数字档案馆系统已启动" echo "前端访问:http://archive.benxi.gov.cn" echo "MinIO控制台:http://localhost:9001" ```创建backup_archive.sh:
``` !/bin/bash BACKUP_DIR="/backup/archives" DATE=$(date +%Y%m%d_%H%M%S) 备份数据库 pg_dump -U archive_admin benxi_archive > $BACKUP_DIR/db_backup_$DATE.sql 备份MinIO存储桶 mc mirror --overwrite minio/benxi-archives $BACKUP_DIR/files_$DATE/ 压缩备份文件 tar -czf $BACKUP_DIR/archive_backup_$DATE.tar.gz \ $BACKUP_DIR/db_backup_$DATE.sql \ $BACKUP_DIR/files_$DATE/ 清理7天前的备份 find $BACKUP_DIR -name ".tar.gz" -mtime +7 -delete echo "备份完成:$BACKUP_DIR/archive_backup_$DATE.tar.gz" ```创建Prometheus监控配置prometheus.yml:
``` scrape_configs: - job_name: 'benxi-archive' static_configs: - targets: ['localhost:8080'] labels: service: 'archive-backend' - job_name: 'postgres' static_configs: - targets: ['localhost:9187'] - job_name: 'minio' static_configs: - targets: ['localhost:9000'] ```1. 文件上传失败:检查MinIO服务状态,确保存储桶存在且权限正确
2. 数据库连接失败:验证PostgreSQL服务是否运行,检查application.yml中的连接配置
3. 前端无法访问API:检查Nginx配置,确保/api/路径正确代理到后端服务
后端日志:
``` tail -f /opt/benxi-archive/backend/backend.log ```Nginx访问日志:
``` tail -f /var/log/nginx/access.log ```Nginx错误日志:
``` tail -f /var/log/nginx/error.log ```