网易首页 > 网易号 > 正文 申请入驻

7MB干翻200MB:一个程序员周末把XAMPP拆了重写

0
分享至


200MB的安装包,实际用到的功能不到10%。这是每个在Windows上搭过本地开发环境的程序员,都咽下去过的哑巴亏。

印尼开发者Taqin三个月前算了笔账:XAMPP下载包200MB,装完更大,但他只用到Apache+MariaDB+PHP+phpMyAdmin。PHP 8.5.0发布四个月后,XAMPP才跟进。Apache崩溃时控制面板直接卡死,因为pid文件没清理。

他决定自己写一个。周末开工,纯Go语言,最终成品7MB。

「我要的是包管理器,不是安装器」

Taqin的设计哲学很直白:控制面板本身要极小,服务按需下载、本地缓存,从不捆绑用不到的东西。GoAMPP的核心是一个单二进制文件,编译时加上-ldflags="-H windowsgui -s -w",去掉控制台窗口,剥离调试符号,压到7MB。

GUI没选Electron,没用Webview,甚至没碰CGO。他用了windigo——一个纯Go的Win32控件绑定库。按钮、进度条、日志框,全是原生Windows组件。

二进制内部嵌着一个DownloadCatalog,按服务名索引。每个条目包含下载URL、安装目录、可选的StripTop字段(用于处理顶层套娃的压缩包),以及PostInstall钩子。Apache的条目长这样:

版本号精确到编译器版本,URL指向ApacheLounge的VS18构建,PostInstall负责改SRVROOT、ServerName、开mod_cgi。

点击Start时,如果二进制文件不存在,流程自动触发:查目录→开goroutine保UI响应→流式下载到.part文件→原子重命名→解压到bin/目录。zip-slip防护是硬编码的:任何解析后逃出目标路径的条目,直接拒绝。

进度条30Hz刷新,日志1Hz。因为多行Edit控件的WM_SETTEXT每写一行都是完整往返,写太频繁会卡。

那个吃掉一整晚的Apache bug

Taqin在复盘帖里专门留了一节讲这个。Apache httpd的Windows版本有个历史包袱:默认配置里SRVROOT写死成解压时的绝对路径,ServerName没设,mod_cgi默认关闭。他的PostInstall钩子得逐行扫描httpd.conf,正则替换这三处。

更隐蔽的是pid文件问题。Apache崩溃时.pid文件残留,下次启动会报"already running"。XAMPP控制面板在这里会挂死,因为没做超时处理。Taqin的解法:启动前强制删.pid,启动后轮询检测端口而不是解析pid文件。

「Win32的CreateProcess和Unix的fork+exec完全是两种生物。」他在帖子里写。Go的os/exec包在Windows下会隐式创建控制台窗口,即使父进程是windowsgui。得显式设置SysProcAttr.HideWindow,或者直接用syscall.CreateProcess。

MariaDB的坑在初始化。mariadb-install-db.exe第一次运行要弹控制台窗口,即使主程序是GUI。Taqin最后用了条件编译:Windows下单独一个包处理这类需要短暂暴露控制台的子进程。

seventeen个脚手架,四个运行时

GoAMPP的服务清单比XAMPP长得多。Apache/Nginx二选一,MariaDB/PostgreSQL二选一,Redis、PHP、phpMyAdmin、Adminer。语言运行时四个:Node.js、Python、Go、Java。

脚手架是Taqin后来加的。十七个框架的初始化模板:Express、Django、Flask、Laravel、Spring Boot……选完技术栈,点Scaffold,自动下运行时、配虚拟主机、写环境变量。

缓存机制是懒加载+永久保留。第一次下载的PHP压缩包存在downloads/,下次切版本时直接解压。Taqin的版本切换设计:bin/php/8.3.6/和bin/php/8.4.0/并存,改个软链接就能切,但Windows软链接需要管理员权限,最后用了junction点。

