锦州档案软件本地化部署与二次开发实战

一、基础环境准备与依赖安装

在开始构建锦州档案管理系统之前,必须确保服务器环境满足运行条件。本系统采用 Python 3.9 作为后端核心,Vue 3 作为前端框架,MySQL 8.0 作为数据存储。以下操作基于 CentOS 7.9 系统进行演示。

1. 安装 Python 3.9 及环境管理工具

系统默认的 Python 版本较低,我们需要编译安装高版本。执行以下命令直接下载源码包并进行编译安装:

```bash 安装编译依赖 yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel 下载 Python 3.9.16 源码 cd /usr/src wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz tar -zxvf Python-3.9.16.tgz cd Python-3.9.16 编译安装,指定安装目录为 /usr/local/python39 ./configure --prefix=/usr/local/python39 make && make install 配置软链接 ln -s /usr/local/python39/bin/python3.9 /usr/bin/python3 ln -s /usr/local/python39/bin/pip3.9 /usr/bin/pip3 ```

安装完成后,配置虚拟环境以隔离项目依赖:

```bash pip3 install virtualenv mkdir -p /data/jinzhou_arch cd /data/jinzhou_arch virtualenv venv source venv/bin/activate ```

2. 安装 MySQL 8.0 数据库

档案管理对数据的一致性要求极高,MySQL 是最佳选择。直接使用官方 Yum 源安装:

```bash 下载 MySQL 8.0 RPM 包 wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm rpm -ivh mysql80-community-release-el7-7.noarch.rpm 安装服务 yum install -y mysql-server 启动并设置开机自启 systemctl start mysqld systemctl enable mysqld ```

获取临时密码并修改 root 密码,同时创建专用数据库:

```bash 获取临时密码 grep 'temporary password' /var/log/mysqld.log 登录 MySQL(替换下方密码为临时密码) mysql -uroot -p 在 MySQL 命令行中执行 ALTER USER 'root'@'localhost' IDENTIFIED BY 'Jz@Arch2024Secure'; CREATE DATABASE jinzhou_arch_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'jz_user'@'%' IDENTIFIED BY 'Jz@User2024Secure'; GRANT ALL PRIVILEGES ON jinzhou_arch_db. TO 'jz_user'@'%'; FLUSH PRIVILEGES; ```

二、数据库表结构设计

针对锦州档案管理的实际业务需求,我们需要设计符合档案局标准的表结构。这里设计核心的archives表,包含全宗号、档号、题名等关键字段。

在 MySQL 中执行以下 SQL 脚本初始化表结构:

