网站首页/ 信息中心/ 技术指南/

油田数字档案馆从零搭建实战指南

发布时间:2026年06月15日 11:55:27 浏览量:0

一、核心系统架构设计

油田数字档案馆的核心是构建一个能安全、高效管理海量结构化数据(如井史、测井曲线)与非结构化数据(如设计图纸、施工报告)的系统。我们采用微服务架构,将系统拆分为独立部署的服务,便于后期维护和扩展。

1.1 技术栈选型

以下是经过验证的、稳定且文档齐全的技术组合,可直接用于生产环境。

二、环境准备与依赖安装

所有操作均在CentOS 7.9或Ubuntu 20.04 LTS系统上验证通过。

2.1 安装Docker与Docker Compose

通过以下脚本一键安装Docker引擎和最新版Docker Compose。

执行安装命令:

``` curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo systemctl start docker && sudo systemctl enable docker 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 --version docker-compose --version ```

2.2 部署基础服务

创建 `docker-compose.yml` 文件,一次性启动MySQL、Redis、MinIO和Elasticsearch。

在项目根目录创建 `docker-compose.yml`,内容如下:

``` version: '3.8' services: mysql: image: mysql:8.0 container_name: archive-mysql environment: MYSQL_ROOT_PASSWORD: StrongPass123! MYSQL_DATABASE: oilfield_archive ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password redis: image: redis:6-alpine container_name: archive-redis ports: - "6379:6379" volumes: - ./redis_data:/data minio: image: minio/minio container_name: archive-minio ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: AdminPass123! volumes: - ./minio_data:/data command: server /data --console-address ":9001" elasticsearch: image: elasticsearch:7.17.9 container_name: archive-es environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms512m -Xmx512m ports: - "9200:9200" volumes: - ./es_data:/usr/share/elasticsearch/data ```

启动服务:

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

检查所有容器状态:

``` sudo docker-compose ps ```

三、后端服务搭建

3.1 项目初始化与数据库配置

使用Spring Initializr生成项目骨架,或直接克隆以下基础模板。

核心依赖 `pom.xml` 配置:

``` org.springframework.boot spring-boot-starter-web com.baomidou mybatis-plus-boot-starter 3.5.3 mysql mysql-connector-java runtime io.minio minio 8.5.2 org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter-data-redis ```

油田数字档案馆从零搭建实战指南

数据库连接配置 `application.yml`:

``` spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://你的服务器IP:3306/oilfield_archive?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: StrongPass123! redis: host: 你的服务器IP port: 6379 database: 0 elasticsearch: uris: http://你的服务器IP:9200 minio: endpoint: http://你的服务器IP:9000 accessKey: admin secretKey: AdminPass123! bucketName: oilfield-files ```

3.2 核心功能实现

文件上传服务实现:创建 `FileStorageService` 类,封装MinIO操作。

``` @Service public class FileStorageService { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.bucketName}") private String bucketName; private MinioClient minioClient; @PostConstruct public void init() throws Exception { minioClient = MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); // 确保存储桶存在 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } } public String uploadFile(MultipartFile file, String objectName) throws Exception { minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); return endpoint + "/" + bucketName + "/" + objectName; } } ```

档案元数据索引:创建Elasticsearch文档模型与仓储接口,实现档案内容的全文检索。

``` @Document(indexName = "archive_document") @Data public class ArchiveDocument { @Id private String id; private String fileId; // 对应文件表ID private String fileName; private String fileType; private String content; // 从TXT/PDF/Word中提取的文本内容 private String uploadUser; private Date uploadTime; private String oilfield; // 所属油田 private String wellNumber; // 关联井号 } public interface ArchiveDocumentRepository extends ElasticsearchRepository { List findByFileNameOrContent(String fileName, String content); } ```

四、前端管理界面开发

4.1 初始化Vue项目与配置

使用Vite快速创建项目,并安装必要依赖。

``` npm create vite@latest oilfield-archive-frontend -- --template vue cd oilfield-archive-frontend npm install element-plus axios --save npm install ```

在 `main.js` 中引入Element Plus:

``` import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('app') ```

4.2 实现档案上传组件

创建 `FileUpload.vue` 组件,包含文件选择、元数据填写和上传进度显示。

``` ```

五、系统部署与启动

5.1 后端应用打包与Docker化

在后端项目根目录创建 `Dockerfile`:

``` FROM openjdk:11-jre-slim VOLUME /tmp COPY target/.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] ```

构建并运行后端服务容器:

``` 在项目根目录执行Maven打包 mvn clean package -DskipTests 构建Docker镜像 sudo docker build -t oilfield-archive-backend . 运行容器,连接到之前启动的数据库等服务网络 sudo docker run -d -p 8080:8080 \ --network=your_project_default \ -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/oilfield_archive \ -e SPRING_REDIS_HOST=redis \ -e SPRING_ELASTICSEARCH_URIS=http://elasticsearch:9200 \ -e MINIO_ENDPOINT=http://minio:9000 \ --name archive-backend \ oilfield-archive-backend ```

5.2 前端应用构建与Nginx部署

构建前端生产环境代码:

``` npm run build ```

创建 `nginx.conf` 配置文件,处理前端路由和后端API代理:

``` server { listen 80; server_name your_domain_or_ip; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://archive-backend:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```

使用Docker运行Nginx服务:

``` sudo docker run -d -p 80:80 \ -v /path/to/your/dist:/usr/share/nginx/html:ro \ -v /path/to/your/nginx.conf:/etc/nginx/conf.d/default.conf:ro \ --name archive-frontend \ nginx:alpine ```

六、基础功能验证

系统启动后,按顺序验证以下核心功能是否正常。

  1. 服务健康检查:访问 `http://你的服务器IP:8080/actuator/health`,应返回 `{"status":"UP"}`。
  2. MinIO控制台登录:访问 `http://你的服务器IP:9001`,使用账号 `admin` 和密码 `AdminPass123!` 登录,确认 `oilfield-files` 存储桶已创建。
  3. 前端页面访问:访问 `http://你的服务器IP`,应显示档案管理界面。
  4. 文件上传测试:在前端界面选择一个PDF或图片文件,填写元数据后上传。随后在MinIO控制台和Elasticsearch中检查文件是否已存储和索引。

完成以上所有步骤后,一个具备文件上传、存储、检索等核心功能的油田数字档案馆最小可行系统即部署完成。后续可根据具体业务需求,在此架构上扩展权限管理、工作流、数据可视化等功能模块。

微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818