体积对比很刺眼。GoAMPP本体7MB,首次启动后按需下载,典型配置(Apache+MariaDB+PHP+phpMyAdmin)全部缓存完约150MB。XAMPP安装包200MB起步,且每次大版本得全量重装。

「没有Docker,没有WSL」

这个副标题是Taqin刻意强调的。他的目标用户很明确:公司电脑锁了Hyper-V、Docker Desktop装不上、WSL2需要BIOS开虚拟化但IT部门不给权限的Windows开发者。

纯原生Win32的二进制,意味着不需要任何容器层。Apache跑在Windows服务管理器里,PHP是原生DLL,MariaDB用Windows命名管道通信。性能损耗为零,调试时用Process Monitor能看到完整的系统调用链。

代价也有。windigo的文档稀少,Taqin翻了不少Win32 API原始文档。ProgressBar的平滑动画要自己算增量,因为原生控件不支持中间值。右键菜单、托盘图标、单实例限制(用mutex实现),这些Electron里一行配置的事,这里要调几十个API。

但启动速度是真实的。Taqin录了对比视频:GoAMPP冷启动到控制面板可用,0.3秒。XAMPP控制面板需要加载Perl运行时,2秒以上。Laragon更慢,因为它要先初始化Cmder和Telegram通知器。

GitHub仓库开源后,一周收了400星。Issues里最常见的请求是加MySQL 8.0支持、加Caddy替代Nginx、加Ruby运行时。Taqin的回复很克制:「MySQL 8.0的zip包结构变了,得改StripTop逻辑。Caddy是单二进制,可能直接内置。Ruby在考虑,但体积太大。」

有个用户反馈让他改了设计。最初版本所有服务共享一个日志框,Apache和MariaDB的输出混在一起。后来改成每个服务独立标签页,但底层还是单goroutine轮询,因为windigo的Edit控件线程不安全,得串行更新。

项目README的最后一段,Taqin写了用途声明:「不是生产环境工具,是开发机上的沙盒。别用它托管正式站点,SSL证书管理、日志轮转、自动备份这些都没做。」

但已经有用户在Issue里贴图:用GoAMPP跑起来的本地WordPress,配合Tailscale内网穿透,给甲方做预览。Taqin没阻止,只是回了句:「记得关debug模式,phpMyAdmin默认没密码。」

下一个周末他打算加什么功能?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
卡塔尔宣布将于12日恢复波斯湾“全面”海上航行

卡塔尔宣布将于12日恢复波斯湾“全面”海上航行

新京报
2026-04-12 07:34:09
WTT太原站男双决赛上演国乒内战 温瑞博/李和宸3-2险胜摘冠

WTT太原站男双决赛上演国乒内战 温瑞博/李和宸3-2险胜摘冠

画夕
2026-04-12 18:30:59
数艘美国海军舰船通过霍尔木兹海峡

数艘美国海军舰船通过霍尔木兹海峡

每日经济新闻
2026-04-11 21:23:39
恭喜俄罗斯和乌克兰!打了1500天,终于打成全世界都喜欢的样子!

恭喜俄罗斯和乌克兰!打了1500天,终于打成全世界都喜欢的样子!

温读史
2026-04-08 17:38:05
霍尔木兹42天生死劫:部分商家中东地区订单量同比下降超50%,中资企业出海预期分化

霍尔木兹42天生死劫:部分商家中东地区订单量同比下降超50%,中资企业出海预期分化

每日经济新闻
2026-04-12 15:21:32
张雪峰老师后继有人!峰学蔚来小郭老师登上热搜,网友直言整哭了

张雪峰老师后继有人!峰学蔚来小郭老师登上热搜,网友直言整哭了

火山詩话
2026-04-12 08:39:45
千元童鞋把脚穿肿?泰兰尼斯遭家长“围攻”,医生警惕影响发育,90%专利竟是外观设计

千元童鞋把脚穿肿?泰兰尼斯遭家长“围攻”,医生警惕影响发育,90%专利竟是外观设计

