首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

为团队配置Linux环境,简单高效的项目共享方案

编程知识
2024年08月01日 16:38

前言

最近好久没写博客了,事情太多了,我还搞了个新的好玩的项目,等后续做得差不多了来写篇文章介绍一下。

在我们目前的AI项目中,团队需要共同使用一台GPU服务器来做模型训练和数据处理。为了让每个团队成员都能高效地使用这台服务器,我们决定设置一个多用户共享环境。这样,无论是代码开发、模型测试还是结果验证,所有人都可以方便地访问并利用服务器的强大算力。

本文将记录一下配置Linux共享环境的过程,同时也希望能帮助那些面临类似需求的团队。

设置用户和组

要有效管理我们的GPU服务器,首先需要创建新的用户账户,并将这些账户组织到一个专门的用户组中。这样做可以更容易地管理权限和访问控制。

创建用户和组

先创建个组

sudo groupadd gpugroup

接下来创建用户

sudo adduser [用户名]

然后把用户添加到组里面

sudo usermod -a -G gpugroup username

配置SSH公钥登录

为了让团队成员能够安全地通过SSH连接到服务器,统一使用公钥认证,禁止密码登录。

每个用户需要生成一对密钥(如果还没有的话),并将公钥发送给管理员。然后,管理员需要将这些公钥添加到用户的 .ssh/authorized_keys 文件中。

首先,确保每个用户的 home 目录下都有 .ssh 目录,如果没有,可以使用下面的命令创建:

sudo mkdir /home/[用户名]/.ssh
sudo chmod 700 /home/[用户名]/.ssh

然后,将公钥添加到 authorized_keys 文件中:

echo [公钥内容] >> /home/[用户名]/.ssh/authorized_keys
sudo chmod 600 /home/[用户名]/.ssh/authorized_keys

替换 [用户名][公钥内容] 为实际的用户名和公钥。

创建共享文件夹

之前我把代码放在 home 目录下,不过实践中发现这样不利于共享。

毕竟把某个用户 home 目录下的一个文件夹设置为共享目录,让其他用户访问,总觉得怪怪的。

通常为了安全性和组织性,还是创建一个专门的目录用于共享项目比较好,问了GPT是这么说的

安全性:避免不必要的权限泄露。当你将项目放在个人家目录下时,可能会不小心赋予其他用户过多的访问权限,这可能导致敏感信息的泄露或不小心的数据损坏。

易管理性:一个专门的共享目录使得管理更为简单明了。你可以轻松控制谁可以访问这个目录,而不必担心影响到其他个人数据或设置。

扩展性:随着团队的增长,可能会有更多的用户需要访问这些共享资源。有一个独立的共享目录可以更方便地管理用户和权限,而不是不断调整家目录下的权限设置。

清晰的权限界定:独立的共享目录让权限的设置和调整变得更加清晰和简单。例如,可以针对这个目录设置定制的安全策略和备份策略。

所以我在 /srv 目录里创建了一个目录 /srv/projects 用来共享。

组权限设置

接下来,将团队共享的项目文件夹 /srv/projects 的所有权设置给 gpugroup 组。

sudo chown -R root:gpugroup /srv/projects
sudo chmod -R 775 /srv/projects

设置SGID(Set Group ID)

SGID 是一个特殊的权限设置,它确保在一个目录下创建的任何新文件或目录都会自动继承该目录的组。这非常适合我们的项目目录,因为它可以让团队中的所有成员都能访问和修改文件,而不必担心单个文件的组设置。

你可以使用以下命令来设置SGID位:

sudo chmod g+s /path/to/directory

例如,如果我们的项目目录是 /srv/projects,命令将是:

sudo chmod g+s /srv/projects

这样设置后,所有在 /srv/projects 下创建的新文件和目录都将自动设置为该组,保持权限的一致性。

调整 umask (optional)

PS: 我没有设置这个,可以但没必要

umask 是一个系统设置,决定了新创建的文件和目录的默认权限。为了确保团队成员可以编辑彼此的文件,我们需要设置一个合适的 umask 值。

通常的 umask 值是 022,这意味着新创建的文件默认权限是 644(用户可读写,组和其他人可读),新目录的默认权限是 755(用户可读写执行,组和其他人可读执行)。为了团队协作,我们可以设置 umask 为 002,这样新文件的权限为 664(用户和组可读写,其他人可读),新目录的权限为 775(用户和组可读写执行,其他人可读执行)。

可以通过以下命令临时改变 umask 值:

umask 002

为了永久改变,需要在用户的 shell 配置文件中设置,比如 .bashrc.profile

echo "umask 002" >> ~/.bashrc

