我现在 python 的代码在服务器上面是放在 ~/code
里面,但是这个有一个问题
~
这个目录应该无法在挂载了把, 因为我碰到 磁盘空间占满了,需要挂磁盘
难道应该挂载在 ~/newcode
这个目录下面?
还有一个问题,为什么 宝塔
/www
的 owner 是 root
呢,按理来讲不是应该是 www
这个用户的吗
1
FlyingShark 2021-05-08 13:32:48 +08:00
owner root 加上 755 权限,相比 www 加上 777 权限,我感觉前者要好一些
|
2
no1xsyzy 2021-05-08 13:35:50 +08:00
/www 这个地方根本就是不符合 FHS,应是 /var/www
可以 grep www /etc/passwd 看看有没有 www 这个用户,通常也不是叫 www 而是 www-data 之类的 另外,www-data 无法完成系统维护工作,宝塔这种维护工具的拥有权当然不应该给其他用户。 ~ 不是一个确切的目录。而且一会 ~/code 一会 ~/newcode 根本搞不懂你到底想说什么。 |
3
nbweb 2021-05-08 14:16:41 +08:00
网站目录一般是 /var/www 吧
|
4
chenqh OP @no1xsyzy ~就是${HOME} 这个目录呀, ~/code 是我 py 代码部署在这里, ~/newcode 是说如果要增加磁盘,这个磁盘应该挂在这里?
|
5
wednesdayco 2021-05-08 14:45:54 +08:00
@chenqh 新加磁盘不是 /mnt 里么- -
|
6
chenqh OP @wednesdayco 新加磁盘要挂载的呀
|
7
aristolochic 2021-05-08 15:04:28 +08:00 4
按照设计来讲是应该放到 /srv 下面的,/var/www 也是个流行的选择,可实践起来却真的不一定。
首先是发行版(的打包者)就有脾气,同样是安个 Nginx,得有那个告诉你 Nginx 跑起来的静态目录吧,那个 sites-available/default 的 root 目录就不一样: SUSE 系列的挺守规矩,就放在 /srv 里面; Debian/Ubuntu 和 RHEL/CentOS 都放在 /var/www,/srv 目录里面基本上默认啥都没有; Arch 系 /srv 下面倒是给你放了两个空文件夹 ftp 和 http,你以为要放在 /srv/http 那里了吗?当然不,是放在 /usr/share/nginx 下。 这就是另一种范式。系统打包的东西你真不知道装在哪儿,因为规范没那么强力,尤其是像 Arch 这样的八成就跟着上游走了。自己编译的、闭源的,没准还放在 /opt 里面。 我的推荐是在以下几个里面选:/srv, /var/www, /www, /opt 。前两者好多人都用,生态上也基本就认这两个,合理;/www 的话也见不少人用过(排除宝塔面板),但可能有一半都是 /var/www 的软链接;/opt 的话,比如说打包成 docker 就挺不错的,如果用户不想要了,可以一键删干净。 放家目录可就算了吧,自己玩儿的可行,真要部署可就没听说过了。部属用的用户比如 deploy 或者服务用的用户 www-data 哪儿有家目录啊?难不成放你普通用户家目录?凭啥啊,折腾用户组多费劲。再说 systemd 服务指向的工作目录是家目录下的一个子目录,心里不膈应吗。 对说到部署,还有一种选择是听工具链的选择。已经有人提到了,宝塔面板用 /www 。各有各的喜好,比如用 Capistrano 部署 Rails,就是 /var/www 。人家 Tomcat 还直接放在 webapp 呢,不就从根源上没这码事儿吗。 |
8
chenqh OP @aristolochic 大佬,那 /srv 和或者叫 /var/www 改用什么权限呢 owner `root` 然后 755?
|
9
chenqh OP @aristolochic 如果是 755,那如果要写文件,不是要用 root?
|
10
aristolochic 2021-05-08 15:26:45 +08:00
@chenqh 这不得看场景嘛……我是利用了 www-data 用户组,把执行可执行文件的用户加进去,然后服务目录 755 g+s 。不好说算不算好实践。(要设置 gid bits 是部署时复制文件的 hack,没啥别的意思)。执行用户为什么一定要是 root 呢,没这个规矩啊
|
11
chenqh OP @aristolochic 755 不是 group 用户只有读权限和可执行权限吗?没有写权限呀
|
12
chenqh OP @aristolochic 除非是 775?
|
13
aristolochic 2021-05-08 18:00:55 +08:00
@chenqh 用户组属于 www-data 是为了让 Nginx 能够服务 public 下的静态资源,以及允许读写 sock 文件,仅需要针对 sock 文件添加组的写权限而已。Nginx 又不负责写文件,为什么要给用户组写权限呢?文件是运行应用服务器的那个用户写的(对于我而言是 Rails 应用,创建了一个 web 用户)。
部署和运行应用服务器的用户同时拥有这些文件 /目录,因为一来我希望 web 用户在 rvm 用户组下能用到 Ruby 虚拟环境,二来作为部署用户访问 rvm,能够使用 webpack 编译前端资源。如果不考虑自动化部署的话,/var/www/<YOUR_APP_NAME>完全是可以交给 www-data 的( www-data:www-data ) |
16
aristolochic 2021-05-09 10:20:07 +08:00
@no1xsyzy 神奇的是,www-data 虽然肯定是 nologin,但好多发行版给的家目录是 /var/www 。
Arch 系的 Nginx 还不用 www-data,用 http,给的家目录是 /srv/http (这就和之前对上了 或许这就是规范吧 |
17
chenqh OP @aristolochic 不对呀,大佬,`/var` 目录 不是 `root:root` 然后 755 的吗? `/var/www` 然后划给 `web:web` 然后 755?
|
18
aristolochic 2021-05-09 20:59:19 +08:00
@chenqh 对啊,/var 肯定是不能给除了 root 以外的别的东西的,但里面的东西比如 /var/www 归谁管就不一定了,不然为什么 Debian/Ubuntu 系创建 www-data 用户要设置 /var/www 为家目录呢?人家就是让你这么用的。
我现在设置的是 web:www-data,属于 web 是因为没钱+懒,开发测试部署都在一个机器上,所以需要启动不同的 Puma 实例,又不想改默认的 Puma 配置,所以 sock 文件相对于服务器目录,那生产不就放在 /var/www 里面了(不是好范式,应该放在 /run 底下,不要学我),加上又有部署魔改需求和使用 RVM 的需要,就这么做了,正常应该是 www-data:www-data,因为我要用 Nginx 。你要是不用的话,假设用 web 启动你的服务器,那就 web:web 。建议新建一个用户,最好是一个服务一个文件 |
19
chenqh OP @aristolochic 被大佬弄晕了
|
20
muzuiget 2021-05-10 01:23:09 +08:00
如果机器就自己一个人用,随便放在哪里都行,无冲突即可。
对,自从用了 Docker,再也不用考虑这种事了。 |