```sql USE jinzhou_arch_db; CREATE TABLE `archives` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `fond_code` varchar(50) NOT NULL COMMENT '全宗号', `catalog_code` varchar(50) NOT NULL COMMENT '目录号', `archive_no` varchar(100) NOT NULL COMMENT '档号', `title` varchar(500) NOT NULL COMMENT '题名', `responsibility` varchar(200) DEFAULT NULL COMMENT '责任者', `date` varchar(20) DEFAULT NULL COMMENT '日期', `retention_period` varchar(20) DEFAULT NULL COMMENT '保管期限', `security_level` varchar(20) DEFAULT NULL COMMENT '密级', `file_path` varchar(500) DEFAULT NULL COMMENT '电子文件路径', `file_size` bigint(20) DEFAULT '0' COMMENT '文件大小(字节)', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_archive_no` (`archive_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='档案管理主表'; ```

三、后端服务开发

后端采用 FastAPI 框架,因其高性能且原生支持异步,非常适合文件上传密集型业务。

1. 安装 Python 依赖

/data/jinzhou_arch目录下创建requirements.txt并写入以下内容:

```text fastapi==0.104.1 uvicorn==0.24.0 sqlalchemy==2.0.23 pymysql==1.1.0 python-multipart==0.0.6 python-dotenv==1.0.0 ```

锦州档案软件本地化部署与二次开发实战

执行安装命令:

```bash pip install -r requirements.txt ```

2. 编写核心业务代码

创建项目目录结构并编写主程序main.py。该代码实现了档案的增删改查及文件上传功能。

```python import os import shutil from datetime import datetime from fastapi import FastAPI, UploadFile, File, Form, HTTPException from fastapi.middleware.cors import CORSMiddleware from sqlalchemy import create_engine, Column, Integer, String, DateTime, BigInt from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker 配置部分 DATABASE_URL = "mysql+pymysql://jz_user:Jz@User2024@localhost/jinzhou_arch_db" UPLOAD_DIR = "/data/jinzhou_arch/uploads" os.makedirs(UPLOAD_DIR, exist_ok=True) 数据库模型 Base = declarative_base() engine = create_engine(DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) class ArchiveModel(Base): __tablename__ = "archives" id = Column(Integer, primary_key=True, index=True) fond_code = Column(String(50)) catalog_code = Column(String(50)) archive_no = Column(String(100), unique=True, index=True) title = Column(String(500)) responsibility = Column(String(200)) date = Column(String(20)) retention_period = Column(String(20)) security_level = Column(String(20)) file_path = Column(String(500)) file_size = Column(BigInt) 初始化数据库 Base.metadata.create_all(bind=engine) app = FastAPI(title="锦州档案管理系统API") 允许跨域 app.add_middleware( CORSMiddleware, allow_origins=[""], allow_methods=[""], allow_headers=[""], ) @app.post("/api/archives/upload") async def upload_archive( file: UploadFile = File(...), fond_code: str = Form(...), archive_no: str = Form(...), title: str = Form(...) ): db = SessionLocal() try: 检查档号是否存在 exist = db.query(ArchiveModel).filter(ArchiveModel.archive_no == archive_no).first() if exist: raise HTTPException(status_code=400, detail="档号已存在") 保存文件 file_ext = file.filename.split(".")[-1] save_name = f"{archive_no}.{file_ext}" save_path = os.path.join(UPLOAD_DIR, save_name) with open(save_path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) 写入数据库 new_archive = ArchiveModel( fond_code=fond_code, archive_no=archive_no, title=title, file_path=save_path, file_size=os.path.getsize(save_path) ) db.add(new_archive) db.commit() return {"code": 200, "msg": "归档成功"} except Exception as e: db.rollback() raise HTTPException(status_code=500, detail=str(e)) finally: db.close() if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) ```

四、前端管理界面开发

使用 Vue 3 配合 Element Plus 快速构建上传界面。

1. 初始化 Vue 项目

```bash npm install -g @vue/cli vue create jz-arch-web cd jz-arch-web npm install element-plus axios ```

2. 编写上传组件

修改src/App.vue,实现文件上传和元数据录入表单:

```html ```

五、生产环境部署配置

开发完成后,需要将服务部署到生产环境。使用 Gunicorn 启动后端,Nginx 反向代理。

1. 配置 Systemd 守护进程

创建服务文件/etc/systemd/system/jz_arch.service

```ini [Unit] Description=Jinzhou Archive Backend Service After=network.target [Service] Type=notify User=root WorkingDirectory=/data/jinzhou_arch Environment="PATH=/data/jinzhou_arch/venv/bin" ExecStart=/data/jinzhou_arch/venv/bin/gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 Restart=always [Install] WantedBy=multi-user.target ```

启动服务:

```bash systemctl daemon-reload systemctl start jz_arch systemctl status jz_arch ```

2. 配置 Nginx 反向代理

编辑 Nginx 配置文件/etc/nginx/conf.d/jz_arch.conf

```nginx server { listen 80; server_name your_domain_or_ip; 前端静态资源 location / { root /data/jinzhou_arch/jz-arch-web/dist; try_files $uri $uri/ /index.html; } 后端 API 接口 location /api/ { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 文件上传大小限制 client_max_body_size 500M; } } ```

检查配置并重启 Nginx:

```bash nginx -t systemctl restart nginx ```

至此,锦州档案管理系统的后端、数据库及前端部署已全部完成。你可以通过浏览器访问服务器 IP 地址进行档案的录入与上传操作。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统