当前位置: 首页 > news >正文

搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档

搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档

本项目采用以下架构:

  • NFS服务器: 负责存储文档资料。
  • Web服务器: 负责提供文档访问和编辑功能。
  • SELinux: 负责权限控制,确保文档安全。
  • Git服务器: 负责存储文档版本历史,并提供版本控制功能
  • Shell脚本: 负责自动化运维,例如定期备份、日志清理等

 步骤一:搭建NFS服务器

1.安装NFS软件包 

[root@server data]# yum install -y nfs-utils rpcbind

2.配置NFS共享目录

我们需要创建一个共享目录,例如 /var/nfs/share,并配置其访问权限。这里我们允许所有来自 192.168.137.128 网段的客户端以读写方式访问共享目录。

[root@server data]# mkdir -p /var/nfs/share[root@server data]# cat /etc/exports /data 192.168.137.128(rw)

3.启动NFS服务

需要启动NFS服务,并启用开机自启动,确保服务器一直提供NFS服务

[root@server data]# chmod o+w /data/
[root@server data]# systemctl disable firewalld --now  //记得关防火墙
[root@server data]# getenforce
Enforcing
[root@server data]# setenforce 0
[root@server data]# systemctl restart nfs-server//之后可以查看一下

步骤二:搭建Web服务器

1.安装Web服务器软件:

[root@localhost ~]# dnf install nginx -y

2.配置Web服务器:

需要在Nginx配置文件中定义一个服务器块,指定监听的端口、域名和网站根目录。我们还需要配置HTTPS,使用自签名证书或CA签发的证书进行加密传输,提高安全性。

[root@localhost ~]# vim /etc/nginx/conf.d/document_management.confserver {listen 80;server_name document_management.example.com;location / {root /var/nfs/share;autoindex on;auth_basic "Document Management";auth_basic_user_file /etc/nginx/conf.d/htpasswd;}}

3.配置HTTPS:

配置HTTPS需要生成私钥和证书,并将其添加到Nginx配置文件中


[root@localhost ~]# openssl req -x509 -newkey rsa:4096 -sha256 -days 365 -nodes -out /etc/nginx/conf.d/document_management.crt -keyout /etc/nginx/conf.d/document_management.key

 一次性生成证书:

  • Country Name (2 letter code): 国家代码,例如 CN 表示中国。
  • State or Province Name (full name): 州或省的名称,例如Sichuan。
  • Locality Name (eg, city): 城市名称,例如 Chengdu
  • Organization Name (eg, company): 如果不需要填写,直接按回车键。
  • Organizational Unit Name (eg, section): 如果不需要填写,直接按回车键。
  • Common Name (e.g. server FQDN or YOUR name): 通用名称,如果没有FQDN,可以输入localhost或你的IP地址。
  • Email Address: 电子邮件地址,如果不需要填写,直接按回车键

 

4.修改Nginx配置:

[root@localhost ~]# vim /etc/nginx/conf.d/document_management.confserver {listen 443 ssl;server_name document_management.example.com;ssl_certificate /etc/nginx/conf.d/document_management.crt;ssl_certificate_key /etc/nginx/conf.d/document_management.key;location / {root /var/nfs/share;autoindex on;auth_basic "Document Management";auth_basic_user_file /etc/nginx/conf.d/htpasswd;}}

5.重启Web服务器:

[root@localhost ~]# systemctl restart nginx

步骤三:创建本地用户和组

1.创建用户:

[root@localhost ~]# useradd user1
[root@localhost ~]# useradd user2

2.创建组:

[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd group2

3.将用户添加到组

[root@localhost ~]# usermod -a -G group1 user1
[root@localhost ~]# usermod -a -G group2 user2

步骤四:配置SELinux

1.创建文件类型:

用于添加文件上下文

[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t "/var/nfs/share(/.*)?"

2.设置文件安全上下文

我们需要将共享目录的安全上下文设置为 httpd_sys_content_t,以便Web服务器能够访问该目录下的文件。

[root@localhost ~]# chcon -R -t httpd_sys_content_t /var/nfs/share

3.允许Nginx访问共享目录

需要允许Nginx访问共享目录,以便Web服务器能够访问该目录下的文件。

[root@localhost ~]# semanage port -a -t http_port_t -p tcp 80[root@localhost ~]# semanage port -a -t http_port_t -p tcp 443

步骤五:配置Git服务器

1.Git服务

  • Git是一个分布式版本控制系统,每个开发者的工作目录都是一个完整的代码库副本,包含所有历史记录。
  • 这种分布式架构使得开发者可以在本地进行大部分操作,如提交、分支、合并等,而无需依赖网络连接
  • Git通过快照的方式存储数据,每次提交都会保存当前项目的状态(即文件的快照)。这种方式使得回滚到之前的版本非常高效,但也会占用较多的存储空间。
  • Git支持轻量级的分支(是指向特定提交的指针,可以快速创建和删除)和合并操作,使得并行开发和功能集成变得简单

2.安装Git软件包

[root@localhost ~]# yum install -y git

3.创建Git仓库 

用于存储文档版本历史

[root@localhost ~]# sudo git init --shared /var/nfs/share/git_repository

4.配置Git用户名和邮箱

以便Git能够记录文档的提交历史

[root@localhost ~]# git config --global user.name "Your Name"[root@localhost ~]# git config --global user.email "your.email@example.com"

步骤六:配置自动化运维

1.创建shell脚本:

编写一个shell脚本(/path/to/backup.sh),定期备份共享目录,并将备份文件移动到其他存储位置。

同时,要确保 /path/to/backup.sh 脚本有可执行权限

chmod +x /path/to/backup.sh
#!/bin/bash    cd /var/nfs/share   //当前工作目录切换到 /var/nfs/sharetar -zcvf backup.tar.gz .   //使用 tar 工具创建一个名为 backup.tar.gz 的压缩归档文件mv backup.tar.gz /backup/   //将刚刚创建的 backup.tar.gz 文件移动到 /backup/ 目录中

2.设置定时任务:

使用 crontab 命令设置定时任务,让备份脚本在指定的时间自动运行(每天午夜 00:00 执行)。

[root@localhost ~]# crontab -e0 0 * * * /path/to/backup.sh

步骤七:配置Web服务器用户认证

1.修改Web服务器配置

[root@localhost ~]# vim /etc/nginx/conf.d/document_management.confserver {listen 80;server_name document_management.example.com;location / {root /var/nfs/share;autoindex on;auth_basic "Document Management";auth_basic_user_file /etc/nginx/conf.d/htpasswd;access_control_list_file /etc/nginx/conf.d/access_list}}

2.创建访问控制列表文件

[root@localhost ~]# touch /etc/nginx/conf.d/access_list

3.配置访问控制列表:

[root@localhost ~]# echo "user1 group1" >> /etc/nginx/conf.d/access_list[root@localhost ~]# echo "user2 group2" >> /etc/nginx/conf.d/access_list

 最后测试一下

或者需要重启一下nginx服务再测试

[root@localhost ~]# systemctl restart nginx

相关文章:

搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档

搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档 本项目采用以下架构: NFS服务器: 负责存储文档资料。Web服务器: 负责提供文档访问和编辑功能。SELinux: 负责权限控制,确保文档安全。Git服务器: 负责存储文档版本历史&#x…...

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…...

《深入探究 Java 中的 boolean 类型》

在 Java 编程语言的世界里,boolean 类型虽然看似简单,却在程序的逻辑控制和决策中起着至关重要的作用。本文将带你深入了解 Java 中的 boolean 类型,从其基本概念、用法到实际应用场景,以及一些常见的注意事项。 一、boolean 类型…...

智享 AI 自动无人直播系统:打破地域与时间枷锁中小微企业的营销破局利器

中小微企业,在商业浪潮中恰似逐浪扁舟,常面临营销成本高、推广渠道窄、专业人才缺等 “暗礁”,而智享 AI 自动无人直播系统恰如精准导航的灯塔,助其破浪前行、突出重围。 成本维度,传统直播人力成本让中小微企业望而却…...

接口测试工具:reqable

背景 在众多接口测试工具中挑选出一个比较好用的接口测试工具。使用过很多工具,如Postman、Apifox、ApiPost等,基本上是同类产品,一般主要使用到的功能就是API接口和cURL,其他的功能目前还暂未使用到。 对比 性能方面&#xff…...

同时多平台git配置:GitHub和Gitee生成不同的SSH Key

文章目录 GitHub和Gitee生成不同的SSH Key步骤1:生成SSH Key步骤2:配置SSH配置文件步骤3:查看SSH公钥步骤4:将SSH公钥添加到GitHub和Gitee步骤5:测试SSH连接步骤6:添加remote远程库 GitHub和Gitee生成不同的…...

刷题计划day24 回溯(三)【复原 IP 地址】【子集】【子集 II】

⚡刷题计划day24 回溯(三)继续,回溯一共会有五个专题,敬请期待关注,可以点个免费的赞哦~ 往期可看专栏,关注不迷路, 您的支持是我的最大动力🌹~ 目录 题目一:复原 IP…...

从“找三角形”讲“等腰三角形”

【题目】 周长为11,且各边长均为整数的三角形有哪些? 【答案】 四种,边长分别为: 2 4 5 3 3 5 1 5 5 3 4 4 【解析】 讲解等腰三角形的概念时,传统方法一般向学生展示一个等腰三角形的实物模型,这…...

Java中的泛型方法和泛型类

在Java编程语言中,泛型(Generics)是一个强大的特性,它使得类、接口和方法能够灵活地操作各种数据类型,同时保持类型安全。泛型主要通过类型参数(Type Parameters)来实现,这些类型参数…...

springboot学习-spring-boot-data-jdbc分页/排序/多表查询的例子

上次使用的是JdbcTemplate实现的,是比较老的方式,重新用spring boot data jdbc和jdbc client 实现一遍。也比较一下这几种的编码差异。数据库方面JAVA给了太多选择,反而不好选了。 上次就试图直接用: public interface UserRepo…...

通信与网络基础

1.网络通信基本概念 通信:人、物通过某种介质和行为进行信息传递与交流 网络通信:终端设备之间通过计算机网络进行通信 两个终端通过网线传递文件 多个终端通过路由器传递文件 终端通过Internet下载文件 2.信息传递过程 图1-1 假定A计算机访问B的web…...

【3.存储系统】综合大题

【考点】存储系统综合大题 【2011年408真题】某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16 MB,主存(物理)地址空间大小为1 MB,页面大小为4 KB;Cache采用直接映射方式,共8行;主存与Cache之间交换的…...

【Linux】【字符设备驱动】深入解析

Linux字符设备驱动程序用于控制不支持随机访问的硬件设备,如串行端口、打印机、调制解调器等。这类设备通常以字符流的形式与用户空间程序进行交互。本节将深入探讨字符设备驱动的设计原理、实现细节及其与内核其他组件的交互。 1. 引言 字符设备驱动程序是Linux内…...

【JavaEE】多线程(2)

一、线程安全 1.1 线程安全的概念 线程是随机调度执行的,如果多线程环境下的程序运行的结果符合我们预期则说明线程安全,反之,如果遇到其他结果甚至引起了bug则说明线程不安全 1.2 经典例子与解释 下面举一个经典的线程不安全的例子&…...

mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复

cd /Users/自己的用户名/Library/Application\ Support/ 目录下有 GPT\ Chrome/ Google/ GptBrowser/ GPT\ Chrome 为原来的chrome浏览器的文件存储目录. GptBrowser 为升级后chrome浏览器存储目录 书签所在的文件 Bookmarks 登录账号Login 相关的文件 拷贝到GptBrow…...

使用Grafana K6来测测你的系统负载能力

背景 近期我们有个号称会有很高很高并发的系统要上线,为了测试一下自己开发的系统的负载能力,准备了点海克斯科技,来看看抗不抗的住。 之前笔者写过用Apache JMeter进行压力测试的文章(传送门👉:https://…...

【论文复现】基于BERT的语义分析实现

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ WRN: 宽度残差网络 概述语义分类文本分类情感分类 实现原理 核心逻辑pre_deal.pytrain.pytest_demo.py 实现方式&演示效果训练阶段测试阶…...

CTF-RE: STL逆向 [NewStarCTF 2023 公开赛道 STL] WP

多看看STL题就会了,很简单 int __fastcall main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // raxchar v5; // bl_BYTE *v6; // rax_QWORD *v7; // rax__int64 v8; // rax__int64 v9; // raxint i; // [rsp0h] [rbp-250h]int j; // [r…...

实习冲刺第三十六天

46.全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#…...

【Zemax光学设计实训三】---激光缩束镜的设计优化

前言与目录 技术设计要求: 设计一个激光扩束镜,使用的波长为1064nm,输入光束直径为10mm,输出光束的直径为2mm,且输入光束和输出光束平行(即平行光入射,平行光出射)。要求只使用两片…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

push [特殊字符] present

push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...