规划数字档案馆:零门槛可直接落地的全流程实操指南
一、明确数字档案馆核心需求
第一步锁定核心需求,避免后续返工,需明确4个必选模块:
- 馆藏元数据管理:包含标题、作者、创作时间、分类等结构化字段
- 文件存取:支持任意格式文件上传、下载、预览
- 全文检索:支持关键词快速定位馆藏内容
- 权限控制:区分普通用户(仅查看)、管理员(增删改)角色
禁止新增非必要需求,比如暂时不用的多终端适配、AI分类等,先完成核心功能落地。
二、选型轻量化可落地的技术栈
选择无需复杂部署的开源工具,新手一次性跑通:
- 后端框架:Django 4.2.10,安装命令:
pip install django==4.2.10 - 检索引擎:Elasticsearch 7.17.10(单节点Docker部署,命令:
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.17.10) - 文件存储:MinIO(Docker部署,命令:
docker run -d -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001") - 数据库:MySQL 8.0,Docker部署命令:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=你的密码 -e MYSQL_DATABASE=digital_archive mysql:8.0
所有工具均用Docker部署,避免本地环境依赖冲突,新手无需额外配置系统环境。
三、搭建Django基础框架
1. 生成项目与应用:执行以下命令
``` django-admin startproject digital_archive cd digital_archive python manage.py startapp archive ```2. 配置settings.py核心参数:
修改INSTALLED_APPS,追加2个应用:
``` INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'archive', 'django_elasticsearch_dsl', ] ```修改数据库配置(替换为你的MySQL密码):
``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'digital_archive', 'USER': 'root', 'PASSWORD': '你的MySQL密码', 'HOST': '127.0.0.1', 'PORT': '3306', } } ```配置Elasticsearch连接:
``` ELASTICSEARCH_DSL = { 'default': { 'hosts': 'http://127.0.0.1:9200', }, } ```必须提前在MySQL中创建名为digital_archive的空数据库,否则迁移会报错。
四、配置核心功能模块
4.1 全文检索配置
1. 安装依赖:pip install django-elasticsearch-dsl==7.2.3
2. 创建archive/documents.py,定义检索规则:
``` from django_elasticsearch_dsl import Document, fields from django_elasticsearch_dsl.registries import registry from .models import ArchiveMetadata @registry.register_document class ArchiveDocument(Document): class Index: name = 'archive_metadata' settings = {'number_of_shards': 1, 'number_of_replicas': 0} class Django: model = ArchiveMetadata fields = ['title', 'author', 'description', 'create_time'] ```3. 生成检索索引:执行命令python manage.py search_index --create,需确保Elasticsearch容器正常运行。
4.2 文件存储配置

1. 安装MinIO客户端:pip install minio==7.1.15
2. 创建archive/utils.py,编写上传函数:
``` from minio import Minio from minio.error import S3Error import time 初始化MinIO客户端(默认账号密码:minioadmin/minioadmin) minio_client = Minio( "127.0.0.1:9000", access_key="minioadmin", secret_key="minioadmin", secure=False ) 自动创建存储桶 BUCKET_NAME = "archive-files" if not minio_client.bucket_exists(BUCKET_NAME): minio_client.make_bucket(BUCKET_NAME) def upload_file(file_obj, original_name): 重命名避免文件名冲突 unique_name = f"{int(time.time())}_{original_name.replace(' ', '_')}" try: minio_client.put_object( BUCKET_NAME, unique_name, file_obj, length=-1, part_size=1010241024 ) return unique_name except S3Error as e: print(f"上传失败:{e}") return None ```生产环境必须修改MinIO默认账号密码,通过http://localhost:9001控制台修改,避免数据泄露。
4.3 权限控制配置
用Django内置权限系统,无需额外插件:执行python manage.py createsuperuser创建管理员账号,登录/admin后,可给用户分配“添加馆藏”“删除馆藏”等权限,普通用户默认仅具备查看权限。
五、数据入库与测试验证
1. 执行数据库迁移:python manage.py makemigrations && python manage.py migrate
2. 启动Django服务:python manage.py runserver 0.0.0.0:8000,访问http://localhost:8000/admin登录。
3. 核心功能测试:
- 添加馆藏:填写元数据、上传文件,查看MinIO控制台是否生成对应文件
- 全文检索:输入已添加的馆藏关键词,验证是否快速定位
- 权限验证:用普通用户登录,确认无法访问“删除”按钮
禁止上传中文命名文件,或执行重命名逻辑,避免解析异常。
六、部署与基础备份
新手用Docker Compose一键部署,新建2个文件:
1. docker-compose.yml:
``` version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 你的密码 MYSQL_DATABASE: digital_archive volumes: [mysql-data:/var/lib/mysql] ports: ["3306:3306"] es: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10 environment: ["discovery.type=single-node"] ports: ["9200:9200", "9300:9300"] minio: image: minio/minio command: server /data --console-address ":9001" ports: ["9000:9000", "9001:9001"] volumes: [minio-data:/data] django: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: [.:/code] ports: ["8000:8000"] depends_on: [mysql, es, minio] volumes: {mysql-data: {}, minio-data: {}} ```2. Dockerfile:
``` FROM python:3.10-slim WORKDIR /code COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 ```3. requirements.txt:
``` django==4.2.10 django-elasticsearch-dsl==7.2.3 minio==7.1.15 mysqlclient==2.2.0 ```执行部署命令:docker-compose up -d,所有服务自动启动。
每周基础备份2个核心数据:
- MySQL备份:
docker exec $(docker ps -qf "name=mysql") mysqldump -uroot -p"你的密码" digital_archive > backup_$(date +%Y%m%d).sql - MinIO备份:同步
/var/lib/docker/volumes/minio-data目录的文件到本地存储