搭建一个基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能堆叠,集群和IRF

堆叠和IRF其实可以近似看成同一种技术,只是华三叫IRF,华为叫智能堆叠 智能堆叠(iStack):支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上变成一台交换设备,作为一个整体参与数据转发&…

go使用mysql实现增删改查操作

1、安装MySQL驱动 go get -u github.com/go-sql-driver/mysql2、go连接MySQL import ("database/sql""log"_ "github.com/go-sql-driver/mysql" // 导入 mysql 驱动 )type Users struct {ID intName stringEmail string }var db *sql.DBfu…

springboot中使用mongodb完成评论功能

pom文件中引入 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> yml中配置连接 data:mongodb:uri: mongodb://admin:1234561…

layui-vue第三方库表格列事件怎么写

插槽写入列点击事件 <div class"le-table-box" ref"TableBoxRef" :style"{ height: ShowPage ? calc(100% - 60px) : 100% }"><lay-table row-double"dbRowClick" :columns"TableColumn" :data-source"Table…

[在线实验]-Redis Docker镜像的下载与部署

镜像下载 dockerredis镜像资源-CSDN文库 加载镜像 使用以下命令从redis.tar文件中加载Docker镜像 docker load --input redis.tar 创建映射目录 为了确保Redis的数据能够持久化&#xff0c;我们需要创建一个本地目录来存储这些数据 mkdir -p datasource/docker/redis 运…

Flink CDC 使用实践以及遇到的问题

背景 最近公司在做一些业务上的架构调整&#xff0c;有一部分是数据从mysql采集到Starrocks&#xff0c;之前的一套方法是走 debezium 到 puslar 到 starrocks,这一套下来比较需要配置很多东西&#xff0c;而且出现问题以后&#xff0c;需要修改很多配置&#xff0c;而且现阶段…

配置idea环境进行scala编程

这里用的jdk是jdk-8u161,scala版本是2.12.0 在d盘新建一个本地仓库用来存放下载的maven包&#xff0c;在里面创建如下两个文件 更改settings文件为下面的样子 点击左下角的设置&#xff0c;更改maven本地仓库的位置&#xff08;默认在c盘用户目录下的.m2文件中&#xff0c;更改…

0017. shell命令--tac

目录 17. shell命令--tac 功能说明 语法格式 选项说明 实践操作 注意事项 17. shell命令--tac 功能说明 Linux 的 tac 命令用于按行反向输出文件内容&#xff0c;与 cat 命令的输出顺序相反。非常有趣&#xff0c;好记。也就是说&#xff0c;当我们使用tac命令查看文件内…

mimic插件使用

最近搞机械臂的末端夹具&#xff0c;本来想用吸盘的插件的&#xff0c;不知道为什么吸盘吸不起来可乐瓶&#xff0c;后面就换成夹爪了。 因为原厂的urdf文件中提供夹爪是用mimic标签控制剩下的5个joint关节的&#xff0c;网上参考的资料太少了&#xff0c;也是废了好多力 气&am…

Spring boot之BeanDefinition介绍

在spring框架中IOC容器进行bean的创建和管理。Bean的创建是一个比较复杂的过程&#xff0c;它并不像我们创建对象一样只是直接new一下就行&#xff0c;虽然有些bean确实就是New一下。但在Spring中可以通过一些途径对bean进行增强扩展。在这个过程中&#xff0c;BeanDefinition作…

redis基础spark操作redis

Redis内存淘汰策略 将Redis用作缓存时&#xff0c;如果内存空间用满&#xff0c;就会自动驱逐老的数据。 为什么要使用内存淘汰策略呢&#xff1f; 当海量数据涌入redis&#xff0c;导致redis装不下了咋办&#xff0c;我们需要根据redis的内存淘汰策略&#xff0c;淘汰一些不那…

【MyBatis】验证多级缓存及 Cache Aside 模式的应用

文章目录 前言1. 多级缓存的概念1.1 CPU 多级缓存1.2 MyBatis 多级缓存 2. MyBatis 本地缓存3. MyBatis 全局缓存3.1 MyBatis 全局缓存过期算法3.2 CacheAside 模式 后记MyBatis 提供了缓存切口&#xff0c; 采用 Redis 会引入什么问题&#xff1f;万一遇到需强一致场景&#x…

力扣--LCR 150.彩灯装饰记录II

题目 代码 if(root null){ return new ArrayList<>(); } Queue<TreeNode> queue new LinkedList<>();List<List<Integer>> res new ArrayList<>();queue.add(root);while(!queue.isEmpty()){int k queue.size();List<Integer> …

RFdiffusion Potential类解读

1. Potential 类 功能 Potential 是一个接口类(抽象类),用于定义潜在函数的接口,要求继承它的类必须实现 compute 方法。它的设计遵循 面向对象编程的多态性原则,通过抽象接口确保子类实现特定功能,同时定义了一个通用的 API(即 compute 方法)。源代码: class Poten…

一款.NET开源的Windows资源管理器标签页工具

前言 今天大姚给大家分享一款基于.NET开发的可以让你在Windows资源管理器中使用Tab多标签功能的小工具&#xff1a;QTTabBar。 工具介绍 QTTabBar是一款基于.NET开发的可以让你在Windows资源管理器中使用Tab多标签功能的小工具。从此以后工作时不再遍布文件夹窗口&#xff0c…

PVE中VLAN的设置要点

使用这个拓扑进行连接无法直接访问PVE PVE 是这样设置如下&#xff1a; 核心重点&#xff1a;PVE 的 vmbr0 接口直接绑定了 enp2s0&#xff0c;这会导致 VLAN 流量无法正确处理&#xff0c;因为 PVE 没有专门为 VLAN 3 配置接口。 1.vmbr0 和 vmbr0.3 都是绑定在物理接口 enp2…

长城上,低空下,北京联通点亮5G-A的时代星光

2024年&#xff0c;被认为是5G-A的商用元年。在这个关键节点&#xff0c;大部分普通人最关心的问题可能是5G-A的引入、网络能力的提升&#xff0c;究竟能给我们带来哪些实用价值&#xff1f;在城市中到底有什么应用场景&#xff1f; 面对上述大众关切的问题&#xff0c;首善之都…

Vue使用Mockjs插件实现模拟数据

官方文档&#xff1a;Mock.js 一.引言 在前端开发过程中&#xff0c;我们经常会遇到后端接口尚未完成&#xff0c;但前端需要进行页面构建和功能测试的情况。这时候&#xff0c;Mockjs就如同救星一般出现了。Mockjs 是一款能够模拟生成随机数据&#xff0c;拦截 Ajax 请求并返…

阅读方法论

选择固有缺陷,选项是对比出来的

芯片测试-smith圆图

smith圆图 &#x1f4a2;smith圆图的故事&#x1f4a2;&#x1f4a2;smith圆图中的各部分来历&#x1f4a2;&#x1f4a2;公式推导&#x1f4a2;&#x1f4a2;等电阻圆特点&#x1f4a2;&#x1f4a2;等电抗圆&#x1f4a2;&#x1f4a2;等电抗圆特点&#x1f4a2; &#x1f4a…