明白了,你想基于 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️⃣ 配置和权限
-
配置文件
-
放在
/opt/myproject/config/或/etc/myproject/ -
权限设置:
sudo chown root:root /opt/myproject/config sudo chmod 600 /opt/myproject/config/*.conf -
避免普通用户修改关键配置
-
-
运行用户
-
不要用 root 运行服务
-
创建专用用户:
sudo useradd -r -s /bin/false myproject sudo chown -R myproject:myproject /opt/myproject
-
-
日志
- 放在
/opt/myproject/logs/或/var/log/myproject/ - 配合 logrotate 做日志轮转
- 放在
4️⃣ Nginx 部署方案
如果你的项目是 Web 项目:
-
静态文件 →
/srv/myproject/www -
应用服务 →
/opt/myproject/bin/start.sh -
Nginx 配置 →
/etc/nginx/sites-available/myproject.conf -
启用配置:
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、日志和数据路径都标清楚,直接可用于生产环境。
你希望我画吗?