私有企业数字档案馆系统:从零到一的完整搭建与部署实战指南

一、系统架构与核心组件选型

一个可运行的数字档案馆系统,其最小化技术栈必须包含以下四个核心组件:文件存储服务、数据库服务、全文检索服务和后端应用服务。对于私企环境,我们推荐采用成熟、开源且易于维护的技术组合。

1.1 核心组件清单

  • 文件存储:MinIO(兼容S3协议的分布式对象存储)
  • 数据库:PostgreSQL 14+(用于存储元数据、用户信息等结构化数据)
  • 全文检索:Elasticsearch 8.x(用于文档内容、元数据的快速检索)
  • 后端应用:基于Spring Boot 3.x的Java应用(提供RESTful API)
  • 前端应用:Vue 3 + Element Plus(管理界面)
  • 部署与编排:Docker + Docker Compose(简化环境依赖)

二、基础环境准备与一键部署

我们将使用Docker Compose将所有服务容器化,确保环境一致性。请确保你的服务器已安装Docker(>=20.10)和Docker Compose(>=2.0)。

2.1 创建项目目录与配置文件

在服务器上执行以下命令,创建项目结构:

``` mkdir -p /opt/digital-archive/{config,data/minio,data/es,data/pg} cd /opt/digital-archive ```

创建核心配置文件 docker-compose.yml

``` version: '3.8' services: postgres: image: postgres:14-alpine container_name: archive-pg environment: POSTGRES_DB: digital_archive POSTGRES_USER: archive_admin POSTGRES_PASSWORD: YourStrong@PGPass123 volumes: - ./data/pg:/var/lib/postgresql/data - ./config/pg-init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "5432:5432" restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U archive_admin"] interval: 10s timeout: 5s retries: 5 elasticsearch: image: elasticsearch:8.11.0 container_name: archive-es environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms512m -Xmx512m - xpack.security.enabled=false volumes: - ./data/es:/usr/share/elasticsearch/data ports: - "9200:9200" restart: unless-stopped healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"] interval: 30s timeout: 10s retries: 5 minio: image: minio/minio:latest container_name: archive-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: archive_minio_admin MINIO_ROOT_PASSWORD: YourStrong@MinioPass123 volumes: - ./data/minio:/data ports: - "9000:9000" - "9001:9001" restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 ```

创建数据库初始化脚本 config/pg-init.sql

``` CREATE TABLE IF NOT EXISTS archive_documents ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), file_name VARCHAR(500) NOT NULL, file_size BIGINT NOT NULL, mime_type VARCHAR(100), storage_path TEXT NOT NULL, bucket_name VARCHAR(100) DEFAULT 'archive', upload_user_id VARCHAR(100), upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, metadata_json JSONB, INDEX idx_upload_time (upload_time) ); CREATE TABLE IF NOT EXISTS sys_users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), username VARCHAR(50) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, display_name VARCHAR(100), department VARCHAR(100), is_active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ```

2.2 启动基础服务

/opt/digital-archive 目录下,执行:

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

等待约1-2分钟,使用以下命令检查所有服务是否健康:

``` docker-compose ps ```

你应该看到所有服务的状态均为“up”。通过以下命令验证服务:

``` 检查PostgreSQL docker exec archive-pg pg_isready -U archive_admin 检查Elasticsearch curl http://localhost:9200/ 检查MinIO(通过API) curl http://localhost:9000/minio/health/live ```

三、后端应用部署与配置

我们将部署一个预先构建好的Spring Boot应用jar包。首先下载应用包并配置。

3.1 下载与配置应用

在服务器上,进入应用目录并下载发布包:

``` cd /opt/digital-archive mkdir app && cd app wget https://github.com/example-repo/digital-archive-core/releases/download/v1.0.0/archive-core-1.0.0.jar ```

创建应用配置文件 application.yml

``` server: port: 8080 spring: datasource: url: jdbc:postgresql://archive-pg:5432/digital_archive username: archive_admin password: YourStrong@PGPass123 driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: validate properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect format_sql: true archive: storage: type: minio minio: endpoint: http://archive-minio:9000 accessKey: archive_minio_admin secretKey: YourStrong@MinioPass123 bucket: archive secure: false search: elasticsearch: host: archive-es port: 9200 scheme: http logging: level: com.example.archive: DEBUG file: name: /app/logs/application.log ```

创建Dockerfile来容器化此Java应用:

``` FROM openjdk:17-jdk-slim WORKDIR /app COPY archive-core-1.0.0.jar app.jar COPY application.yml application.yml RUN mkdir -p /app/logs EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar", "--spring.config.location=application.yml"] ```

更新 docker-compose.yml,在文件末尾的services部分添加:

