在构建本地化数字档案馆系统时,为了保证数据的高可用性、安全性及检索效率,我们采用微服务架构思想,基于以下成熟开源技术栈进行搭建。这套方案能够满足GB/T 18894-2016电子文件归档与电子档案管理规范的基本要求。
首先准备一台纯净的CentOS 7.9或Ubuntu 20.04服务器,配置建议为4核8G以上,硬盘空间根据档案量预留。以下是快速安装Docker环境的具体命令,请直接复制执行。
1. 安装Docker
执行以下脚本自动安装Docker并配置阿里云镜像加速(以CentOS为例):
```bash curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl start docker systemctl enable docker ```2. 安装Docker Compose
```bash curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version ```在服务器上创建目录/data/digital-archive,并新建docker-compose.yml文件。我们将MySQL、Redis、MinIO、Elasticsearch统一编排。以下配置文件已去除所有冗余注释,可直接使用。
1. 创建目录
```bash mkdir -p /data/digital-archive/{mysql,minio,es,redis,logs} cd /data/digital-archive ```2. 编写docker-compose.yml
```yaml version: '3.8' services: MySQL数据库服务 mysql: image: mysql:8.0 container_name: archive-mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: Archive@2024Strong MYSQL_DATABASE: digital_archive_db TZ: Asia/Shanghai volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - archive-net Redis缓存服务 redis: image: redis:6.2-alpine container_name: archive-redis ports: - "6379:6379" volumes: - ./redis/data:/data command: redis-server --appendonly yes --requirepass "Redis@2024Pass" networks: - archive-net MinIO对象存储服务 minio: image: minio/minio:latest container_name: archive-minio ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: MinIO@2024Admin volumes: - ./minio/data:/data command: server /data --console-address ":9001" networks: - archive-net Elasticsearch全文检索服务 elasticsearch: image: elasticsearch:7.17.10 container_name: archive-es ports: - "9200:9200" environment: discovery.type: single-node ES_JAVA_OPTS: -Xms1g -Xmx1g ELASTIC_PASSWORD: Es@2024Pass volumes: - ./es/data:/usr/share/elasticsearch/data networks: - archive-net networks: archive-net: driver: bridge ```3. 启动基础服务
执行以下命令启动所有中间件。首次启动需要下载镜像,请耐心等待。
```bash docker-compose up -d ```执行docker-compose ps确保所有容器状态均为Up。
连接MySQL容器并初始化核心业务表。我们需要创建一张档案主表用于存储元数据。
1. 登录MySQL
```bash docker exec -it archive-mysql mysql -uroot -pArchive@2024Strong ```2. 建表SQL脚本
在MySQL命令行中直接执行以下SQL:
```sql USE digital_archive_db; -- 档案分类表 CREATE TABLE IF NOT EXISTS archive_category ( id BIGINT AUTO_INCREMENT PRIMARY KEY, category_name VARCHAR(100) NOT NULL COMMENT '分类名称', parent_id BIGINT DEFAULT 0 COMMENT '父级ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 档案主表 CREATE TABLE IF NOT EXISTS archive_main ( id BIGINT AUTO_INCREMENT PRIMARY KEY, archive_code VARCHAR(50) NOT NULL UNIQUE COMMENT '档号', title VARCHAR(200) NOT NULL COMMENT '题名', category_id BIGINT NOT NULL COMMENT '分类ID', file_path VARCHAR(500) COMMENT '文件存储路径(MinIO Object Name)', file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)', file_hash VARCHAR(64) COMMENT '文件SHA256哈希值', retention_period INT DEFAULT 30 COMMENT '保管期限(年)', security_level TINYINT DEFAULT 1 COMMENT '密级:1-公开,2-内部,3-机密', status TINYINT DEFAULT 0 COMMENT '状态:0-待归档,1-已归档', creator VARCHAR(50) COMMENT '创建人', create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_code (archive_code), INDEX idx_title (title) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='档案管理主表'; -- 插入测试分类数据 INSERT INTO archive_category (category_name) VALUES ('文书档案'), ('科技档案'), ('会计档案'); ```MinIO启动后,需要手动创建一个专门用于存储档案文件的Bucket(存储桶)。
1. 访问MinIO控制台
浏览器访问http://服务器IP:9001。使用账号admin,密码MinIO@2024Admin登录。

2. 创建Bucket
点击左侧菜单“Buckets” -> “Create Bucket” -> Name输入archive-files -> 点击“Create Bucket”。
3. 设置访问权限(重要)
点击刚创建的archive-files桶 -> 左侧“Access” -> “Add Access Rule”。
Prefix设为,Access设为Public(生产环境建议根据需求调整为Read-only或Private,此处为演示方便)。
点击“Add”保存。
假设你已经有一个Spring Boot项目,以下是核心配置文件application.yml的完整配置。请将此文件放入你的项目src/main/resources目录下。
注意:请将上述配置中的IP地址192.168.1.100替换为你服务器的实际局域网IP。
为了实现“零门槛落地”,这里提供档案上传与元数据入库的核心Java代码片段。
1. 添加Maven依赖
在pom.xml中确保包含以下依赖:
2. 文件上传服务类
创建ArchiveService.java,实现文件上传至MinIO并保存记录到MySQL的逻辑。
完成代码编写后,启动Spring Boot应用。使用Postman或curl命令进行本地服务测试。
1. 启动应用
在IDEA中运行DigitalArchiveApplication,或使用Maven打包后运行:
2. 执行上传测试
使用curl发送POST请求测试接口(假设接口路径为/api/archive/upload):
3. 验证结果
archive-files桶中是否出现了对应日期文件夹下的PDF文件。archive_main表中是否新增了一条记录,且file_path字段正确指向了MinIO的对象名。至此,一套符合本地化服务要求的数字档案馆系统基础底座已完全搭建完毕。该架构支持横向扩展,若需处理海量数据,只需增加Elasticsearch节点和MinIO服务器即可。
档案整理行业认证,这玩意儿到底是不是你的职场“硬通货”?