数字档案馆系统保护档案完整性的实操部署落地指南
前置部署环境准备
需准备1台CentOS7.9服务器(内存≥4G、硬盘≥50G),执行以下命令安装依赖工具:
- 安装Docker:执行
sudo yum install -y docker,启动服务sudo systemctl start docker,设置开机自启sudo systemctl enable docker - 安装Docker-compose:执行官方指定命令
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose,授权运行权限sudo chmod +x /usr/local/bin/docker-compose,验证安装docker-compose --version(输出版本号即成功)
数字档案馆核心系统部署
创建部署目录并编写完整容器编排配置,实现数据持久化存储(核心步骤,防止档案丢失):
- 创建目录:执行
sudo mkdir -p /opt/archive/{storage,checksum,mysql,script} - 编写docker-compose.yml:用编辑器打开
/opt/archive/docker-compose.yml,粘贴以下完整内容: ``` version: '3.8' services: archive-system: image: archive-system:latest ports: - "8080:8080" volumes: - /opt/archive/storage:/app/storage - /opt/archive/checksum:/app/checksum environment: - DB_HOST=db - DB_USER=archive - DB_PASS=123456 - CHECK_ALGORITHM=SHA256 db: image: mysql:8.0 volumes: - /opt/archive/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=archive volumes: archive-storage: archive-checksum: ``` - 启动服务:进入目录
cd /opt/archive,执行启动命令sudo docker-compose up -d,验证容器状态:执行sudo docker ps,确保两个服务状态均为healthy
档案完整性保护核心配置
1. 上传时自动生成完整性哈希
修改系统上传配置,实现每一份档案上传时自动计算SHA256哈希并存储,防止篡改:
- 编辑配置文件:进入archive-system容器内,执行
sudo docker exec -it $(sudo docker ps -qf "name=archive-system") vi /app/config/upload.conf - 粘贴完整配置: ``` [UPLOAD] AUTO_CHECK = true CHECK_ALGORITHM = SHA256 CHECKSUM_STORE_PATH = /app/checksum MAX_FILE_SIZE = 10240 ```
- 重启服务生效:执行
sudo docker-compose restart archive-system
2. 定期自动完整性校验

配置宿主机定时任务,每日凌晨校验所有档案的完整性,及时发现篡改:
- 编写校验脚本:在
/opt/archive/script/下创建check_archive.py,粘贴以下完整代码: ``` import hashlib import os STORAGE_PATH = "/opt/archive/storage" CHECKSUM_PATH = "/opt/archive/checksum" def check_file(file_path): file_name = os.path.basename(file_path) checksum_file = os.path.join(CHECKSUM_PATH, f"{file_name}.sha256") if not os.path.exists(checksum_file): print(f"缺失哈希文件:{file_name}") return False with open(checksum_file, 'r') as f: expected_hash = f.read().strip() with open(file_path, 'rb') as f: actual_hash = hashlib.sha256(f.read()).hexdigest() return actual_hash == expected_hash if __name__ == "__main__": all_valid = True for root, _, files in os.walk(STORAGE_PATH): for file in files: if not check_file(os.path.join(root, file)): all_valid = False if all_valid: print("所有档案完整性校验通过") ``` - 赋予执行权限:执行
sudo chmod +x /opt/archive/script/check_archive.py - 配置定时任务:执行
sudo crontab -e,添加一行:0 2 /usr/bin/python3 /opt/archive/script/check_archive.py >> /opt/archive/archive_check.log 2>&1
实操验证流程
1. 正常上传验证
打开浏览器访问 http://服务器IP:8080,用默认账号admin、密码admin123登录,首次登录必须修改密码;上传1个任意文件,上传成功后:
- 执行
ls /opt/archive/storage确认文件存在 - 执行
ls /opt/archive/checksum确认生成对应.sha256文件 - 对比两个文件内容,确认哈希值匹配
2. 篡改检测验证
在 /opt/archive/storage/ 中找到刚才的测试文件,用vi修改文件内容(添加任意字符);执行定时校验命令:sudo /usr/bin/python3 /opt/archive/script/check_archive.py,会输出“档案损坏:xxx”,证明系统可有效检测篡改,保护档案完整。
常见故障排查
- 容器启动失败:执行
sudo docker logs archive-system查看错误日志,常见问题为端口占用,修改docker-compose.yml中archive-system的端口映射为未使用端口 - 定时任务不执行:执行
sudo tail -f /var/log/cron查看日志,确认脚本路径为绝对路径、文件权限为可执行