博客 / 詳情

返回

2025年了,用 Homebrew 搞 Web 開發,還行嗎?

Homebrew 可以説是 macOS 和 Linux 上的“裝機必備”了,裝個命令行小工具特別方便,一句 brew install 就能搞定,確實好用。

但當你想用它來搭建和管理正經的、多個項目共存的 Web 開發環境(比如需要 Nginx、PHP、各種數據庫)時,麻煩就開始了。用它幹專業活,真有點不太夠用。

環境亂成一鍋粥,老得看“醫生”

圖片
誰沒跑過 brew doctor 呢?“Your system is ready to brew.” 這話聽起來挺美,但也説明 Homebrew 會動你的系統設置。不管是以前裝到 /usr/local,還是 Apple Silicon 電腦上的 /opt/homebrew,它都會改你的系統 PATH。這導致啥呢?你 brew install git 時,很可能會覆蓋掉系統自帶的 Git。
裝個 Python 吧,系統裏立馬多出好幾個版本。這種版本混亂是很多奇怪 Bug 的源頭,有時候排查這些問題花的時間,比寫代碼修 Bug 還長。

服務更新太坑爹,容易出“事故”

brew services 啓停服務倒是挺方便,Nginx、MySQL、PHP-FPM 都能管。但它的“貼心”升級就很讓人頭疼。比如,你美滋滋地敲了個 brew upgrade,把所有東西更新了。啪!你的本地項目突然崩了…… 費勁一查,原來是 Python 從 3.7 默默升到了 3.14,某個擴展不兼容了;或者 MySQL 來個不兼容的大版本更新,數據庫都起不來了。這種“好心辦壞事”的服務中斷,Homebrew 可沒少幹。對正經搞開發的人來説,這種意外停工真的挺煩人。

切版本?只能單線程幹活!(這是硬傷)

用 Homebrew 搞 Web 開發,最大痛點就是這個。現實開發怎麼可能只搞一個項目?老項目可能死抱着 Python2.x,新項目都用上 Python 3.14 了。客户的服務器跑 MariaDB 10.6,你自己項目又想試試 PostgreSQL 16。用 Homebrew 咋辦?答案是:痛苦地切換。你只能頻繁地用 brew switch 或者更底層的 brew link/unlink 來換版本。操作繁瑣不説,還容易出錯。最關鍵的是,它沒法讓不同版本的服務同時運行!你不能一邊跑需要 Python2.x 的項目,一邊測試用 Python 3.14 的新項目。搞現代開發還只能單開,這真的有點落伍了。

結論: Homebrew 裝點命令行工具是真方便,但要拿它當專業的 Web 服務管家? 真有點力不從心。如果你是macOS 12的用户,那對不起,Homebrew已經把你拋棄了。

那… 還能用啥?

既然 Homebrew 搞專業環境有點掉鏈子,大家自然會找別的工具。主要分兩類:更“極客”的命令行工具,和更“便捷”的打包軟件。

命令行黨的選擇 (MacPorts, Nix)

MacPorts

走的是完全隔離路線,所有東西裝自己地盤(/opt/local),不污染系統,這確實解決了 Homebrew 的“環境亂燉”問題。但是缺點也很明顯:安裝慢(很多東西要自己編譯),軟件數量比 Homebrew 少點,佔用空間也更大。解決了老問題,代價是新的麻煩。

Nix

圖片

想法很牛,講究“純函數式”、“可復現”,隔離性和版本管理能力是頂級。理論上是完美的。
但問題在於:學習難度賊高!它的思路和操作跟你熟悉的包管理器差別巨大。想用它,你得花大把時間重新學一套東西,對只想高效搞 Web 開發的我們來説,真心覺得太折騰。

小結: 這些工具很強,但對我們日常搞 Web 開發來説,感覺要麼太慢(MacPorts),要麼太難學(Nix)。

老式圖形化套裝 (MAMP, XAMPP)

很多老司機入門那會兒,都靠 MAMP 或者 XAMPP。一鍵安裝,Apache/MySQL/PHP 全齊活,新手友好度滿分。
圖片

不過現在看,它們的問題也挺明顯

  • 版本老舊切換難: 帶的軟件版本更新不及時,想換個版本?費老勁了,經常得下載個完全不同的安裝包。
  • 又大又慢: 為了保證兼容啥環境都往裏塞,結果是軟件又臃腫,性能也不太理想。
  • 還得配命令行工具: 你最後肯定還得裝 Redis、Node.js 之類的東西,這些 MAMP/XAMPP 不管,你還得用回 Homebrew…… 環境就割裂了。
  • 跟真實環境差太遠: 尤其是服務器現在普遍用 Nginx + PHP-FPM 這種組合,這些套裝裏的 Apache 模式配置就差得多了。

小結: 它們確實簡單省事,但代價是犧牲了現代開發必需的靈活性和專業性。

更好的工具?試試 ServBay?

