加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.5947.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2026-09-23 12:30:26 所属栏目:Linux 来源:DaWei
导读:  “Linux下H5开发环境与数据库配置实操”——这标题不是我起的,是去年5月在阿里云ECS(ubuntu 22.04 LTS)上重装第七次Node环境时,终端输出报错信息里自动带出来的日志片段,我顺手截了图,发到公司内网文档系统里,结果被运

  “Linux下H5开发环境与数据库配置实操”——这标题不是我起的,是去年5月在阿里云ECS(ubuntu 22.04 LTS)上重装第七次Node环境时,终端输出报错信息里自动带出来的日志片段,我顺手截了图,发到公司内网文档系统里,结果被运维小张当模板复用了三次。


  去年5月17日下午3:22,我在用nvm v0.39.7切换Node版本时,npm install -g @vue/cli卡在node-gyp rebuild,报错说python3.10缺失distutils.sysconfig——但/usr/lib/python3.10/distutils/目录明明存在,只是sysconfig.py被Ubuntu 22.04改名叫sysconfig.pyi了。折腾俩钟头,最后是把/usr/lib/python3.10/distutils/sysconfig.pyi硬链接成sysconfig.py才过——这事连Ubuntu官方论坛都没提过,纯靠我用ls -la逐行比对/usr/lib/python3.10/distutils/和python3.8的目录结构发现的。那个下午我喝了四杯速溶咖啡,右手小指因为敲太多次Tab补全开始发麻。现在每次看到npm install卡住,我第一反应还是去ls -la看sysconfig是不是又偷偷改名了——新技术?它连命名都还没学会守规矩。


  MySQL 8.0.33的默认身份验证插件是caching_sha2_password,但Vue项目里的mysql2包v2.3.3根本不认这个,连接时直接抛ER_NOT_SUPPORTED_AUTH_MODE。我试过ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456',也试过在my.cnf里加default_authentication_plugin=mysql_native_password——但后者会导致systemd启动失败,报“Failed to start MySQL Server”,查journalctl才发现它读my.cnf时把[mysqld]段落里的plugin-load-add行解析错了,多了一个空格。后来是运维老李提醒:得用mysqld --initialize-insecure --user=mysql先清空data目录再重装,他手机里还存着2021年自己踩坑的截图,时间戳是8月12日21:47。我照做了,但第12次初始化时,磁盘空间只剩183MB,不够生成加密密钥,最终在/var/log/mysql/error.log里看到一行:“keyring file not found”,这时候我才想起删掉/var/lib/mysql/.keyring。新技术?它连钥匙放哪都要你猜三遍。


  Vite 4.4.9启动本地服务,默认host绑0.0.0.0:5173,可我测试时发现局域网另一台CentOS 7机器curl http://192.168.3.15:5173 总返回404——其实不是网络问题,是Vite的server.host配置必须显式设为"0.0.0.0"且server.strictPort:true不能开,否则会静默fallback到127.0.0.1。这个细节连Vite中文官网v4.4文档都没写清楚,只在GitHub issue #12882的某条评论里,一个叫@davestewart的用户用英文随口提了一句“check strictPort”。我截图发群里,没人回。后来自己抓包对比,才发现curl -v确实收到HTTP/1.1 404,但nc -zv 192.168.3.15 5173是通的——原来404是Vite的HTML fallback机制,不是端口不通。


  数据库密码明文写在.env.development里,公司审计部上周查出来要求立即整改。我改成用docker secrets,结果Docker Compose v2.18.1读不到secrets变量,调试半天发现得把mysql2连接配置从const pool = mysql.createPool({})改成new mysql.Pool({})——前者根本忽略process.env.MYSQL_PASSWORD,后者才认。这bug在mysql2包的CHANGELOG里没列,但在其GitHub仓库的commit d9f7e3a中,作者写了“fix pool creation in dockerized env with dynamic env var resolution”,时间戳是2023-04-29T11:02:44Z。我昨天刚试完,可行。


文章配图,仅供参考

  新技术?


  我暂时放弃用SQLite替代MySQL做本地开发了——虽然理论上轻量,但Vite+Vue3+SQLite3的wasm绑定在Linux下编译总出segmentation fault,strace显示是musl libc和emscripten的ABI不兼容。这个问题我还在查,可能得等sqlite3-wasm包升到v5.1以上才解决。先退回用MySQL,至少它报错我知道往哪找。

(编辑:站长网)

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