V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chenqh
V2EX  ›  Python

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

  •  
  •   chenqh · 2021-05-08 12:57:58 +08:00 · 2648 次点击
    这是一个创建于 1328 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    对,自从用了 Docker,再也不用考虑这种事了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 22:39 · PVG 06:39 · LAX 14:39 · JFK 17:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.