新浪财经
2026-04-10 17:33:59
广东战广厦12人名单,黄明依入围,杜锋变阵,徐杰替补三将关键

广东战广厦12人名单,黄明依入围,杜锋变阵,徐杰替补三将关键

佳佳说奇事故事
2026-04-12 16:58:26
欧尔班的“底气”何在?

欧尔班的“底气”何在?

寰宇大观察
2026-04-12 16:34:23
郑丽文此行收到三家企业礼物,28年它们能否跨过那道海峡?

郑丽文此行收到三家企业礼物,28年它们能否跨过那道海峡?

趣味萌宠的日常
2026-04-12 12:52:06
亚锦赛战报:太强了,石宇奇11-0/10-0暴打世界第6,横扫晋级决赛

亚锦赛战报:太强了,石宇奇11-0/10-0暴打世界第6,横扫晋级决赛

求球不落谛
2026-04-11 19:03:51
哈佛解剖100名糖尿病死者,吃惊发现:易患糖尿病的人,有3大恶习

哈佛解剖100名糖尿病死者,吃惊发现:易患糖尿病的人,有3大恶习

周哥一影视
2026-04-12 16:54:49
48架F-35压境,美日撕破脸!王毅专机直插平壤,中朝抄了美军后路

48架F-35压境,美日撕破脸!王毅专机直插平壤,中朝抄了美军后路

基斯默默
2026-04-11 11:19:29
杨振宁去世5个月后,49岁翁帆现状:剪了头发染了色,仍独居国内

杨振宁去世5个月后,49岁翁帆现状:剪了头发染了色,仍独居国内

照见古今
2026-03-26 19:06:28
曾保卫毛主席进京,1958年却连降十级,毛主席怒道:我要亲自过问

曾保卫毛主席进京,1958年却连降十级,毛主席怒道:我要亲自过问

历史龙元阁
2026-04-12 08:40:21
比失业更可怕的是工资倒退,深圳的工资已经降到了10年前

比失业更可怕的是工资倒退,深圳的工资已经降到了10年前

细说职场
2026-04-07 11:32:47
41岁詹皇单核锁主场!东契奇报销后,他扛起整个湖人

41岁詹皇单核锁主场!东契奇报销后,他扛起整个湖人

茅塞盾开本尊
2026-04-12 18:16:52
全红婵后续:群主被刑拘只是开始,网传名单已曝光,队友很慌乱?

全红婵后续:群主被刑拘只是开始,网传名单已曝光,队友很慌乱?

眼光很亮
2026-04-11 17:01:04
正式裁掉!再见,NBA,一场没打白拿2660万啊,热火太难了

正式裁掉!再见,NBA,一场没打白拿2660万啊,热火太难了

球童无忌
2026-04-11 20:46:37
行程结束,郑丽文访陆画上句号,从北京临走之前,终于看到了答案

行程结束,郑丽文访陆画上句号,从北京临走之前,终于看到了答案

林子说事
2026-04-12 17:53:00
2026-04-12 19:08:49
固件更新中
固件更新中
有态度网友ytd
1619文章数 16关注度
往期回顾 全部

科技要闻

理想称遭恶意拉踩,东风日产:尊重同行

头条要闻

女子将闺蜜6.8万紫貂大衣粘上粘鼠板 硬扯下来还撒谎

头条要闻

女子将闺蜜6.8万紫貂大衣粘上粘鼠板 硬扯下来还撒谎

体育要闻

五大联赛首冠出炉?拜仁或提前4轮卫冕德甲

娱乐要闻

46岁赵达官宣结婚!曾与殷桃谈婚论嫁

财经要闻

美伊谈判破裂的三大症结

汽车要闻

焕新极氪007/007GT上市 限时19.39万起

态度原创

时尚
教育
家居
旅游
公开课

伊姐周六热推:电视剧《八千里路云和月》;综艺《乘风2026》......

教育要闻

Q开头的单词!

家居要闻

复古风格 自然简约

旅游要闻

绝绝“紫”上线!等你来打卡~

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版