在单台服务器上同时部署 Web 前端(静态资源)和后端(API/业务逻辑)应用,虽然成本低、架构简单,但需要特别注意安全隔离、性能瓶颈、运维复杂度和扩展性。以下是关键注意事项:
一、架构与部署方式
-
反向X_X统一入口
- 使用 Nginx/Apache 作为反向X_X,将请求按路径分发:
location /api/ { proxy_pass http://localhost:3000; } location / { root /var/www/frontend; try_files $uri $uri/ =404; } - 避免前后端直接暴露端口,降低攻击面。
- 使用 Nginx/Apache 作为反向X_X,将请求按路径分发:
-
进程管理
- 使用
systemd或PM2(Node.js)等工具管理服务,确保崩溃自动重启、开机自启。 - 示例 systemd 配置需设置
User=为非 root 用户,限制权限。
- 使用
-
环境隔离
- 前后端尽量运行在不同用户下(如
www-data用于 Nginx,appuser用于后端)。 - 数据库连接凭据通过环境变量注入,严禁硬编码在代码中。
- 前后端尽量运行在不同用户下(如
二、安全加固
-
最小权限原则
- 文件目录权限:
755目录 +644文件;上传目录设为750并禁止执行脚本。 - 数据库只开放本地访问(
127.0.0.1),禁用远程 root 登录。
- 文件目录权限:
-
HTTPS 强制启用
- 使用 Let’s Encrypt 免费证书,配置自动续期(
certbot)。 - HSTS 头增强安全性:
Strict-Transport-Security: max-age=31536000; includeSubDomains
- 使用 Let’s Encrypt 免费证书,配置自动续期(
-
防攻击措施
- Nginx 限流:
limit_req_zone防止暴力破解/DDoS。 - 关闭服务器信息泄露:
server_tokens off; - 定期更新系统包:
apt update && apt upgrade -y
- Nginx 限流:
三、性能与资源优化
-
静态资源缓存策略
- 前端构建产物(JS/CSS/图片)设置长缓存(
Cache-Control: max-age=31536000, immutable)。 - HTML 页面短缓存(
no-cache),支持热更新。
- 前端构建产物(JS/CSS/图片)设置长缓存(
-
数据库优化
- 单库场景下:合理设计索引、启用慢查询日志、定期清理冗余数据。
- 若数据量大,考虑主从复制提前规划(即使当前单机)。
-
资源监控
- 安装
htop、netstat、iostat实时观察 CPU/内存/IO。 - 使用 Prometheus + Grafana 或简单的 shell 脚本告警(如磁盘 >80% 时通知)。
- 安装
四、运维与可维护性
-
日志集中管理
- 前后端日志分开输出到不同文件(如
/var/log/app/backend.log,/var/log/nginx/access.log)。 - 使用
logrotate自动轮转,避免日志占满磁盘。
- 前后端日志分开输出到不同文件(如
-
备份策略
- 数据库每日快照(
mysqldump/pg_dump),保留最近 7 天。 - 前端静态资源同步至对象存储(如 OSS/S3)或 Git 仓库。
- 数据库每日快照(
-
CI/CD 简化流程
- 用 GitHub Actions/GitLab CI 自动化构建→测试→部署(SSH 推送或 rsync)。
- 蓝绿部署需谨慎:单机场景可用“滚动更新”(先停服务→替换代码→启动)。
五、潜在风险预警
| 风险点 | 应对方案 |
|---|---|
| 单点故障 | 准备云服务器快照 + 快速重建脚本 |
| 流量突增导致宕机 | 配置 Nginx 限流 + 自动扩容预案 |
| 依赖冲突(前后端版本) | Docker 容器化隔离(推荐长期方案) |
| 安全漏洞未及时发现 | 每月扫描一次(lynis, trivy) |
✅ 建议升级方向
若未来有增长预期,尽早规划:
- 容器化:Docker Compose 一键部署多服务,解耦环境依赖。
- 微服务拆分:当模块耦合度高时,逐步拆分为独立服务。
- 云原生迁移:利用 Kubernetes 实现高可用(HA)和弹性伸缩。
💡 最后提醒:单机部署适合 MVP、内部工具或小流量场景。生产环境务必做好监控、备份和安全基线,切勿因“暂时够用”而忽视隐患。
CLOUD技术笔记