🤯 当本地开发遇上生产环境:一个Shell脚本的救赎

创作背景

作为这套脚本的作者,我必须坦白:写这些脚本的动机完全源于一次惨痛的调试经历。那是一个周五晚上,我面对着:

  • 生产环境的HTTPS接口
  • 本地的HTTP服务
  • 令人抓狂的CORS错误

在尝试了各种临时方案后,我决定打造一套终极解决方案。(文末附仓库地址)

设计哲学

这套脚本遵循三个核心原则:

  1. 自动化一切

    • 自动安装依赖(openssl/socat)
    • 自动生成证书
    • 自动清理资源
  2. 开发者友好

    • 清晰的错误提示
    • 完善的帮助文档
    • 一键式执行
  3. 跨平台兼容

    • 支持Linux/macOS
    • 考虑Windows(WSL)
    • 自动识别包管理器

技术细节

这套脚本包含以下关键技术实现:

  1. 自动依赖检测与安装
bash 复制代码
# 检测并安装openssl
if ! command -v openssl &> /dev/null; then
    install_openssl
fi

# 检测并安装socat
if ! command -v socat &> /dev/null; then
    install_socat
fi
  1. 跨平台hosts文件管理
bash 复制代码
# 自动识别操作系统
if [[ "$OSTYPE" == "linux-gnu"* || "$OSTYPE" == "darwin"* ]]; then
    hosts_path="/etc/hosts"
elif [[ "$OSTYPE" == "cygwin" || "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
    hosts_path="C:\Windows\System32\drivers\etc\hosts"
fi
  1. 长期有效的自签名证书
bash 复制代码
# 生成10年有效期的证书
openssl req -new -key server.key -x509 -days 3653 -out server.crt \
    -subj "/CN=portal-content-nexus-uat.derbysoft-test.com"
  1. 资源清理机制
bash 复制代码
# 捕获中断信号进行清理
trap '{
    $path/manage-hosts.sh remove "$domain"
    trap - SIGINT
    trap - EXIT
}' SIGINT

实用技巧

这套脚本的一些隐藏功能:

  1. 长期证书:生成的证书有效期10年(3653天)
  2. 智能清理:Ctrl+C时会自动移除hosts记录
  3. 防重复:避免添加重复的hosts条目

创作心得:一个懒鬼的自我修养

作为一个资深懒人,写这些脚本纯粹是因为:

  1. 不想每次调试都改hosts - "127.0.0.1 my-production-site.com" 这种命令打第三次时,我的手指已经开始罢工抗议了
  2. 不想听浏览器唠叨CORS - 它就像个啰嗦的管家,整天"这个不行""那个不允许",烦死了
  3. 不想装孙子求运维 - "大哥,能帮我配个证书吗?"这种话说过一次后,我就决定自己当大哥

这套脚本的精髓在于:

  • 能自动的绝不手动 - 我连泡面都懒得煮,怎么可能手动安装openssl?
  • 能偷懒的绝不勤快 - 证书有效期10年?不,应该设置100年,反正到时候这代码早没人用了
  • 能甩锅的绝不背锅 - 脚本出错时会打印清晰的错误信息,这样用户就知道是他们自己用错了

这就是一个懒人为了更懒而创造的解决方案。

GitHub仓库: github.com/SteamedBrea...

相关推荐
JosieBook20 小时前
【Vue】09 Vue技术——JavaScript 数据代理的实现与应用
前端·javascript·vue.js
pusheng202520 小时前
算力时代的隐形防线:数据中心氢气安全挑战与技术突破
前端·安全
起名时在学Aiifox20 小时前
前端文件下载功能深度解析:从基础实现到企业级方案
前端·vue.js·typescript
IT 乔峰21 小时前
脚本部署MHA集群
linux·shell
2501_9418779821 小时前
从配置热更新到运行时自适应的互联网工程语法演进与多语言实践随笔分享
开发语言·前端·python
云上凯歌21 小时前
01 ruoyi-vue-pro框架架构剖析
前端·vue.js·架构
华仔啊1 天前
JavaScript 如何准确判断数据类型?5 种方法深度对比
前端·javascript
毕设十刻1 天前
基于Vue的迅读网上书城22f4d(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
程序员小寒1 天前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
开发语言·前端·javascript·面试
爱健身的小刘同学1 天前
Vue 3 + Leaflet 地图可视化
前端·javascript·vue.js