V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
rv54ntjwfm3ug8
V2EX  ›  Linux

Web 服务的程序放在 /opt /var /etc /app /web 哪个好? Web 服务的数据呢?

  •  1
     
  •   rv54ntjwfm3ug8 · 139 天前 · 4182 次点击
    这是一个创建于 139 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每种情况的人我都见过,google 查了很久说什么的都有,没有结论

    48 条回复    2022-03-30 21:07:59 +08:00
    GTim
        1
    GTim  
       139 天前
    我懒,放在 /home/www 目录
    Kobayashi
        2
    Kobayashi  
       139 天前 via Android
    再帮你加一个 /srv
    xy90321
        3
    xy90321  
       139 天前 via iPhone
    /srv 貌似比较正统,因为 www 也是一个服务

    公司项目比较懒,服务器在哪儿就放哪儿,所以一般是 /opt 下面

    自己项目一般丢 /var 下面
    CallMeReznov
        4
    CallMeReznov  
       139 天前
    inetpub/wwwroot 😁
    ericguo
        5
    ericguo  
       139 天前
    /var/www
    dream4ever
        6
    dream4ever  
       139 天前
    @CallMeReznov IIS 乱入,哈哈
    pytth
        7
    pytth  
       139 天前 via iPhone
    cd ../www/wwwroot/
    wonderfulcxm
        8
    wonderfulcxm  
       139 天前 via iPhone
    随便放吧,我就在根分区新建了一个 /web 目录,直观,也方便挂载分区,最主要小心 redhat 系 selinux 的权限设定。
    Cbdy
        9
    Cbdy  
       139 天前
    现在都用 docker ,放`/app`吧
    jiangzm
        10
    jiangzm  
       139 天前
    vm:
    /var/www/xxx
    /opt/app/xxx

    docker:
    /app/xxx
    jim9606
        11
    jim9606  
       139 天前   ❤️ 1
    如果按 FHS 规范的话是这样的:PREFIX 为 /usr/local (/usr 下通常是发行版软件包),主程序在$PREFIX/bin ,共享库在$PREFIX/lib ,配置文件在$PREFIX/etc ,数据在 /var/<appname>,日志在 /var/log/<appname>。如果还需要添加 systemd 服务单元,可以放 /etc/systemd/system 或者 /usr/local/lib/systemd/system 。
    不过这样放太散乱了,不如把所有东西放一个独立目录下方便备份和搬运。典型做法是都放 /opt/<appname>,下设 bin 、etc 、lib 、var 等等。
    LxnChan
        12
    LxnChan  
       139 天前
    我自己的站都是 /var ,但这玩意应该也没有强制要求吧,放在某个目录下主要考虑的可能是权限问题,方便统一改一类的
    Showfom
        13
    Showfom  
       139 天前
    Debian 默认安装 Nginx 和 Apache 2 以后的默认 web 目录都是 /var/www
    yaott2020
        14
    yaott2020  
       139 天前 via Android
    我一般放在 /www
    eason1874
        15
    eason1874  
       139 天前
    没用文件存储的我喜欢 /var/www

    用文件存储的我喜欢 /opt/www
    westoy
        16
    westoy  
       139 天前
    自己写的 web 程序我一般是新建一个用户然后放在这个用户的$HOME 下面
    darknoll
        17
    darknoll  
       139 天前
    /var/www
    jacyl4
        18
    jacyl4  
       139 天前
    放 /var/www ,因为这是 www-data 的 home 目录
    jiangzm
        19
    jiangzm  
       139 天前
    @jim9606 你这说的是软件
    richangfan
        20
    richangfan  
       139 天前
    创建一个 www 用户,设置 ssh 免密码登入,再创建 /home/www/production 、/home/www/test 、/home/www/work 三个目录分别放正式网站、测试网站、准备发布的网站
    brader
        21
    brader  
       139 天前
    这时候就要推荐一波我的 coreos docker 了
    https://github.com/wenshunbiao/docker
    10935336
        22
    10935336  
       139 天前
    我都是放 /home/wwwroot
    bkkkd
        23
    bkkkd  
       139 天前
    习惯性的创建一个 /data 目录自己管自己的.
    datou
        24
    datou  
       139 天前
    我是习惯性新建 /project
    rainysia
        25
    rainysia  
       139 天前
    习惯搞个 /home/www 单独开个 www-data 给它。
    kkocdko
        26
    kkocdko  
       139 天前 via Android
    /home/服务的名字
    seakingii
        27
    seakingii  
       139 天前
    @bkkkd 同样的习惯。。。
    seakingii
        28
    seakingii  
       139 天前
    我习惯建一个 /data 目录 ,自己的东西都放在里面,尽量不要和系统的目录缠在一起

    /data/soft/soft1
    /data/soft/sof2

    /data/web/web1

    /data/backup/database
    /data/script/script1.sh
    IvanLi127
        29
    IvanLi127  
       139 天前 via Android
    服务程序我习惯放 /srv/下,纯静态页面放 /var/www 。不过现在我直接跑 docker 了,哈哈哈哈
    dingdangnao
        30
    dingdangnao  
       139 天前 via iPhone
    用的 oneinstack 默认放到 /data/wwwroot/ 感觉 也挺好?
    akira
        31
    akira  
       139 天前
    新建一个 /data/ 目录,非系统的东西放这下面
    lululau
        32
    lululau  
       139 天前
    /Appplications
    sutra
        33
    sutra  
       139 天前
    man hier
    fancy2020
        34
    fancy2020  
       139 天前
    q1angch0u
        35
    q1angch0u  
       139 天前
    我一般选择多挂一个硬盘,挂载到 /data0 ,扔里边
    adoal
        36
    adoal  
       138 天前
    “每种情况的人我都见过”,因为很多人的主要职责是做开发,顺便兼做部署实施……所以往往并没有系统学习过 FSH 之类的规范,而是会根据自己(个人以及所在团队)的经验发明一些目录布局。

    楼上有盆友提到,按 FSH 放太散乱了,不如把所有东西放一个独立目录下方便备份和搬运。的确这也是一个很实用的经验。但是这经验通常也是来自兼做部署实施的开发人员的经历。而从专职运维的人的视角来看,虽然这样做本身没什么大问题,但会“把所有东西放一个独立目录下”的实施案例,通常在目录结构的 owner 和 mode 设置上不太讲究,比如在系统里开一个可以登录的交互帐户,同时用做安装文件和启动 daemon 的功能,装好的文件 owner 就是这个帐户……而你仔细观察一下发行版打包的 rpm 和 deb ,通常装好的文件里不会在运行时修改的内容(放到 bin/sbin 里的程序、放到 share 里的静态数据、放到 etc 里的配置) owner 是 root ,启动 daemon 用的 euid 是专用帐户(比如 Debian 系发行版启动 Apache 和 Nginx 用的是 www-data ),只有运行时会修改的数据,其 owner 才是运行 daemon 的用户。这样的好处是,如果 daemon 因为有爆栈之类 bug 被 exploit 了,至少可以保证入侵者不会篡改配置、静态数据甚至在可执行程序里埋入木马。所以建议,不论用什么样的目录布局,最好是把运行时不会改的文件的 owner 和启动 daemon 用的 euid 设置为不同用户。发行版打包用的规范,其实是做底层基础设施的人根据经验总结的最佳实践。做业务系统应用开发的场景跟基础设施不太一样,但有些是可以借鉴的。
    liuxu
        37
    liuxu  
       138 天前
    主要是 linux 这么多年发展,从不规范到规范不断发展导致的

    a: 目前的 FHS 标准是 /srv 为 web 目录,/var 存放软件产生的数据,如日志,邮件收信,/etc 运行时配置文件,/usr 软件和软件自己的文本文件
    b: 上面标准制定之前的标准:/var/www 为 web 目录,/var/log 日志,/var/mail 邮件,/var/lib 数据库等数据文件

    rhel 系目前用 a ,至少 7/8 是,deb 系惯用 b ,少部分系统安装 nginx 会使用 /usr/local/nginx/www 目录,也就是软件自身目录

    普通用户没权限时,/home/username 下自己制定

    各种软件文档对普通用户的“标准”方式是为软件创建一个带 /home 目录的用户名,然后文件存放在 /home/软件用户名下

    /data 放数据猜测是用 windows 用户没系统学习 linux 目录划分,百度了个 linux 新手教程直接开始用 linux ,然后把 /比想象成 windows 的 d: e:磁盘分区,认为 /data 就是 e:\data ,用的人多了也就经常在各种“教程”看到了


    原始 linux 规范,/usr 为软件目录,后面 FHS 规定 /opt 为第三方大型软件包安装目录(特别是桌面环境的软件),/opt 有点 windows 的 d:\Program Files 味道,目前看 chrome ,libreoffice 等会使用 /opt


    https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
    levinit
        38
    levinit  
       138 天前 via iPhone
    /srv/http
    libook
        39
    libook  
       138 天前
    POSIX 对文件系统的目录划分有一个大致的分类,你可以根据实际情况来确定属于哪个分类就可以了。

    从系统运行方面来看,无非就是权限问题,这块只要你的上级所有目录都满足权限要求就可以。

    从管理方面来说,不论怎么放,只要能形成标准、文档、制度就可以了。
    julyclyde
        40
    julyclyde  
       138 天前
    @adoal 嫌弃 fhs 乱的人都是不打包的
    把文件名记到 rpmdb 里就不在乎“一个套件的各个部分到处放”了
    adoal
        41
    adoal  
       138 天前
    @julyclyde 贵互联网行业大厂才有专门为业务开发团队需要的基础设施来搞打包的人。鄙各行各业信息化领域,都是(不明学历不明经验不明素养不明薪酬的)开发人员兼职到甲方生产环境做实施的(而且并不是 NetFlix 那种开发有责任做运维),业务功能导向的绩效评定,做规范打包(以及实现业务功能开发外的其它活)是不会额外拿钱的,所以所有东西都扔到一个目录下拷走是性价比最高的选择。
    julyclyde
        42
    julyclyde  
       138 天前
    @adoal 贵互联网都是 rpm 里放一个 tar+install.sh 的山寨……
    adoal
        43
    adoal  
       138 天前
    @julyclyde 那为啥要用 rpm
    julyclyde
        44
    julyclyde  
       138 天前
    @adoal 不知道啊,而且还是后来才有的,以前就是 tar 而已
    adoal
        45
    adoal  
       138 天前
    @julyclyde 所以其实贵互联网行业大部分也不在乎这些事是吧……我只知道阿里内部有专门做打包的团队,早些年对 CentOS 5 依赖很大的时候有相当一些软件 backport 过去放到内网的 repo 上用 yum 安装。
    zxCoder
        46
    zxCoder  
       137 天前
    /home/xxx/data/
    cco
        47
    cco  
       137 天前
    数据盘挂哪里就放哪里。
    24owls
        48
    24owls  
       135 天前
    如果目标是尽量遵循 FHS 和发行版的约定的话,只读的放在 /usr 或者 /usr/local 或者 /opt/<package>,会变的放在发行版放 www 目录的地方(如 /var/www 或 /srv/www ),只用在本机上的配置放在 /etc

    拿 wordpress 举个例子,如果每次部署都在本地测试后再推送到服务器,那么程序文件打包安装到 /usr 或者 /usr/local 目录,数据文件和数据库放到 /var/www 或 /srv/www 目录。相反,如果需要用 wordpress 在线升级在线安装插件等,那么整个 wordpress 都算作数据放到 /var 目录。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2450 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:11 · PVG 14:11 · LAX 23:11 · JFK 02:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.