请教一下一般网站的目录规划放在哪里

2021-05-08 12:57:58 +08:00
 chenqh

我现在 python 的代码在服务器上面是放在 ~/code 里面,但是这个有一个问题

~ 这个目录应该无法在挂载了把, 因为我碰到 磁盘空间占满了,需要挂磁盘

难道应该挂载在 ~/newcode 这个目录下面?

还有一个问题,为什么 宝塔 /www 的 owner 是 root 呢,按理来讲不是应该是 www 这个用户的吗

2648 次点击
所在节点    Python
20 条回复
FlyingShark
2021-05-08 13:32:48 +08:00
owner root 加上 755 权限,相比 www 加上 777 权限,我感觉前者要好一些
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 根本搞不懂你到底想说什么。
nbweb
2021-05-08 14:16:41 +08:00
网站目录一般是 /var/www 吧
chenqh
2021-05-08 14:20:33 +08:00
@no1xsyzy ~就是${HOME} 这个目录呀, ~/code 是我 py 代码部署在这里, ~/newcode 是说如果要增加磁盘,这个磁盘应该挂在这里?
wednesdayco
2021-05-08 14:45:54 +08:00
@chenqh 新加磁盘不是 /mnt 里么- -
chenqh
2021-05-08 14:53:30 +08:00
@wednesdayco 新加磁盘要挂载的呀
aristolochic
2021-05-08 15:04:28 +08:00
按照设计来讲是应该放到 /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 呢,不就从根源上没这码事儿吗。
chenqh
2021-05-08 15:07:03 +08:00
@aristolochic 大佬,那 /srv 和或者叫 /var/www 改用什么权限呢 owner `root` 然后 755?
chenqh
2021-05-08 15:07:57 +08:00
@aristolochic 如果是 755,那如果要写文件,不是要用 root?
aristolochic
2021-05-08 15:26:45 +08:00
@chenqh 这不得看场景嘛……我是利用了 www-data 用户组,把执行可执行文件的用户加进去,然后服务目录 755 g+s 。不好说算不算好实践。(要设置 gid bits 是部署时复制文件的 hack,没啥别的意思)。执行用户为什么一定要是 root 呢,没这个规矩啊
chenqh
2021-05-08 17:38:33 +08:00
@aristolochic 755 不是 group 用户只有读权限和可执行权限吗?没有写权限呀
chenqh
2021-05-08 17:38:52 +08:00
@aristolochic 除非是 775?
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 )
no1xsyzy
2021-05-08 20:57:52 +08:00
@chenqh $HOME 可不止一个
www-data 的 $HOME 通常是 / 或者 /nonexisting 吧
chenqh
2021-05-08 21:11:07 +08:00
@no1xsyzy 好吧
aristolochic
2021-05-09 10:20:07 +08:00
@no1xsyzy 神奇的是,www-data 虽然肯定是 nologin,但好多发行版给的家目录是 /var/www 。
Arch 系的 Nginx 还不用 www-data,用 http,给的家目录是 /srv/http (这就和之前对上了
或许这就是规范吧
chenqh
2021-05-09 11:21:33 +08:00
@aristolochic 不对呀,大佬,`/var` 目录 不是 `root:root` 然后 755 的吗? `/var/www` 然后划给 `web:web` 然后 755?
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 。建议新建一个用户,最好是一个服务一个文件
chenqh
2021-05-09 21:26:34 +08:00
@aristolochic 被大佬弄晕了
muzuiget
2021-05-10 01:23:09 +08:00
如果机器就自己一个人用,随便放在哪里都行,无冲突即可。

对,自从用了 Docker,再也不用考虑这种事了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX