在日常开发工作中,终端模拟器的性能直接影响开发体验。传统的 iTerm2 虽然功能丰富,但在处理大量输出时偶有卡顿;Alacritty 虽然性能出色,但 macOS 集成度不够理想。Ghostty 作为 Mitchell Hashimoto(HashiCorp 创始人)用 Zig 语言开发的新一代终端模拟器,在性能和原生体验之间取得了较好的平衡。
Ghostty 的核心优势:
确认系统已安装 Homebrew:
bashwhich brew
写这篇文章的起因很简单——我受够了在 .bashrc 里维护一堆 JAVA_HOME_8、JAVA_HOME_11 的日子。每次接手一个老项目要切 Java 8,改完配置还得 source 一下,偶尔忘了重开终端,构建失败查半天才发现是版本没切过来。
如果你也经历过这些,这篇文章应该能帮到你。
先看看我原来的 .zshrc(macOS)是怎么管理多版本 JDK 的:
bash# JDK Config - 手动管理的噩梦
JAVA_HOME_8=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
JAVA_HOME_11=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
JAVA_HOME_17=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
export JAVA_HOME=$JAVA_HOME_8
alias jdk8="export JAVA_HOME=$JAVA_HOME_8 && java -version"
alias jdk11="export JAVA_HOME=$JAVA_HOME_11 && java -version"
alias jdk17="export JAVA_HOME=$JAVA_HOME_17 && java -version"
CLASS_PATH="$JAVA_HOME/lib"
PATH="$PATH:$JAVA_HOME/bin"
问题很明显:
后来我切换到 SDKMAN!,上面这些问题基本都解决了。
以现在用的 Nginx Proxy Manager 2.11.3 为例,Web 管理界面只提供:
没有界面化的:
所以,要在 同一个域名 上做“主服务 + 降级服务容灾”,只能用两类办法:
/data/nginx/custom/http_top.conf 定义 upstream(一次性手工)proxy_pass http://my_backend_servers; 引用换句话说:目前没有“纯点点点、不写配置片段”的图形化降级方案,你现在这套就是标准的高级用法。
主题:基于 Nginx Proxy Manager 的 Docker 容器做同域名多服务降级容灾
目标:同一个域名指向两个后端服务,主服务不可用时自动切换到降级服务(Failover),无需人工干预。
example.com主服务 A,例如 124.xxx.xxx.120:13210降级服务 B,例如 43.xxx.xxx.126:8001面向场景:你在家里的 Windows 笔记本(Surface Laptop 2)上运行若干 Docker 服务(例如端口 3210、5432、8181),家中宽带在 大内网/NAT 后,没有公网 IP;你已有一台有公网 IP 的 云服务器,并已部署 Nginx Proxy Manager(NPM)。目标是通过 frp 建立安全隧道,让手机在 5G 外网也能访问这些服务。
NAT:网络地址转换,将大量私网地址通过少量公网地址上网,导致内网设备无法被公网主动访问。
text手机/外网 → 域名(Nginx Proxy Manager, 云) → 127.0.0.1:远程端口(frps) ↓ frp 隧道 家中 Windows: 本地端口 (Docker 服务)
隧道:指通过中间节点转发建立的端到端连接通道,常用于穿透 内网 或 防火墙。
TOML:一种人类友好的配置文件格式,键值以 key = "value" 表示,层级清晰、类型明确。