``` archive-app: build: ./app container_name: archive-app depends_on: postgres: condition: service_healthy elasticsearch: condition: service_healthy minio: condition: service_healthy ports: - "8080:8080" restart: unless-stopped ```

3.2 构建并启动应用

/opt/digital-archive 目录下,执行:

``` docker-compose up -d --build archive-app ```

私有企业数字档案馆系统:从零到一的完整搭建与部署实战指南

查看应用启动日志,确认无报错:

``` docker logs -f archive-app ```

当你看到“Started ArchiveApplication in X.XXX seconds”时,表示启动成功。使用curl测试API端点:

``` curl http://localhost:8080/api/health ```

预期返回:{"status":"UP"}

四、前端管理界面部署

前端是一个独立的Vue应用,我们将使用Nginx来提供静态文件服务。

4.1 准备前端文件与Nginx配置

下载前端构建好的静态文件包:

``` cd /opt/digital-archive mkdir nginx && cd nginx wget https://github.com/example-repo/digital-archive-ui/releases/download/v1.0.0/dist.tar.gz tar -xzf dist.tar.gz ```

创建Nginx配置文件 default.conf

``` server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://archive-app: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; proxy_set_header X-Forwarded-Proto $scheme; } location /minio/ { proxy_pass http://archive-minio:9000/; proxy_set_header Host $http_host; } } ```

docker-compose.yml 的services部分继续添加:

``` nginx: image: nginx:1.23-alpine container_name: archive-nginx depends_on: - archive-app volumes: - ./nginx/dist:/usr/share/nginx/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" restart: unless-stopped ```

4.2 启动完整服务栈

在项目根目录执行:

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

等待所有服务启动后,打开浏览器访问 http://你的服务器IP,你将看到数字档案馆系统的登录界面。

五、系统初始化与首次使用

5.1 创建初始管理员账户

系统首次运行,需要通过API创建第一个管理员用户。执行以下命令:

``` curl -X POST http://localhost:8080/api/auth/init-admin \ -H "Content-Type: application/json" \ -d '{ "username": "admin", "password": "Admin@123456", "displayName": "系统管理员", "department": "IT部" }' ```

成功后返回用户ID信息。

5.2 登录并配置存储桶

  1. 在浏览器登录界面,使用用户名 admin 和密码 Admin@123456 登录。
  2. 进入“系统设置” -> “存储管理”,系统会自动检测MinIO连接。点击“初始化存储桶”,系统将在MinIO中创建名为‘archive’的存储桶。

5.3 上传并管理第一份档案

  1. 点击左侧菜单“档案上传”。
  2. 将本地文件拖入上传区域,或点击选择文件。
  3. 关键步骤:在元数据表单中,至少填写“文件标题”、“档案编号”和“归档部门”。这些是后续检索的关键字段。
  4. 点击提交。文件将上传至MinIO,元数据存入PostgreSQL,同时索引至Elasticsearch。
  5. 在“档案检索”页面,你可以立即通过标题、编号或全文内容搜索到刚上传的文件。

六、日常运维关键操作

6.1 数据备份

创建备份脚本 /opt/digital-archive/scripts/backup.sh

``` !/bin/bash BACKUP_DIR="/opt/archive-backup/$(date +%Y%m%d_%H%M%S)" mkdir -p $BACKUP_DIR 备份PostgreSQL数据 docker exec archive-pg pg_dump -U archive_admin digital_archive > $BACKUP_DIR/pg_backup.sql 备份MinIO数据(使用mc客户端) docker run --rm -v $BACKUP_DIR:/backup -v digital-archive_data-minio:/data-minio alpine tar czf /backup/minio_backup.tar.gz -C /data-minio . 备份Elasticsearch索引(快照到本地文件系统) curl -X PUT "localhost:9200/_snapshot/archive_backup/snapshot_$(date +%Y%m%d)?wait_for_completion=true" -H 'Content-Type: application/json' -d' { "indices": "archive-", "ignore_unavailable": true, "include_global_state": false }' ```

设置定时任务,每周日凌晨2点执行备份:

``` crontab -e 添加以下行 0 2 0 /opt/digital-archive/scripts/backup.sh ```

6.2 日志查看与监控

  • 查看应用日志:docker logs --tail 100 archive-app
  • 查看所有服务状态:docker-compose ps
  • 检查存储空间:进入MinIO控制台(http://服务器IP:9001),使用初始账号密码登录,查看存储桶使用情况。

6.3 系统升级

当有新版本发布时,按以下步骤升级:

  1. 备份整个系统(执行6.1的备份脚本)。
  2. 停止服务:docker-compose down
  3. 替换 /opt/digital-archive/app 目录下的新jar包和配置文件。
  4. 启动服务:docker-compose up -d --build
  5. 验证:访问前端界面,进行核心功能测试(上传、检索、下载)。
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统