Instatic 自托管教程:Docker、SQLite/Postgres、Caddy HTTPS 与备份

Instatic 自托管实操指南,介绍 Docker/VPS 部署、SQLite 与 Postgres 选择、Caddy HTTPS、持久化卷、备份恢复和上线验收。

Instatic 的本篇教程围绕标题中的具体任务展开。自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

下面使用测试环境和可撤销数据演示。涉及账号、密钥、机器控制、投资或应急通信时,必须再做人工确认。

先决定 SQLite 还是 Postgres

这一节只处理“先决定 SQLite 还是 Postgres”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
docker version

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

单机试用为什么可以选 SQLite

建议按以下顺序执行:

  1. 核对实际版本与来源。
  2. 使用测试账号、测试目录或测试设备。
  3. 执行一个可撤销动作。
  4. 保存输出、退出码或截图。
  5. 恢复修改并重新验证。
1
Get-ChildItem -Force .

完成标准是“单机试用为什么可以选 SQLite”得到可核验结果,而不是命令刚好没有报错。

多人长期使用为何评估 Postgres

检查项 通过标准 停止信号
多人长期使用为何评估 Postgres 输入、输出和权限范围明确 工具自动扩大操作范围
来源 能回到官方仓库或原始数据 依赖未知镜像或二手结论
安全 日志中没有秘密值 出现 Token、Cookie 或隐私数据
恢复 能回到执行前状态 没有备份或撤销方法
1
docker volume ls

出现停止信号时先恢复,不要继续下一步。

Docker Compose 启动前检查环境变量

这一节只处理“Docker Compose 启动前检查环境变量”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
git grep -n -I 'SECRET\|PASSWORD\|DATABASE_URL' -- .

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

只把应用端口绑定到回环地址

建议按以下顺序执行:

  1. 核对实际版本与来源。
  2. 使用测试账号、测试目录或测试设备。
  3. 执行一个可撤销动作。
  4. 保存输出、退出码或截图。
  5. 恢复修改并重新验证。
1
netstat -ano

完成标准是“只把应用端口绑定到回环地址”得到可核验结果,而不是命令刚好没有报错。

第一次启动后查看迁移日志

检查项 通过标准 停止信号
第一次启动后查看迁移日志 输入、输出和权限范围明确 工具自动扩大操作范围
来源 能回到官方仓库或原始数据 依赖未知镜像或二手结论
安全 日志中没有秘密值 出现 Token、Cookie 或隐私数据
恢复 能回到执行前状态 没有备份或撤销方法
1
docker compose logs --tail 100

出现停止信号时先恢复,不要继续下一步。

创建测试内容并上传一个附件

这一节只处理“创建测试内容并上传一个附件”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
docker compose ps

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

Caddy 只代理应用端口

建议按以下顺序执行:

  1. 核对实际版本与来源。
  2. 使用测试账号、测试目录或测试设备。
  3. 执行一个可撤销动作。
  4. 保存输出、退出码或截图。
  5. 恢复修改并重新验证。
1
caddy validate --config Caddyfile

完成标准是“Caddy 只代理应用端口”得到可核验结果,而不是命令刚好没有报错。

HTTPS 正常不代表应用安全

检查项 通过标准 停止信号
HTTPS 正常不代表应用安全 输入、输出和权限范围明确 工具自动扩大操作范围
来源 能回到官方仓库或原始数据 依赖未知镜像或二手结论
安全 日志中没有秘密值 出现 Token、Cookie 或隐私数据
恢复 能回到执行前状态 没有备份或撤销方法
1
curl.exe -I https://example.com

出现停止信号时先恢复,不要继续下一步。

数据库备份与文件备份分开执行

这一节只处理“数据库备份与文件备份分开执行”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
docker volume ls

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

做一次空目录恢复演练

建议按以下顺序执行:

  1. 核对实际版本与来源。
  2. 使用测试账号、测试目录或测试设备。
  3. 执行一个可撤销动作。
  4. 保存输出、退出码或截图。
  5. 恢复修改并重新验证。
1
docker compose config

完成标准是“做一次空目录恢复演练”得到可核验结果,而不是命令刚好没有报错。

升级镜像前固定当前标签

检查项 通过标准 停止信号
升级镜像前固定当前标签 输入、输出和权限范围明确 工具自动扩大操作范围
来源 能回到官方仓库或原始数据 依赖未知镜像或二手结论
安全 日志中没有秘密值 出现 Token、Cookie 或隐私数据
恢复 能回到执行前状态 没有备份或撤销方法
1
docker compose images

出现停止信号时先恢复,不要继续下一步。

迁移失败时不要反复重启

这一节只处理“迁移失败时不要反复重启”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
docker compose logs --since 10m

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

SQLite 锁错误如何定位并发

建议按以下顺序执行:

  1. 核对实际版本与来源。
  2. 使用测试账号、测试目录或测试设备。
  3. 执行一个可撤销动作。
  4. 保存输出、退出码或截图。
  5. 恢复修改并重新验证。
1
docker compose logs | Select-String -Pattern 'locked'

完成标准是“SQLite 锁错误如何定位并发”得到可核验结果,而不是命令刚好没有报错。

Postgres 连接失败分层排查

检查项 通过标准 停止信号
Postgres 连接失败分层排查 输入、输出和权限范围明确 工具自动扩大操作范围
来源 能回到官方仓库或原始数据 依赖未知镜像或二手结论
安全 日志中没有秘密值 出现 Token、Cookie 或隐私数据
恢复 能回到执行前状态 没有备份或撤销方法
1
2
docker compose ps
docker compose logs --tail 50

出现停止信号时先恢复,不要继续下一步。

上线后的最终恢复清单

这一节只处理“上线后的最终恢复清单”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
docker compose config --quiet

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

上传目录权限错误如何定位

建议按以下顺序执行:

  1. 核对实际版本与来源。
  2. 使用测试账号、测试目录或测试设备。
  3. 执行一个可撤销动作。
  4. 保存输出、退出码或截图。
  5. 恢复修改并重新验证。
1
docker compose exec app id

完成标准是“上传目录权限错误如何定位”得到可核验结果,而不是命令刚好没有报错。

反代后的真实客户端 IP 是否可信

检查项 通过标准 停止信号
反代后的真实客户端 IP 是否可信 输入、输出和权限范围明确 工具自动扩大操作范围
来源 能回到官方仓库或原始数据 依赖未知镜像或二手结论
安全 日志中没有秘密值 出现 Token、Cookie 或隐私数据
恢复 能回到执行前状态 没有备份或撤销方法
1
docker compose logs --tail 100

出现停止信号时先恢复,不要继续下一步。

删除测试实例前确认备份可读

这一节只处理“删除测试实例前确认备份可读”。先保存当前状态,再运行最小测试,不要同时改变多个条件。

1
Get-Item .\backup\* -ErrorAction SilentlyContinue

对 Instatic 来说,判断结果时必须结合这一边界:自托管 Instatic 涉及应用、数据库、上传文件和反向代理;备份只覆盖数据库会留下无法恢复的附件和配置缺口。

如果结果无法重复,记录版本、输入和日志,然后缩小测试范围。

Instatic 的最终核对

  • 使用的版本和来源已经记录。
  • 测试输入与正式数据已经隔离。
  • 命令、配置和实际输出能够对应。
  • 失败路径至少主动测试过一次。
  • 密钥、账号和私人数据没有进入 Git 或日志。
  • 升级、停止和恢复都有明确动作。

如果仍无法解释结果如何产生,就继续把 Instatic 保持在测试环境,不要扩大权限或替换现有稳定流程。