明白了,你想基于 Linux 文件系统结构和最佳实践,找到部署一个项目的合理方案。我们可以从几个核心原则出发:安全、可维护、可升级、与系统隔离


1️⃣ 项目目录选择

根据 FHS(Filesystem Hierarchy Standard):

目录是否适合项目部署说明
/opt✅ 推荐放置第三方软件或自研项目,目录独立清晰,方便管理和升级。例如 /opt/myapp
/srv✅ 推荐专门存放对外服务的数据,比如网站、FTP 服务等。例如 /srv/myapp
/usr/local⚠ 可用主要用于手动编译安装的软件,也可放项目,但容易与系统工具混淆。
/home⚠ 可用可以放项目,但更适合用户个人开发环境,不适合生产部署。
/var❌ 不推荐/var 用于运行时可变数据(日志、缓存、数据库),不适合作为项目主目录。
/tmp❌ 不推荐临时目录,重启会清空,不稳定。

结论: 生产环境部署项目建议选择:

  • /opt/myproject → 项目文件、可执行程序、依赖
  • /srv/myproject → 对外服务内容(静态文件、网页内容)

2️⃣ 目录结构建议

假设部署一个 Web 项目(示例 /opt/myproject):

/opt/myproject/
├── bin/          # 可执行文件或启动脚本
├── config/       # 配置文件(nginx、数据库、应用配置)
├── logs/         # 项目日志
├── data/         # 持久化数据
├── lib/          # 自带依赖库
└── tmp/          # 临时文件

如果有 Web 服务静态内容,可以在 /srv/myproject

/srv/myproject/
├── www/          # 网站静态文件(html/css/js)
└── uploads/      # 用户上传文件

3️⃣ 配置和权限

  1. 配置文件

    • 放在 /opt/myproject/config//etc/myproject/

    • 权限设置:

      sudo chown root:root /opt/myproject/config
      sudo chmod 600 /opt/myproject/config/*.conf
    • 避免普通用户修改关键配置

  2. 运行用户

    • 不要用 root 运行服务

    • 创建专用用户:

      sudo useradd -r -s /bin/false myproject
      sudo chown -R myproject:myproject /opt/myproject
  3. 日志

    • 放在 /opt/myproject/logs//var/log/myproject/
    • 配合 logrotate 做日志轮转

4️⃣ Nginx 部署方案

如果你的项目是 Web 项目:

  1. 静态文件/srv/myproject/www

  2. 应用服务/opt/myproject/bin/start.sh

  3. Nginx 配置/etc/nginx/sites-available/myproject.conf

  4. 启用配置

    sudo ln -s /etc/nginx/sites-available/myproject.conf /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl reload nginx

5️⃣ 总结最佳实践

  • 代码与依赖/opt/myproject
  • 静态文件/服务内容/srv/myproject
  • 配置文件/etc/myproject/opt/myproject/config
  • 日志/var/log/myproject/opt/myproject/logs
  • 运行用户 → 非 root 专用用户
  • Nginx/系统服务/etc/nginx/sites-available + /etc/systemd/system/

✅ 好处:

  • 项目与系统文件隔离
  • 便于升级和维护
  • 安全,最小化 root 权限暴露

如果你愿意,我可以帮你 画出一个完整的部署目录树和启动流程图,把 /opt/srv、Nginx、日志和数据路径都标清楚,直接可用于生产环境。

你希望我画吗?