其他

还有一些细节的,比如我之前把 conda 装到 home 目录里了

现在也得重新在 /srv/apps 里安装,原本在 home 里的就不要了

这样所有用户都能共享 python 的虚拟环境

复制文件时显示进度

cp -R 命令不支持显示进度

可以使用 rsync 或 pv 代替

rsync

rsync -ah --progress source destination

参数解释:

  • -a 是归档模式,它保留符号链接、文件权限、用户组信息等。
  • -h 使输出更易于阅读,使用人类可读的格式。
  • --progress 显示复制进度。

pv

这个是搭配压缩工具使用的,有些系统不自带,可能得先安装。

tar cf - source/ | pv | tar xf - -C destination

这个命令将 source 目录打包并通过 pv 显示进度,然后在 destination 目录中解包。

小结

这样设置下来就基本搞定了

我最近还探索了一些项目管理工具,部署了 MatterMost

接下来可以写文章记录一下。

From:https://www.cnblogs.com/deali/p/18337164
本文地址: http://www.shuzixingkong.net/article/672
0评论
提交 加载更多评论
其他文章 比较基因组学流程
1、OrthoFinder 教程:用于比较基因组学的系统发育直系学推断 1.1 orthofinder介绍 OrthoFinder是一种快速、准确和全面的比较基因组学分析工具。它可以找到直系和正群,为所有的正群推断基因树,并为所分析的物种推断一个有根的物种树。OrthoFinder还为比较基因组分析
比较基因组学流程 比较基因组学流程 比较基因组学流程
SQL连续查询问题拓展—记上海拼多多非技术岗面试真题
真巧,昨天刚写了关于数据库连续问题的解决方案,没想到今天下午两点就有朋友在上海拼多多面试非技术岗位中就遇到了相似的问题。下面是原题: 一个最大连续支付失败的次数 有一张支付流水表pay;字段如下 id uid time status pay_01 1 2024-01-15 10:00:00 fail
[rCore学习笔记 020]第二章作业
写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 编程题 实现一个裸机应用程序A,能打印调用栈 首先在这里卡了我很久的是调用栈保存在哪里,回想到上一部分画的
[rCore学习笔记 020]第二章作业 [rCore学习笔记 020]第二章作业 [rCore学习笔记 020]第二章作业
python 音频处理(1)——重采样、音高提取
python音频处理 音高提取 f0 提取pitch基频特征 torchaudio resample 重采样
python 音频处理(1)——重采样、音高提取 python 音频处理(1)——重采样、音高提取 python 音频处理(1)——重采样、音高提取
ThinkPHP6支持金仓数据库(Kingbase)解决无法使用模型查询问题
参考了很多前人的文章,最后只支持Db::query原生查询,不支持thinkphp数据模型方法,这在实际项目中是很难接受的,特分享出解决方案。 先按照流程配置如下: 1.准备工作 首先确认PHP支持金仓数据库的扩展,可以去金仓官网下载,安装配置(详细配置略过……)。 使用 php -m 命令检查,显
ThinkPHP6支持金仓数据库(Kingbase)解决无法使用模型查询问题 ThinkPHP6支持金仓数据库(Kingbase)解决无法使用模型查询问题 ThinkPHP6支持金仓数据库(Kingbase)解决无法使用模型查询问题
在Python中使用sqlalchemy来操作数据库的几个小总结
在探索使用 FastAPI, SQLAlchemy, Pydantic,Redis, JWT 构建的项目的时候,其中数据库访问采用SQLAlchemy,并采用异步方式。数据库操作和控制器操作,采用基类继承的方式减少重复代码,提高代码复用性。在这个过程中设计接口和测试的时候,对一些问题进行跟踪解决,并
Vue Hook 封装通用型表格
一、创建通用型表格的需求 实现一个通用型表格组件,具备以下功能: 动态列配置。 分页功能。 排序功能。 可扩展的行操作功能。 二、设计通用型表格组件 首先,需要设计一个基础的表格组件,它接受列配置、数据和分页信息等参数。 1. 创建 useTable Hook 在 src/hooks 目录下创建 u
Jenkins 配置即代码(Configuration as Code)详解
1、概述 在《Centos7下安装配置最新版本Jenkins(2.452.3)》这篇博文中讲解了如何安装Jenkins,虽然在安装Jenkins时安装了一些必备的推荐插件,但在企业环境中使用Jenkins之前,我们仍需完成一系列手动配置工作,如配置 System Configuration、Secu
Jenkins 配置即代码(Configuration as Code)详解 Jenkins 配置即代码(Configuration as Code)详解 Jenkins 配置即代码(Configuration as Code)详解