加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0472zz.com/)- 云渲染、网络安全、终端安全、数据治理、智能机器人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux下H5开发环境与数据库配置实践

发布时间:2026-09-25 11:27:48 所属栏目:Linux 来源:DaWei
导读:  “Linux下H5开发环境与数据库配置实践”——这标题不是我拍脑袋想的,是我去年十一月在阿里云ECS(Ubuntu 22.04.3 LTS)上反复重装Node 18.19.0、降级到16.20.2、又切回18.19.0后,终端里cat package.json时顺手复制粘贴

  “Linux下H5开发环境与数据库配置实践”——这标题不是我拍脑袋想的,是我去年十一月在阿里云ECS(Ubuntu 22.04.3 LTS)上反复重装Node 18.19.0、降级到16.20.2、又切回18.19.0后,终端里cat package.json时顺手复制粘贴进文档的第一行。它现在还躺在我/home/zhao/dev/h5-env-log.md里,时间戳是2023-11-07 22:17:03。


  真崩溃过三次。第一次是Vite启动后白屏,控制台报错Uncaught ReferenceError: process is not defined,查了两小时才发现是vite.config.ts里没配define: { 'process.env.NODE_ENV': JSON.stringify('development') }——但更坑的是,这错在Mac上根本不出!只在Linux的Docker Desktop+WSL2双嵌套环境下才冒头,我同事用Arch Linux试了一次就放弃说“你这环境像叠了三层煎饼”。第二次是MySQL 8.0.33的默认认证插件caching_sha2_password被node-mysql2拒接,连不上localhost:3306,改my.cnf加default_authentication_plugin=mysql_native_password才通,但第二天发现Docker Compose里mysql容器重启后配置丢失——因为volume挂载路径写错了,把/etc/mysql/conf.d/漏了个斜杠,变成/etc/mysql/conf.d./。


  Linux下H5开发环境与数据库配置实践


  去年十一月我搭的整套栈:Vite 4.5.3 + Vue 3.3.8 + Pinia 2.1.7 + Element Plus 2.3.12 + MySQL 8.0.33 + Redis 7.2.1 + Nginx 1.18.0(非root用户起的)。所有服务跑在普通用户权限下——这点特别关键,因为某次npm run dev卡死,ps aux一看居然有7个dev-server进程在争抢3000端口,全是我用sudo npm start留下的僵尸进程;杀完再跑,/.vite/deps/_metadata.json直接报EPERM,最后发现是node_modules里有个文件属主变成了root。这事让我删了三遍node_modules,还写了shell脚本自动chown -R $USER:$USER ./node_modules。


文章配图,仅供参考

  新技术?对。但“新”不单指版本号。比如Vite的HMR热更新在Linux下会多一层inotify watch限制,/proc/sys/fs/inotify/max_user_watches默认是8192,我那个含42个子包的monorepo一开就爆,得echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches;还有MySQL的bind-address默认是127.0.0.1,看着安全,结果Vite代理转发请求时,curl http://localhost:3306返回空——不是拒绝连接,是HTTP 200但body为空,抓包才发现MySQL根本没走HTTP协议,这错觉浪费我37分钟。这哪是配置问题,这是协议层的认知偏差。


  试过MariaDB 11.1.2替代MySQL,结果Vue Devtools的XHR拦截失效,因为mariadb的packet响应格式和mysql2驱动解析器对不上,导致/v1/api/users接口返回乱码二进制流——Chrome Network面板里显示“failed”,但实际是200,Status列却灰掉,鼠标悬停提示“Connection closed before receiving response”,查源码发现是mariadb包的底层stream未正确emit end事件。这事我没提工单,因为官方issue区早有人提过,但回复是“WONTFIX:请用mysql2或升级到11.2.0+”。可11.2.0又和我们用的Percona Toolkit 3.5.3冲突……所以最终还是切回MySQL。


  Linux下H5开发环境与数据库配置实践,我认为它优点在“新技术”


  这判断带点赌气成分——去年十一月我对比了三组数据:Mac M1芯片编译相同H5项目平均耗时2.8秒,Ubuntu 22.04物理机4.1秒,但WSL2+Docker组合反而是3.3秒,快过物理机;MySQL在Linux上并发insert 10万条测试数据比Mac快11.7%,Redis benchmark的GET QPS高出23%;唯独Vite预构建,Linux下用了287秒,Mac只要193秒。所以我主观认定:新技术的价值不在“快”,而在“可追溯性”——每次失败都有明确日志位置、确切UID、精确到毫秒的systemd-journal输出,不像Mac的日志像蒙着雾的玻璃窗。但这话我不敢发朋友圈,怕前端群友截图问我:“那为什么你上周还抱怨pm2 reload崩了两次?”——确实崩了,因为没设ulimit -n 65536,fork失败静默退出。


  下一步打算把MySQL换成SQLite做本地开发——毕竟TypeORM支持,且能绕开用户权限、字符集、时区这些破事。但今天先搞定Nginx反向代理WebSocket的upgrade头漏传问题,已经盯了52分钟,Wireshark里看到FIN包乱飞……

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!