赣州数字档案馆系统从零到一部署与运维实战指南

一、系统架构设计与技术选型

本系统采用微服务架构,确保高可用性和可扩展性。核心组件包括:

  • 前端: Vue 3 + Element Plus
  • 后端: Spring Boot 2.7 + MyBatis Plus
  • 数据库: MySQL 8.0(业务数据)+ MongoDB 5.0(非结构化档案数据)
  • 文件存储: MinIO(对象存储,用于存储扫描件、音视频等)
  • 搜索引擎: Elasticsearch 8.5(全文检索)
  • 部署与编排: Docker 20.10 + Docker Compose 2.17

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

2.1 服务器初始化配置

使用CentOS 7.9操作系统,执行以下命令完成基础环境配置:

1. 关闭防火墙与SELinux(生产环境请按需配置安全策略):

``` systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ```

2. 安装必要工具:

``` yum install -y wget vim net-tools epel-release ```

2.2 Docker与Docker Compose安装

1. 安装Docker:

``` yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io systemctl start docker systemctl enable docker ```

2. 安装Docker Compose:

``` curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ```

三、核心服务容器化部署

3.1 创建项目目录与编排文件

1. 创建项目目录结构:

``` mkdir -p /opt/gz-archive/{mysql,minio,es,mongo,app} cd /opt/gz-archive ```

2. 创建docker-compose.yml文件:

``` version: '3.8' services: mysql: image: mysql:8.0 container_name: gz-mysql restart: always environment: MYSQL_ROOT_PASSWORD: YourStrong@Pass123 MYSQL_DATABASE: gz_archive ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d command: --default-authentication-plugin=mysql_native_password minio: image: minio/minio:latest container_name: gz-minio restart: always ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: YourMinioPass123 volumes: - ./minio/data:/data command: server /data --console-address ":9001" elasticsearch: image: elasticsearch:8.5.3 container_name: gz-es restart: always environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - "9200:9200" volumes: - ./es/data:/usr/share/elasticsearch/data mongo: image: mongo:5.0 container_name: gz-mongo restart: always ports: - "27017:27017" volumes: - ./mongo/data:/data/db ```

3. 启动基础服务:

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

3.2 数据库初始化

1. 进入MySQL容器创建业务表:

``` docker exec -it gz-mysql mysql -uroot -pYourStrong@Pass123 ```

2. 执行以下SQL创建核心表:

``` USE gz_archive; CREATE TABLE `archive_category` ( `id` bigint NOT NULL AUTO_INCREMENT, `category_name` varchar(100) NOT NULL COMMENT '档案分类名称', `parent_id` bigint DEFAULT '0' COMMENT '父级ID', `sort_order` int DEFAULT '0' COMMENT '排序', `created_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `archive_document` ( `id` bigint NOT NULL AUTO_INCREMENT, `doc_number` varchar(50) NOT NULL COMMENT '档案编号', `title` varchar(500) NOT NULL COMMENT '档案标题', `category_id` bigint NOT NULL COMMENT '分类ID', `keywords` varchar(500) DEFAULT NULL COMMENT '关键词', `storage_path` varchar(1000) NOT NULL COMMENT '文件存储路径', `file_size` bigint DEFAULT '0' COMMENT '文件大小(字节)', `file_type` varchar(50) DEFAULT NULL COMMENT '文件类型', `created_by` varchar(50) DEFAULT NULL COMMENT '创建人', `created_time` datetime DEFAULT CURRENT_TIMESTAMP, `updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_doc_number` (`doc_number`), KEY `idx_category` (`category_id`), KEY `idx_keywords` (`keywords`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```

四、后端服务部署与配置

4.1 应用配置文件

/opt/gz-archive/app目录下创建application.yml

``` server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://gz-mysql:3306/gz_archive?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: YourStrong@Pass123 data: mongodb: uri: mongodb://gz-mongo:27017/gz_archive elasticsearch: uris: http://gz-es:9200 minio: endpoint: http://gz-minio:9000 accessKey: admin secretKey: YourMinioPass123 bucketName: gz-archive-bucket mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ```

4.2 构建Docker镜像并部署

1. 创建Dockerfile

``` FROM openjdk:11-jre-slim WORKDIR /app COPY gz-archive-backend.jar app.jar COPY application.yml application.yml EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar", "--spring.config.location=application.yml"] ```

2. 构建镜像(假设已打包好gz-archive-backend.jar):

``` docker build -t gz-archive-backend:1.0 . ```

3. 在docker-compose.yml中添加应用服务:

``` app-backend: image: gz-archive-backend:1.0 container_name: gz-app-backend restart: always ports: - "8080:8080" depends_on: - mysql - minio - elasticsearch - mongo volumes: - ./app/application.yml:/app/application.yml ```

4. 重新启动所有服务:

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

五、前端服务部署

5.1 Nginx配置与部署

赣州数字档案馆系统从零到一部署与运维实战指南

1. 创建前端部署目录:

``` mkdir -p /opt/gz-archive/nginx/{conf,html} ```

2. 创建nginx.conf

``` user nginx; worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://gz-app-backend:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ```

3. 在docker-compose.yml中添加Nginx服务:

``` nginx: image: nginx:1.23 container_name: gz-nginx restart: always ports: - "80:80" volumes: - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf - ./dist:/usr/share/nginx/html depends_on: - app-backend ```

4. 将Vue项目构建的dist目录复制到/opt/gz-archive/nginx/,并重命名为dist

5. 重启服务:

``` docker-compose restart nginx ```

六、系统初始化与测试

6.1 MinIO存储桶创建

1. 访问MinIO控制台:http://服务器IP:9001

2. 使用admin/YourMinioPass123登录

3. 点击"Create Bucket",输入gz-archive-bucket创建存储桶

6.2 系统功能验证

1. 访问系统前端:http://服务器IP

2. 测试档案上传功能:

  • 上传PDF文件,观察MinIO控制台文件存储情况
  • 检查MySQL中archive_document表记录
  • 验证Elasticsearch中是否建立索引:curl http://localhost:9200/gz_archive/_search

3. 测试全文检索功能:

  • 在搜索框输入关键词,确认能检索到相关档案

七、运维与监控配置

7.1 日志收集配置

1. 修改docker-compose.yml为所有服务添加日志驱动:

``` services: mysql: ... 其他配置 logging: driver: "json-file" options: max-size: "10m" max-file: "3" ```

2. 查看容器日志:

``` docker logs -f gz-app-backend --tail 100 ```

7.2 数据备份脚本

创建/opt/gz-archive/backup.sh

``` !/bin/bash BACKUP_DIR="/opt/gz-archive/backup/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR 备份MySQL docker exec gz-mysql mysqldump -uroot -pYourStrong@Pass123 gz_archive > $BACKUP_DIR/gz_archive.sql 备份MongoDB docker exec gz-mongo mongodump --out $BACKUP_DIR/mongodb/ 备份Elasticsearch索引 curl -X GET "localhost:9200/_snapshot/backup_repository" > $BACKUP_DIR/es_indices.json echo "Backup completed at $(date)" >> $BACKUP_DIR/backup.log ```

设置定时任务:

``` crontab -e 添加以下内容,每天凌晨2点执行备份 0 2 /bin/bash /opt/gz-archive/backup.sh ```

7.3 服务健康检查

docker-compose.yml中添加健康检查:

``` services: app-backend: ... 其他配置 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s ```
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统