环境差异坑:开发本地跑得好,上线就报错。常见于Python版本不一致、系统库缺失(如libpng-dev)、时区或locale配置不同。别信“我这没问题”,上线前必须用与生产一致的镜像或容器验证,哪怕多花半小时拉一个docker build测试。
权限失控坑:习惯sudo su进root操作,结果脚本里混用root和普通用户写文件。部署后nginx提示“Permission denied”访问log目录,排查三小时才发现www-data无权读取被root创建的缓存目录。坚持最小权限原则——web服务用专用用户运行,日志目录提前chown,绝不chmod 777。
配置硬编码坑:把数据库密码、API密钥直接写进代码或Nginx配置,提交到Git还带注释“临时调试用”。一旦仓库泄露或被内网扫描,服务器瞬间变肉鸡。所有敏感项必须通过环境变量注入,并在部署脚本中严格校验env是否齐备,缺一即失败退出。
日志静默坑:上线后没开access_log或error_log路径错误,系统出问题时屏幕一片空白。更糟的是用echo代替logger,导致日志无法按时间排序、无法切割、无法对接ELK。统一用systemd-journald托管服务日志,配合rsyslog转发,每行输出必须含ISO8601时间戳和模块标识。

AI渲染的图片,仅供参考
回滚失能坑:改完配置忘备份原文件,紧急回退只能靠记忆重写。某次Nginx重载失败,全站502,因旧conf已被覆盖,重启服务反而雪上加霜。自动化部署必须包含原子化备份——每次修改前自动mv nginx.conf nginx.conf.20240615_1423.bak,且保留最近3个版本,回滚命令一键生效,无需SSH手动翻找。