Linux下H5开发环境与数据库一体化配置方案
|
“Linux下H5开发环境与数据库一体化配置方案”——这名字是我去年5月份在阿里云ECS(ubuntu 22.04 LTS,4核8G)上反复调试37次后定下来的,不是纸上谈兵。当时为赶一个政务内网H5报表项目,前端用Vue3+Vite,后端用Node.js 18.17,数据库选了PostgreSQL 15.4而不是MySQL,就因为pgbouncer连接池和JSONB字段对动态表单渲染太友好——但没人告诉我systemd里pgbouncer.service必须加RestartSec=5,前6次部署全卡在socket超时。 失败案例很具体:去年5月12号凌晨两点,我把Docker Compose v2.20.2的network_mode设成host,结果Vite热更新的ws://localhost:5173/ws一直被PostgreSQL的iptables规则拦截——查了4小时才发现ufw默认策略没放行5173端口,而pg_hba.conf里local all all peer那行根本没生效,因为systemd启动postgres时根本没读这个文件!后来改用podman pod(rootless模式),把nginx反向代理层直接塞进pod网络空间,才真正实现“一键启停整个栈”。
文章配图,仅供参考 我实测数据:“Linux下H5开发环境与数据库一体化配置方案”。 它优点在“新技术”——不是泛泛而谈,是指Vite插件vite-plugin-pwa + PostgreSQL 15的pg_cron自动清理临时表、再加上Nginx的sub_filter替换base href这三者联动。比如我让CI脚本每次build前自动执行psql -c "SELECT pg_reload_conf()",再触发vite build --mode staging,生成的index.html里base路径立刻变成/staging/,连前端路由守卫都不用动——这个链路全网没几篇文档提过,更别说验证systemd timer能否精准控制pg_cron任务间隔到17秒(实测最小粒度是15秒,17秒会漂移到19秒)。 有人问:为啥不用SQLite做本地开发?我试过。去年5月23日,在同一台机器跑vite dev server加sqlite-wasm,内存峰值冲到3.2GB,CPU风扇狂转;换成PostgreSQL+unix socket连接后,idle状态内存压到1.1GB——但代价是第一次npm run dev要等12秒等pg_ctl start完成,比SQLite慢整整9秒。所以我在package.json里加了"dev": "pg_isready -q && vite",结果发现pg_isready居然不支持--wait=0.5,最小单位是1秒,于是自己写了段bash脚本用timeout 0.3s pg_isready -q || true,硬凑出毫秒级轮询——这种脏补丁,文档里当然不会写。 那个PostgreSQL用户密码我设成了testarch2023!,结果git commit时不小心提交了.env.local——被CI扫描出来强制阻断。后来改成用systemd的DynamicUser=true特性生成随机凭据,再通过EnvironmentFile=/run/secrets/pg_cred挂载,但这玩意儿在Ubuntu 22.04里要手动编译systemd 251才能用,官方源只到249。最后折中方案:用gpg加密的.pgpass.gpg,每次dev启动前用gpg --batch --passphrase-fd 0 -d .pgpass.gpg 2>/dev/null < .key | sudo tee /home/dev/.pgpass ——你看,连密钥文件名都带时间戳:.key.20230528.bak。这细节谁写过? 我不知道Mac M系列芯片能不能复现这套流程——毕竟arm64下podman对PostgreSQL共享内存的支持有bug,上次测到pg_ctl启动后shmat返回EINVAL。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

