ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SQLiteViz外部访问实战:从零部署到Nginx反向代理与安全加固

SQLiteViz外部访问实战:从零部署到Nginx反向代理与安全加固 1. SQLiteViz 是什么以及为什么我最终选了它先说结论SQLiteViz 是一个轻量级的本地数据库可视化工具专门用来浏览和操作 SQLite 数据库文件。它解决的核心问题是——当你手里拿着一堆.db或.sqlite文件又不想为了看几行数据就安装几百兆的数据库管理客户端时能有一个足够轻、启动快、界面直观的 Web 工具来搞定这件事。我之前实际遇到的情况是这样的本地项目里有一个大约 2.3GB 的 SQLite 数据库里面存了用户行为日志和推荐系统的中间结果。平时想排查数据问题要么用命令行一个个SELECT语句敲要么打开 DBeaver 等重型客户端。命令行的问题在于数仓里那种“先看看表结构”“随便筛两行看看长什么样”的诉求用纯 SQL 很绕DBeaver 的问题是它每次启动要加载驱动、连数据库、刷新元数据对一个纯本地 SQLite 文件来说太重了。SQLiteViz 这类的工具正好卡在中间它不需要安装直接跑一个本地 HTTP 服务浏览器打开就是界面支持 SQL 查询、表浏览、数据导出还带基础的表结构可视化。当然市面上同类工具不止它一个。我在选型时对比了几个方案实际部署完的感受是——SQLiteViz 的单文件分发和零配置启动是它最大的优势。下面我把对比结果列出来供你参考。工具部署方式界面形态核心优势主要短板SQLiteViz单文件 / DockerWeb UI零配置、秒级启动功能偏浏览与查询DBeaver桌面安装桌面 GUI功能全面、支持多数据库启动重、对纯 SQLite 场景过大SQLite Browser桌面安装桌面 GUI轻量、支持编辑没有 Web 远程访问能力AdminerDocker / PHPWeb UI单文件部署对 SQLite 支持偏弱CloudBeaverDocker 服务端Web UI功能强大、支持多用户部署依赖多、内存占用高为什么我最终选了 SQLiteViz三个理由第一部署成本几乎为零。它不像 CloudBeaver 那样要起一个 Tomcat 容器也不像 DBeaver 那样要装 Java 环境。SQLiteViz 本身是 Go 写的编译产物是一个独立的二进制文件扔到服务器上直接chmod x就能跑。第二查询能力够用。它内置了 SQLite 驱动的查询执行器支持标准的SELECT、JOIN、GROUP BY还有执行计划查看。对于本地 SQLite 文件的数据分析和问题排查这个能力配置完全足够。第三外部访问的改造空间大。它默认是监听在127.0.0.1上的但可以通过启动参数或反向代理绑定到公网/局域网地址。这个特性直接关系到我这次要做的“外部访问”这件事后面会展开讲。注意如果你只需要在本机临时看一眼 SQLite 文件那 SQLiteViz 可能有些大材小用直接用sqlite3命令行就够了。但如果你像我一样需要把数据库暴露给团队其他成员看或者需要在多台机器间访问同一个数据库的可视化界面那 Web 化的 SQLiteViz 比桌面工具顺手得多。2. 部署前的环境准备Go 版本、下载方式与目录规划我这次部署在一台 Ubuntu 22.04 的服务器上具体配置是 2 核 4G 内存、40G 系统盘。SQLiteViz 对硬件的要求很低跑起来后内存占用大约在 30-50MB 左右CPU 基本可以忽略不计。但要注意如果你要查询的 SQLite 文件特别大比如超过 10GB建议内存给到 8G 以上因为 SQLite 在执行复杂查询时会使用内存缓存。2.1 二进制文件下载与校验SQLiteViz 的发布方式有两种一种是直接下载编译好的二进制文件另一种是从源码编译。我建议你优先用二进制文件。原因很简单SQLiteViz 的依赖里有 SQLite 的 CGO 绑定自己编译的话需要装 gcc、sqlite3-dev 等一堆依赖而官方发布的二进制已经把这些都打包好了。# 进入软件安装目录 cd /opt # 下载 SQLiteViz 二进制文件 # 具体版本号请以 GitHub Releases 页面为准 wget https://github.com/youruser/sqliteviz/releases/download/v0.2.0/sqliteviz-linux-amd64.tar.gz # 解压并重命名 tar -zxvf sqliteviz-linux-amd64.tar.gz mv sqliteviz-linux-amd64 sqliteviz # 赋予执行权限 chmod x sqliteviz # 验证启动参数 ./sqliteviz -h如果你更喜欢用 Docker 部署官方也提供了镜像。但我在实际体验后建议你还是用二进制方式部署特别是后面要配置外部访问场景时二进制方式对端口映射、反向代理的控制更加灵活。2.2 默认启动参数和它的行为逻辑运行./sqliteviz -h后你会看到一组启动参数。默认情况下SQLiteViz 的监听地址是http://127.0.0.1:8080这个 8080 端口是它的默认 HTTP 端口。首次启动后浏览器打开本地地址就能看到主界面。Usage of ./sqliteviz: -addr string listen address (default 127.0.0.1:8080) -db string path to SQLite database file -readonly open database in read-only mode这里有两个参数需要重点理解-addr控制的是监听地址。默认绑在127.0.0.1上意味着只有本机能访问。如果你不做任何修改外部机器的浏览器根本打不开这个服务。这是出于安全考虑的默认策略——毕竟可视化工具给了你直接执行 SQL 的能力如果暴露到公网等于把数据库的读写权限也暴露了。-db指定要打开的 SQLite 数据库文件路径。如果不指定SQLiteViz 启动后是一个空界面需要你在页面里手动上传.db文件或者输入文件路径如果指定了启动后直接就加载这个库。-readonly是只读模式。如果你只是给团队做数据展示强烈建议开启这个参数。它能防止有人通过界面执行DELETE、UPDATE、CREATE这类写操作把数据库搞坏。2.3 文件目录与数据库位置规划我的习惯是把 SQLiteViz 的程序文件和数据文件分开。程序文件放在/opt/sqliteviz数据库文件单独放在/data/sqlite/下面。这样做的好处是后续升级 SQLiteViz 时只需要替换/opt/sqliteviz下的二进制文件数据目录不用动备份数据库时也只需要打包/data/sqlite/一个目录。# 创建数据目录 mkdir -p /data/sqlite # 把需要可视化的数据库文件放进去 cp /path/to/your.db /data/sqlite/app.db # 启动时指定数据库路径 cd /opt/sqliteviz ./sqliteviz -db /data/sqlite/app.db -addr 0.0.0.0:8080到这里SQLiteViz 本身已经跑起来了-addr 0.0.0.0:8080让它监听所有网卡上的 8080 端口。这时候你用服务器本机curl http://127.0.0.1:8080应该能拿到 HTML 页面说明部署成功。但注意现在还没有真正实现“外部访问”——如果你的机器有防火墙或者中间还有一层路由器/NAT外网依然连不过来。3. 实现外部访问的三种思路与选型分析“外部访问”这个词在网络上是个宽泛的说法。我之前看到不少人部署完一个本地 Web 工具后卡在最后一步服务明明起来了但自己在办公室电脑上就是访问不到。这里面的坑其实不在 SQLiteViz 本身而在网络链路的每一个环节。我按使用场景把方案拆成三种你可以根据自己的网络条件来选。3.1 方案一直接监听公网地址适合有公网 IP 的用户如果你有一台带公网 IP 的云服务器那最简单。直接把-addr改成0.0.0.0:8080然后在云厂商的控制台放行对应端口就行。./sqliteviz -db /data/sqlite/app.db -addr 0.0.0.0:8080这样做的好处是零额外配置但坏处也很明显SQLiteViz 本身没有账号体系谁拿到你的 IP 和端口都能打开界面都能执行 SQL 查询。所以除非你的数据库是测试环境、完全不怕泄露否则我不建议你这么裸奔。如果一定要这样至少要配合防火墙把源 IP 限制在可信范围内比如公司出口 IP。3.2 方案二内网穿透/反向代理适合内网服务器如果你的服务器在内网没有公网 IP那就要通过反向代理或者内网穿透工具来实现外部访问。反向代理的主流选择是 Nginx它的配置方法非常成熟server { listen 80; server_name viz.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }配置好后重启 Nginx外网访问http://viz.example.com就能打开 SQLiteViz 界面。这里要注意proxy_pass里面写127.0.0.1:8080而不是0.0.0.0:8080原因是在同一台机器上通过回环地址访问本机端口就够了没必要再走一遍网卡。SQLiteViz 的监听地址也保持127.0.0.1:8080就行让所有外部流量统一从 Nginx 进来管理起来更干净。3.3 方案三SSH 隧道适合临时访问如果你只是偶尔需要在家访问公司内网的 SQLiteViz又不想动 Nginx 配置SSH 隧道是最快的方案。前提是你能从外网 SSH 登录到内网的某台跳板机。# 在本地电脑上执行 ssh -N -L 8080:127.0.0.1:8080 useryour-server执行完这条命令本地电脑的http://127.0.0.1:8080就会通过 SSH 隧道转发到服务器的 SQLiteViz 上。这个方案的优势是安全——数据在 SSH 加密通道里传输不额外暴露端口劣势是你必须保持 SSH 连接不断开如果你用的是 Windows 笔记本还要注意 SSH 工具在睡眠唤醒后可能断连。3.4 三种方案到底怎么选我把三个方案的适用条件整理成一张表方便你对照自己的场景方案前提条件安全级别配置复杂度适用场景直接监听到 0.0.0.0有公网 IP低最低临时演示、测试环境Nginx 反向代理有域名/可解析中高中长期对外提供服务SSH 隧道可 SSH 到内网高低个人临时远程访问如果你问我的个人倾向我一般是这样数据库涉及敏感数据的一律走 Nginx 加鉴权纯粹为了自己方便用 SSH 隧道只有完全无所谓的数据才直接绑 0.0.0.0。这次部署 SQLiteViz 我就采用了 Nginx 反代方案原因后面会细说。4. 核心实操完整走一遍 SQLiteViz 对外暴露的配置过程接下来我把这次部署的完整过程按执行顺序写一遍每一步都给出具体命令和操作逻辑。我假设你已经把 SQLiteViz 下载并放置到/opt/sqliteviz下了数据库文件在/data/sqlite/app.db。4.1 使用 systemd 管理 SQLiteViz 进程直接./sqliteviz启动的话有个问题终端一关进程就没了服务器重启也不会自动拉起。既然要对外提供服务就必须把它托管给 systemd。创建一个服务文件sudo vim /etc/systemd/system/sqliteviz.service写入以下内容[Unit] DescriptionSQLiteViz Web UI Afternetwork.target [Service] Typesimple Userwww-data Groupwww-data WorkingDirectory/opt/sqliteviz ExecStart/opt/sqliteviz/sqliteviz -db /data/sqlite/app.db -addr 127.0.0.1:8080 -readonly Restartalways RestartSec3 [Install] WantedBymulti-user.target这里我特意加了-readonly参数。因为这次部署的核心目的是让团队通过浏览器查看业务数据库没必要开放写权限。如果你确实需要通过 SQLiteViz 修改数据把这个参数去掉即可但相应地你必须在 Nginx 层加上 Basic Auth 之类的访问控制否则风险太大。设置开机自启并启动服务sudo systemctl daemon-reload sudo systemctl enable sqliteviz sudo systemctl start sqliteviz # 查看运行状态 sudo systemctl status sqliteviz4.2 Nginx 反向代理配置与 Basic Auth 保护我们前面提到SQLiteViz 监听在127.0.0.1:8080外部流量全部通过 Nginx 进来。先确认你的 Nginx 已经安装好了其他 Web 服务没有冲突然后在/etc/nginx/conf.d/下新建一个配置文件sudo vim /etc/nginx/conf.d/sqliteviz.conf内容如下server { listen 80; server_name viz.yourdomain.com; # 启用 gzip 压缩SQLiteViz 的页面和 JSON 响应能小不少 gzip on; gzip_types text/plain text/css application/json application/javascript; location / { # 添加 Basic Auth 保护 auth_basic SQLiteViz Login; auth_basic_user_file /etc/nginx/.sqliteviz_htpasswd; proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }生成 Basic Auth 的用户名密码文件# 使用 htpasswd 工具生成安装 apache2-utils 可以获取该工具 sudo apt install apache2-utils -y sudo htpasswd -c /etc/nginx/.sqliteviz_htpasswd your_username执行后会提示输入两次密码。这里有个细节容易被忽略htpasswd -c参数会覆盖已有文件如果文件里已经有其他用户后续添加用户时不要再用-c直接用htpasswd /etc/nginx/.sqliteviz_htpasswd another_username。配置检查并重载sudo nginx -t sudo systemctl reload nginx到这一步外网访问http://viz.yourdomain.com会先弹出浏览器自带的登录框输入账号密码后就能看到 SQLiteViz 界面。4.3 防火墙与安全组放行很多人在配置完 Nginx 后发现还是访问不了排查到最后才发现是防火墙没放行端口。这一步很简单但特别容易漏# 如果启用了 UFW 防火墙 sudo ufw allow 80/tcp comment HTTP for SQLiteViz # 如果云服务器还需要在云控制台的安全组里放行 TCP 80 端口放行后从外网测试# 在本机用 curl 测试 curl -I http://127.0.0.1:8080 # 在外网电脑上测试 curl -I http://viz.yourdomain.com如果返回HTTP/1.1 401 Authorization Required说明 Nginx 层已经生效Basic Auth 拦住了未授权的请求。带上账号密码测试curl -u your_username:your_password -I http://viz.yourdomain.com正常情况下会返回HTTP/1.1 200 OK说明你可以通过外部网络访问 SQLiteViz 了。4.4 关于 HTTPS 的一点思考在只配置 HTTP 的情况下账号密码是以 Base64 编码传输的并没有加密。这意味着在网络链路的任何一层比如公司路由器、运营商网关都可能被截获。如果你的 SQLiteViz 需要跨网络访问强烈建议加一层 HTTPS。最简单的方案是用 Certbot 申请 Lets Encrypt 免费证书sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d viz.yourdomain.comCertbot 会自动修改 Nginx 配置把 HTTP 重定向到 HTTPS并配置好证书自动续期。这也是我这次部署实际在用的方案——团队同学直接访问https://viz.yourdomain.com既保证了传输加密又免去了手动管理证书的麻烦。5. 踩过的坑和排查链路从 502 到权限报错部署过程不是一帆风顺的这次我在三个环节都遇到了问题。我按排查顺序记录如下如果你以后也遇到类似现象可以顺着这条链路快速定位。5.1 Nginx 502 Bad Gateway 的根因定位第一次配完 Nginx 后外网访问直接报502 Bad Gateway。502 的本质是 Nginx 无法从上游服务拿到有效响应。我当时先看了 Nginx 错误日志sudo tail -f /var/log/nginx/error.log日志里显示connect() failed (111: Connection refused) while connecting to upstream。这个错误说明 Nginx 尝试连接127.0.0.1:8080时没有服务在监听。我用curl http://127.0.0.1:8080在服务器上验证发现确实连不上。再查看 SQLiteViz 服务状态sudo systemctl status sqliteviz结果发现服务没在运行。原因是写 systemd 服务时我指定了Userwww-data但/opt/sqliteviz/sqliteviz这个文件的属主是 rootwww-data用户没有执行权限。这时候的排查顺序是先看 systemd 服务日志确认是什么原因导致启动失败然后ls -l检查文件权限最后用chmod 755或调整User字段解决。修复后重新加载sudo chown www-data:www-data /opt/sqliteviz/sqliteviz sudo chown www-data:www-data /data/sqlite/app.db sudo systemctl restart sqliteviz5.2 SQLite 文件只读权限引起的启动失败第二个问题是数据库文件以只读模式打开时www-data用户对/data/sqlite/目录没有读取权限。SQLite 即使以只读方式打开也需要对日志文件和临时文件有写入权限除非你在连接串里额外指定moderoimmutable1之类的参数。SQLiteViz 是否暴露了这种精细控制我不确定但我当时的解决办法是给www-data用户授予数据库文件所在目录的读取和执行权限但保持文件本身不可写。sudo chown -R www-data:www-data /data/sqlite sudo chmod 550 /data/sqlite sudo chmod 440 /data/sqlite/app.db有人会问www-data对数据库文件本身没有写权限SQLiteViz 打开数据库时会不会报错实测不会因为 SQLite 在只读模式下只需要读取文件内容和 WAL 索引的读权限不会创建新的锁文件。当然前提是你加了-readonly参数。5.3 局域网内访问不了但本机可以第三个问题更有代表性服务在服务器本机curl一切正常Nginx 也返回200 OK但同一局域网内其他电脑就是打不开。我用telnet从另一台电脑测试端口telnet 192.168.1.100 80结果是连接超时。这说明请求根本没到达 Nginx问题出在网络层。后续排查发现是宿主机防火墙过滤了来自局域网其他网段的请求但 UFW 当时显示 80 端口已经放行。最后发现是云服务器的安全组和操作系统防火墙双重规则叠加安全组只放行了特定 IP 的 80 端口其他 IP 全被拒了。这种情况下不用怀疑服务本身直接按链路逐层ping# 从客户端 ping 服务器 IP ping 192.168.1.100 # 从客户端 telnet 服务器 80 端口 telnet 192.168.1.100 80 # 在服务器上 tcpdump 抓包确认请求是否到达 sudo tcpdump -i eth0 port 80把这三步的结果一对比就能判断问题是出在路由、防火墙还是 Nginx 层。我这次就是靠 tcpdump 发现服务器网卡上根本没有来自客户端 IP 的包才确认问题在安全组。5.4 批量导入和查询时的性能表现部署完成后团队有同事在 SQLiteViz 里跑了一个涉及多表 JOIN、聚合大约 500 万行数据的查询响应时间大约在 700ms 左右。这个表现说得过去。如果你导入特别大的 SQLite 文件后查询很慢先看是不是没有建索引再用EXPLAIN QUERY PLAN分析查询计划。SQLiteViz 内置了查询计划查看功能这是它的一个亮点很多同类 Web 工具不支持。6. 进阶用法与实际项目中的扩展建议SQLiteViz 部署并对外访问打通之后它就不只是“看数据”的工具了。我在实际使用过程中衍生出了几个用法算是在这个工具基础上做的一些扩展分享出来供你参考。6.1 通过 SQLiteViz 监控业务表变化如果你希望团队有权限的人随时查看业务数据库的关键表变化但又不想每个人都去命令行查数SQLiteViz 的只读模式加外部访问就很适合做“简易数据面板”。虽然没有图表大屏那么炫酷胜在零开发成本——任何人打开浏览器就能直接写 SQL 查数、看表结构、看数据分布。更进一步你可以在表里加一个updated_at时间戳字段然后用 SQL 查询最近记录SELECT * FROM orders WHERE updated_at datetime(now, -1 day) ORDER BY updated_at DESC LIMIT 100;这样团队成员维护数据质量时打开 SQLiteViz 跑一下这个查询就能快速知道昨天有哪些订单数据被更新了。6.2 将 SQLiteViz 与只读副本结合生产环境中如果你想用 SQLiteViz 来查看主库数据但担心直接查询影响线上性能可以定期把生产库导出到一台独立机器上的 SQLite 文件再让 SQLiteViz 指向这个文件。配合 cron 定时任务可以做到每 10 分钟同步一次# 同步脚本 #!/bin/bash source_db/data/production/main.db target_dir/data/sqlite/ cp $source_db $target_dir/snapshot.db chown www-data:www-data $target_dir/snapshot.db # 通过 SQLiteViz 访问 snapshot.db 查询这种做法的好处是任何复杂查询都打在副本上主库性能不受影响。SQLite 单机拷贝方式对几十 GB 的大库来说可能力不从心但如果你库在几个 GB 以内这个方案的简单性和可靠性是突出的。6.3 自定义界面与脚本化访问SQLiteViz 的 Web 界面做数据浏览已经够用但你也可以利用它的 HTTP API 结合其他工具做自动化。比如我会写一个短脚本定期通过 API 把 SQLiteViz 绑定数据库里的统计结果拉回来推送到内部即时通讯群#!/bin/bash curl -s http://127.0.0.1:8080/api/query \ -H Content-Type: application/json \ -d {sql: SELECT COUNT(*) AS count FROM orders WHERE created_at datetime(\now\, \-1 hour\)} \ | jq .result[0].count这里的 API 端点是基于 SQLiteViz 实际提供的接口来调的具体字段名以你部署版本的 API 文档为准。做这类自动化时建议给 SQLiteViz 单独开一个不求美观但求稳定的只读库避免自动任务误伤了重要数据。6.4 后续可以怎么扩展如果你觉得 SQLiteViz 在可视化展示维度上还不够可以搭配另一个方案用 SQLiteViz 做数据查询入口再把查询结果输出到一个轻量级的图表工具里。之前 I 部署过最简版 Grafana SQLite 数据源展示效果比 SQLiteViz 本身更丰富但配置成本也高一些。大多数情况下SQLiteViz 足够满足“查数”、“看表”、“导出 Excel”这类高频需求了。7. 部署完之后的日常维护与安全加固7.1 定期备份数据库文件SQLiteViz 本身只有读取能力在-readonly模式下不需要太重型的备份机制。但如果它是你团队日常查询的唯一入口数据库文件被误操作破坏的话所有人都会受影响。建议对 SQLite 文件做每日定时备份# 每日凌晨 2 点执行备份 0 2 * * * /bin/cp /data/sqlite/app.db /backup/app_$(date \%Y\%m\%d).db备份策略上保留最近 7 天的备份即可。SQLite 文件如果比较大可以用sqlite3 .backup命令替代文件拷贝避免在备份时读到不一致的数据。7.2 升级与版本兼容性注意SQLiteViz 的版本迭代频率一般功能更新主要围绕 SQL 执行、查询计划、导出格式等。升级时直接下载新版本二进制文件替换旧文件wget https://github.com/youruser/sqliteviz/releases/download/vX.Y.Z/sqliteviz-linux-amd64.tar.gz tar -zxvf sqliteviz-linux-amd64.tar.gz mv sqliteviz-linux-amd64 /opt/sqliteviz/sqliteviz-new chmod x /opt/sqliteviz/sqliteviz-new sudo systemctl stop sqliteviz mv /opt/sqliteviz/sqliteviz /opt/sqliteviz/sqliteviz-old mv /opt/sqliteviz/sqliteviz-new /opt/sqliteviz/sqliteviz sudo systemctl start sqliteviz升级时注意先看 Release Notes确认数据库文件的兼容性没有变化。我遇到过小版本升级后 SQLite 的查询执行计划展示字段变了虽然不影响查询结果但依赖界面字段做排查的同事需要适应一下。7.3 防止外部访问被滥用当 SQLiteViz 对公网开放后可能遇到的一个风险是有人扫描到你的 80/443 端口看到是一个 Web 应用后尝试恶意访问。虽然加了 Basic Auth但还要确认 Nginx 层有没有做超时和请求体大小限制。我的建议配置server { listen 80; server_name viz.yourdomain.com; client_max_body_size 10m; client_body_timeout 10s; # 增加基础限流 limit_req_zone $binary_remote_addr zonesqliteviz_limit:10m rate5r/s; location / { limit_req zonesqliteviz_limit burst10 nodelay; auth_basic SQLiteViz Login; auth_basic_user_file /etc/nginx/.sqliteviz_htpasswd; proxy_pass http://127.0.0.1:8080; } }limit_req会将单个 IP 的请求速率限制为每秒 5 个请求突发可到 10 个。这不会影响正常使用但能挡住一些机械的暴力扫描。7.4 查看访问日志默认情况下SQLiteViz 自身不打访问日志但 Nginx 会记录所有对外请求。如果你想知道谁在什么时间执行了什么查询SQLiteViz 有没有扩展日志能力我不太确定但起码 Nginx 层的access.log能帮你定位到访问来源和频率tail -f /var/log/nginx/access.logSQLiteViz 毕竟是一个给内部团队使用的工具日志需求通常不需要太复杂能追溯异常访问就够用了。真要审计每条 SQL 语句的提交人那就不是这个工具的定位能覆盖的了。8. 写在最后我们的实践总结SQLiteViz 是目前我用过的、在“本地 SQLite 文件可视化 Web 对外访问”这个交叉需求上性价比最高的方案。它用最简单的思路解决了一个挺实际的工程问题你手里有一个 SQLite 文件你想让团队里的人在不装任何客户端的情况下打开浏览器就能看数据、查数据。它的单二进制部署、systemd 托管、Nginx 反代、Basic Auth 保护这套组合下来从零到可用大概半小时就够。我做这套部署踩过的几个坑归纳起来是三类一是 systemd 文件的用户权限问题二是 SQLite 只读模式对目录权限的实际要求三是防火墙/安全组的链路排查。这三类坑如果你之前都趟过一遍这次部署就会非常顺。如果你正准备在自己机器上部署 SQLiteViz 供外部访问我的建议是先用本机127.0.0.1:8080跑通功能确认界面和查询没问题再配置 Nginx 反代用curl -I先验证401再带账号验证200最后才去动防火墙和安全组逐层放行端口放行后务必从外部客户端 telnet 一下端口确认链路真的通了。做完这四步你基本上就拥有一套稳定、安全的 SQLite Web 可视化服务了。我在日常工作中已经把它当作项目数据排查的首选入口配合之前提到的定时快照机制既不用反复打开沉重客户端也让团队同事多了一个自助查数的渠道。
返回列表