難道只能在“複雜的靈活”(命令行工具)和“僵化的簡單”(圖形套裝)之間二選一嗎?也不一定。
這裏想提一個叫 ServBay 的工具。我深度用了一段時間,感覺它在設計上確實想解決上面這些痛點,挺有意思的。

真·多版本共存 + 一鍵切換

這是 ServBay 最拿手的功能。你可以裝多個獨立的 Python(從 2.7,3.5 到 3.14)、MariaDB(從 10.4 到 12.0)、PostgreSQL 版本。最厲害的是,這些不同版本的服務可以同時運行!如果你是全棧開發者,會多種語言,那你更應該裝一個 ServBay。

它不僅支持Python,還支持Node.js、Java、Golang,甚至你想在macOS上跑ASP.NET 4.x古董項目,沒問題,ServBay 一樣支持。它就像溺愛孩子的媽媽一樣,包容你的各種想法,默默地給你提供更多的支持。
圖片

你可以想一想

項目 A 的 Nginx 用 Python 2.7。
項目 B 的 Nginx 用 Go 1.22 。
項目 C 的 Apache 用 Python 3.14。沒錯,ServBay還支持自定義端口,兩個 Web 服務器一起跑沒問題。

各自在瀏覽器裏輸入項目地址,各跑各的,互不影響。

在 ServBay 清爽的管理界面點幾下開關,就能控制每個版本服務的啓停。這種多版本並行運行的能力,才配叫現代化開發環境。

沙盒隔離,不搞亂系統

ServBay 的所有服務、配置、數據,都老老實實待在自己地盤裏(/Applications/ServBay)。它絕對不碰 /usr/local/opt/homebrew,不改系統 PATH,運行服務也不需要 sudo 權限。效果就是:你的系統乾乾淨淨。
ServBay 和 你的其他程序和平共處,用 ServBay 管 Web 服務(Nginx,PHP/Node.js/Python/Go,DB),一點不衝突。

速度不錯 (對比 MAMP 和 MacPorts)

不像 MAMP 那麼臃腫,也不像 MacPorts 編譯到天荒地老,ServBay 提供的是針對 Apple Silicon (M1/M2/M3) 和 Intel 芯片優化好的預編譯包。安裝飛快,啓動速度和運行性能都挺好,不比你自己手調出來的環境差。

GUI + CLI 雙管齊下 (結合兩邊優點)

ServBay 帶一個設計得不錯的 macOS 原生界面,管理服務、切版本、看日誌、改配置都挺直觀。但它也知道開發者愛用命令行,所以也提供了強大的 servbay-cli 工具。像 .servbay.config 命令來實現項目級的 版本控制。算是兼顧了圖形化的易用性和命令行的靈活高效。

開發順手的額外功能

圖片
ServBay 不只是 Web 服務器三件套,它更像一個本地開發工作站,還打包了:

DNS 服務: 支持真實/虛擬域名無縫切換,自動簽發SSL證書,大大降低開發成本,並有效避免域名暴露帶來的安全風險。
數據庫:支持多個數據庫實例,滿足不同的開發需求。
自動 HTTPS 證書: 一鍵給本地站點開 HTTPS,方便測試。
郵件服務器: 支持 SMTP 和 POP3 協議,STARTTLS 和 SSL/TLS 加密可立即啓用,保障郵件安全
Redis & Memcached: 同樣支持同步運行,一鍵開關。這些功能都是解決開發中的小痛點,挺實用的。

所以,2025年怎麼選?

總結一下我們的探索:
Homebrew:工具神器,服務苦手。裝小工具首選,管專業 Web 服務易衝突。
純命令行方案 (MacPorts/Nix):牛是牛,就是累。隔離性雖好,但要麼慢要麼難學,不夠大眾化。
圖形化套裝 (MAMP/XAMPP):簡單是簡單,就是笨。快裝省心,但版本舊、配置虛、不靈活。

ServBay 的出現,似乎是想找到一箇中間點,在易用性、隔離性、性能和多版本支持之間取了個平衡。

我的看法:

如果你是 DevOps 大佬,追求絕對的可復現和控制力,Nix 依然值得你研究。
如果你是專搞 Python/R 的數據科學/ML 同學,Conda/Miniconda 可能更對路。
對於大多數在 macOS 上做 Web 開發的前端、後端、全棧工程師來説, 如果你厭倦了 Homebrew 的版本衝突和“單開”限制,也不滿足於 MAMP/XAMPP 的老舊和脱節,那 ServBay 提供的這套開箱即用、多版本共存、不污染系統的方案,算是當前市面上對“本地開發體驗”的一個不錯的解法。它能省下不少在環境配置上折騰的時間。

用了 ServBay 之後,最爽的就是能同時跑不同語言版本的項目,跟 brew doctor 徹底説拜拜。感覺 macOS 上的本地開發環境,總算能舒坦一點了。我接單的速度都比別人快了。

user avatar shishangdexiaomaju 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.