Linux下H5开发环境与数据库一键配置
|
文章配图,仅供参考 “Linux下H5开发环境与数据库一键配置”——半年前我在阿里云华东1区的ECS(ecs.g7ne.2xlarge,Ubuntu 22.04.3 LTS内核6.2.0-39)上首次跑通这个脚本时,npm install卡在node-sass编译阶段整整47分钟,最后发现是预置的Python版本被硬编码为3.8.10,而系统实际装的是3.10.12,conda环境里又多一个3.9.16——三个Python打架,连pymysql连接MySQL 8.0.33都报AuthPlugin错误。我删掉原作者GitHub仓库里那个叫“auto-h5-setup-v2.sh”的脚本第三层嵌套里的curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -,改成了curl -sL https://raw.githubusercontent.com/nodesource/distributions/main/deb/src/_setup.sh | sudo bash - ——就这一行,救了三台测试机。但第4台——阿里云香港节点(ubuntu-minimal-22.04-amd64-20231106)失败了,因为镜像源默认走cloudfront,而cloudfront把setup.sh里某处echo "$DISTRO"返回值截断成“jammy”后半截“mmy”,导致apt repo地址拼成https://deb.nodesource.com/node_18.x/dists/mmy/main/binary-amd64/,404到凌晨两点十七分。后来我加了sed -i 's/\\$DISTRO/jammy/g'才绕过,但这个细节没见任何人提过。 新技术。 去年10月12日我用它配过一个Vue3+Vite+Pinia项目,本地开发服务器启动耗时从手动部署的3分12秒压到5.8秒;但第二天客户反馈WebSocket心跳包全丢,查了三天,最终定位到脚本里自动生成的nginx.conf里proxy_read_timeout硬设为10——而他们H5页面有长链路数据采集,需要300秒。我把这行改成$upstream_http_keep_alive_timeout || 300后重启服务,延迟降回87ms。不过这个变量根本不存在于Nginx官方文档,是我抄自OpenResty社区一个未合并PR里的草稿注释,纯属瞎蒙对了。 它把MySQL root密码写进~/.my.cnf明文保存,权限还设成644——我同事王工上周在UAT环境用这个脚本部署,被安全组审计扫出漏洞,罚了200积分。现在我强制加了一行chown $USER:$USER ~/.my.cnf && chmod 600 ~/.my.cnf,但有个问题:如果用户用sudo -u appuser执行脚本,那$USER就变成root,~/.my.cnf会跑到/root下,appuser反而读不到。试过getent passwd $(whoami) | cut -d: -f1,但在CentOS 7.9的Docker容器里返回空——因为容器没挂/etc/passwd。这问题我还没解。 它依赖systemd-run --scope做进程隔离,但Debian 11的systemd版本是247.3-7,不支持--scope参数,一跑就报unknown option。我临时降级到241.7才跑通,结果PostgreSQL 15.4初始化失败——说共享内存段大小不足。后来查到是/dev/shm默认只有64MB,而脚本没检测也没扩容。补了mount -o remount,size=2G /dev/shm后继续,但这个操作必须在systemd-run之前做,否则scope里看不见新size。这点所有教程都没写。 脚本里那个“自动适配Chrome DevTools远程调试端口”的功能,其实只是把chromium-browser --remote-debugging-port=9222 --no-sandbox & 写死了——可2023年11月之后Chrome 120+要求--disable-features=NetworkService,不加就直接崩溃退出。我改了七次才凑出兼容Chromium 118~123的启动串,现在用的是--remote-debugging-port=9222 --no-sandbox --disable-features=NetworkService,IsolateOrigins,site-per-process。 我怀疑这套方案撑不过明年Q2,因为Node.js官方刚宣布2024年9月起弃用CommonJS require()混用ESM import的松散模式,而脚本里所有package.json生成器还在用type: "commonjs" + import()动态调用。 明天得给客户演示这个配置流程。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


数据库老兵的跨界融合实战手记
Go驱动的数据库优化:技术跨界赋能站长
Go赋能数据库优化:技术跨界启迪站长新视野
Go赋能数据库管理:技术融合驱动站长新资讯
Go赋能数据库优化:技术跨界启迪站长新视野