程序员开发笔记

程序员开发笔记

服务器、网络、自托管与前端工程的踩坑记录。原创内容,无账号、无评论、无广告。

共 15 篇笔记 · 按 / 聚焦搜索

分类

全部笔记 共 15 篇

  • 给 nginx 全局打开 gzip:15.8 MB 到 5.35 MB 的实测与三处配置盲区

    弱网下 7.4 MB 的前端文件加载中断,排查后才发现压缩只覆盖了网页本身。把配置收进全局块、补齐类型与响应头、对齐测量方式后,资源体积降到了原来的三分之一。

    #nginx#gzip#性能优化#弱网
  • 给只有 IP 的服务器签证书:160 小时有效期与一条不能断的续期链路

    服务器没有域名,只能用 IP 字面量对外。签完证书才发现有效期只有 160 小时,验证方式、80 端口、HSTS 取舍全都要围着续期链路重新设计。

    #TLS#Let's Encrypt#certbot#nginx
  • 一个 IP、一条 443:子路径反代的尾斜杠、WebSocket 与 cookie Path

    服务器只有 IP 入口,几个服务挂在同一个 443 的子路径下。反向代理末尾的斜杠决定后端收到什么路径,长连接与登录态的路径也各有各的坑。

    #反向代理#nginx#WebSocket#cookie
  • 给 dsh web 套反向代理:token 换 cookie、Host 栅栏与 401/403/502

    dsh web 只监听回环,登录靠启动时打印的一次性链接。直接反代出去页面能开、接口全 401;最后用启动脚本换出绑定域名的登录态才解决。

    #反向代理#认证#nginx#dsh
  • 给没有公网 IP 的电脑做远程访问:自建中继的配对、掉线与密钥轮换

    电脑没有公网 IP,手机却要打开上面的服务。于是自建了 router 与 bridge 中继:服务器只监听回环,入口上开几条子路径,靠长连接维持通道。

    #远程访问#WebSocket#systemd#中继
  • 把密码库搬回自己的服务器:Vaultwarden 子路径部署与备份

    在一台没有域名、只有 IP 的服务器上用容器部署密码库,走 nginx 子路径反代,补上每日一致性备份、两步验证与恢复注意事项,记下几个反直觉的坑。

    #Vaultwarden#自托管#密码管理#备份
  • 给本地知识库接上图谱与 MCP:WeKnora 部署记录

    在本机(本地开发环境)用容器跑起一套 WeKnora,为关系密集的资料开启图谱抽取,再把 MCP 端点接进编码助手,记录两级开关、APOC 依赖与排障过程。

    #WeKnora#知识库#Neo4j#MCP
  • 用一份服务目录,管住所有自托管服务

    把本机与远程服务器上的系统服务与容器项目登记进一份 JSON 目录,用同一份探针采集状态并生成控制台,记录字段设计、动作语义、热加载踩坑与安全边界。

    #自托管#监控#systemd#Docker
  • 让 opencode serve 按需待命:一个不自启的编码服务

    把 opencode serve 装成系统服务却故意不设开机自启,只监听回环并用 nginx 反代成网页,记录 502 被误判成“版本不兼容”的排查过程与升级注意事项。

    #opencode#systemd#反向代理#按需服务
  • 改配置之前先留档:一个变更前备份脚本的设计

    改 nginx、证书或服务单元之前先跑一遍留档脚本,把运行时文件按相对根路径打成 tar 包,附清单与校验和,记录必带与可选清单以及 set -e 的静默坑。

    #备份#Bash#systemd#运维习惯
  • 从一把打不开的 SSH 私钥到私有仓库:git/GitHub 接入笔记

    把 Windows 上拷来的 SSH 私钥放到 Linux 机器上,踩了 CRLF、末尾缺换行与权限三道坑,接通 GitHub 私有仓库,并定下自动提交、提交信息与凭据边界。

    #git#GitHub#SSH#私有仓库
  • 大体积 wasm 的弱网交付:压缩、超时与校验

    7.4 MB 的 wasm 在窄带宽上的问题不是慢,而是传不完;压缩与 Vary、超时调大、内容哈希缓存、有限重试和部署期 sha256 校验,缺一环就回到报错。

    #WebAssembly#性能#缓存
  • WAL 模式下,别用 cp 备份 SQLite

    WAL 模式下直接复制 .db 会丢掉尚未 checkpoint 的事务,.db 与 -wal 一起复制也可能撕裂;要用 backup API 或 VACUUM INTO 这类保证页级一致的机制,配合临时文件与校验才可用。

    #sqlite#备份#WAL
  • 把布局脚本交回 CSS:has() 与容器查询

    父级能响应子元素状态、组件能按自身宽度排版,两组原生 CSS 能力删掉了不少布局脚本,也带来了特异性与包含块的新边界。

    #CSS#布局#渐进增强
  • require(esm) 默认可用了,库还要不要发双格式

    require(esm) 默认开启后,纯 ESM 包能被 CJS 直接加载,双格式不再是硬性要求;但顶层 await 仍是硬边界,双包危害与条件导出的细节仍需逐条判断。

    #Node.js#模块#esm