当前位置: 首页 > 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,且输入光束和输出光束平行(即平行光入射,平行光出射)。要求只使用两片…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...