- 先弄明白要做什么
- 选一条路线
- 第一步:下载服务端源码
- 路线 A:在自己的 Windows 电脑上运行
- 路线 B:部署到云服务器
- 第二步:在 App 里使用
- 日常维护
- 常见问题
- 附:通信协议(自己写服务端时参考)
- 其它选择
先弄明白要做什么
网络微数据库(TinyWebDB)组件自己不存数据,它把数据发给一个“服务端”程序保管。默认的服务端在 MIT 的服务器上:所有人共用、条目会被覆盖,中文读出来是乱码。
自建,就是在你自己的电脑或服务器上运行一个服务端程序,再把 App 里组件的“服务地址”改成它:
手机上的 App ──网络──▶ 你的电脑 / 云服务器(运行 tinywebdb_server.py)──▶ 数据文件
本文提供的服务端程序只有一个 Python 文件,不需要安装数据库,也不需要 pip 安装任何东西。照着步骤做,第一次大约 20 分钟。
先确认网络微数据库适合你:它只能“按标签存一个值、按标签取一个值”,适合留言板、排行榜、简单的多人共享数据。本文的服务端还带了图片上传,App 用 Web 客户端把图片传上来、换回一个图片地址。如果要用户账号、按条件查询,请直接用 CloudBase 或 Supabase 拓展,不必自建。
搭好以后,可以接着学《联网 App 入门专题》:5 课从连通测试做到带图商品墙,都用这个服务端。
选一条路线
| 路线 A:自己的电脑 | 路线 B:云服务器 | |
|---|---|---|
| 适合 | 课堂演示、调试、学习 | 给别人长期使用 |
| 花费 | 免费 | 租一台云服务器(最低配置就够) |
| 手机要求 | 和电脑连同一个 WiFi | 任何网络(4G/5G 也行) |
| 什么时候停 | 电脑关机、睡眠或关掉窗口就停 | 一直运行,重启服务器后自动启动 |
不确定就先走路线 A,跑通后再搬到云服务器,App 只需改一下服务地址。
第一步:下载服务端源码
解压后得到 tinywebdb-server 文件夹,里面有:
| 文件 | 作用 |
|---|---|
tinywebdb_server.py |
服务端程序(在线查看源码) |
start-windows.bat |
Windows 双击启动 |
start-linux.sh |
Linux / macOS 启动 |
tinywebdb.service |
云服务器开机自启的配置 |
README.txt |
文件说明 |
第一次运行后会多出:
secret.txt:访问口令,自动随机生成,是服务地址的最后一段。别人不知道口令就读写不了你的数据。tinywebdb.sqlite3:网络微数据库的数据都在这里。files文件夹:App 上传的图片(第一次有人上传时才出现)。
备份 tinywebdb.sqlite3 和 files 文件夹就是备份全部数据。
路线 A:在自己的 Windows 电脑上运行
A1. 安装 Python
- 打开 Python 官网下载页,下载最新的 “Windows installer (64-bit)”。官网慢的话,用华为云镜像 mirrors.huaweicloud.com/python:进入版本号目录(如
3.12.10/),下载以-amd64.exe结尾的文件。 - 双击安装包,先勾选底部的 “Add python.exe to PATH”,再点 “Install Now”。
- 装完点 “Close”。
需要 Python 3.8 或更新的版本。已经装过的可以跳过这一步。
A2. 启动服务端
- 把
tinywebdb-server文件夹放到容易找到的地方,比如桌面。 - 双击里面的
start-windows.bat,会弹出一个黑色窗口。 - 如果弹出 “Windows 安全中心警报”,勾选“专用网络”和“公用网络”,点“允许访问”。不允许的话手机连不上。
- 窗口里出现下面这样的内容,就说明启动成功:
============================================================
网络微数据库服务已启动,关闭这个窗口服务就会停止。
在 App 里把“服务地址”设为:
http://192.168.1.19:5000/3f9a1c7e
用浏览器打开上面的地址可以查看所有数据。
在云服务器上运行时,把地址里的 IP 换成服务器的公网 IP。
============================================================
中间那行 http://… 就是你的服务地址(每台电脑的 IP 和口令都不一样,以你窗口里显示的为准)。这个窗口不要关,关了服务就停了。
macOS 或 Linux 电脑:打开“终端”,进入文件夹后运行 sh start-linux.sh,看到同样的输出即可。
A3. 用手机浏览器检查能不能连上
这一步最关键,能省掉之后大部分排错时间。
- 手机连上和电脑同一个 WiFi。
- 在手机浏览器里输入窗口里显示的服务地址。
- 看到“网络微数据库:共 0 条,图片 0 张”的页面,就说明手机能连上服务端。
打不开时,按常见问题的 Q1、Q2 排查,不要急着去改 App。
路线 B:部署到云服务器
下面以 Ubuntu 系统为例,阿里云、腾讯云、华为云的操作都一样。只用“IP + 端口”访问不需要域名。
B1. 准备服务器
- 在云厂商购买一台云服务器(轻量应用服务器即可),最低配置就够用,系统镜像选 Ubuntu 22.04 或 24.04。
- 记下服务器的公网 IP(控制台的实例详情里能看到)。
- 在控制台找到“防火墙”或“安全组”,添加一条规则:放行 TCP 端口 5000,来源填
0.0.0.0/0。忘了这一步,手机一定连不上。
B2. 登录服务器
在云厂商控制台的实例页面点“登录”或“远程连接”,选浏览器里的网页终端即可,不需要另外装软件。看到以 $ 或 # 结尾的命令行提示符,就可以输入命令了。
B3. 安装服务端
逐条复制下面的命令,粘贴到终端里回车执行:
sudo apt update
sudo apt install -y python3 unzip wget
sudo mkdir -p /opt/tinywebdb
cd /opt/tinywebdb
sudo wget https://www.fun123.cn/reference/creative/tinywebdb_server/tinywebdb-server.zip
sudo unzip -o -j tinywebdb-server.zip
ls
最后的 ls 应当列出 tinywebdb_server.py、tinywebdb.service 等文件。
B4. 设为开机自动运行
sudo cp /opt/tinywebdb/tinywebdb.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now tinywebdb
sudo systemctl status tinywebdb --no-pager
看到绿色的 active (running) 就说明服务在运行。服务端以一个权限受限的系统用户运行,数据和口令保存在 /var/lib/tinywebdb/。
B5. 拿到服务地址
sudo cat /var/lib/tinywebdb/secret.txt
输出的一串字符就是口令。你的服务地址是:
http://公网IP:5000/口令
例如公网 IP 是 47.100.1.2、口令是 3f9a1c7e,服务地址就是 http://47.100.1.2:5000/3f9a1c7e。
如果服务器开着 ufw 防火墙(执行 sudo ufw status 显示 Status: active),还要执行一次 sudo ufw allow 5000/tcp。
B6. 用手机检查
手机关掉 WiFi,用流量打开服务地址,看到“网络微数据库:共 0 条,图片 0 张”就成功了。
第二步:在 App 里使用
设置服务地址
在设计器里选中“网络微数据库1”组件,把“服务地址”属性改成你的服务地址。也可以在代码块里设置:
when Screen1.Initialize() {
网络微数据库1.ServiceURL = "http://192.168.1.19:5000/3f9a1c7e"
}
服务地址末尾不要加 /(本文的服务端两种都兼容,其它服务端不一定)。
写一个最小测试
界面放一个文本输入框、两个按钮(保存、读取)和一个标签:
when 按钮_保存.Click() {
网络微数据库1.StoreValue("留言", 文本输入框1.Text)
}
when 网络微数据库1.ValueStored() {
标签1.Text = "保存成功"
}
when 按钮_读取.Click() {
网络微数据库1.GetValue("留言")
}
when 网络微数据库1.GotValue(tagFromWebDB, valueFromWebDB) {
if valueFromWebDB == "" {
标签1.Text = "还没有保存过"
} else {
标签1.Text = join("读到:", valueFromWebDB)
}
}
when 网络微数据库1.WebServiceError(message) {
标签1.Text = join("网络出错:", message)
}
在伴侣里运行,输入一段中文点“保存”,标签显示“保存成功”;点“读取”,标签显示刚才输入的内容。再用浏览器刷新服务地址页面,表格里能看到“留言”这一条,值带着双引号,这是正常的(保存的是 JSON 文本)。
用两台手机分别运行同一个 App,一台保存、另一台读取,就是最简单的多人共享数据。注册登录、排行榜等完整示例见注册登录教程和云数据库配置教程。
日常维护
| 要做的事 | 自己电脑 | 云服务器 |
|---|---|---|
| 查看所有数据 | 浏览器打开服务地址 | 同左 |
| 停止服务 | 关掉黑色窗口 | sudo systemctl stop tinywebdb |
| 重新启动 | 再双击 start-windows.bat |
sudo systemctl restart tinywebdb |
| 看运行日志 | 黑色窗口里就是 | sudo journalctl -u tinywebdb -n 50 |
| 备份数据 | 复制 tinywebdb.sqlite3 和 files 文件夹 |
sudo cp -r /var/lib/tinywebdb ~/tinywebdb-backup |
| 换口令 | 删除 secret.txt 后重启 |
sudo rm /var/lib/tinywebdb/secret.txt 后重启 |
| 清空全部数据 | 停止服务,删除 tinywebdb.sqlite3 和 files 文件夹,再启动 |
同左,文件在 /var/lib/tinywebdb/ |
换口令后,旧服务地址立即失效,App 要改成新地址。
常见问题
Q1:双击 start-windows.bat,窗口一闪就没了,或提示“不是内部或外部命令”
Python 没装好,或安装时没勾选 “Add python.exe to PATH”。重新运行安装包,选 “Modify” → 一路下一步 → 勾选 “Add Python to environment variables”;或者卸载后按 A1 重装。
Q2:手机浏览器打不开服务地址
按顺序检查:
- 电脑上的黑色窗口还开着吗?电脑睡眠了吗?
- 手机和电脑是不是同一个 WiFi?手机用流量时连不上你家里的电脑。
- 防火墙拦住了:Windows 搜索“允许应用通过 Windows 防火墙”,找到 Python,把“专用”和“公用”都勾上。
- 学校、公司、商场的 WiFi 常常禁止设备互相访问。换成用手机开热点、让电脑连手机热点,再试一次。
- 云服务器:安全组没有放行 TCP 5000,或 ufw 没放行(见 B5)。
Q3:窗口里报错 “address already in use” 或 “通常每个套接字地址只允许使用一次”
5000 端口被别的程序占用了。用记事本打开 tinywebdb_server.py,把 "5000" 改成 "5001" 等其它数字,保存后重新启动,服务地址里的端口也跟着变。云服务器上改完要执行 sudo systemctl restart tinywebdb,安全组也要放行新端口。
Q4:App 里提示“网络出错”
- 先用手机浏览器打开服务地址,打不开就按 Q2 排查。
- 能打开但 App 报错:核对“服务地址”有没有抄错,尤其是口令那一段。
- 报 404:口令不对。口令以
secret.txt为准。
Q5:读出来的值是空的
标签不存在时就返回空文本。确认保存和读取用的是同一个标签(区分大小写、注意空格),保存时“值存储完毕时”事件有没有触发。
Q6:电脑重启后数据还在吗?
在。数据在 tinywebdb.sqlite3 文件里,重新启动服务端就能接着用。口令也不变。
Q7:安全吗?
- 口令会随 App 一起分发,能挡住随手扫描的人,挡不住拆包。不要用网络微数据库存密码、身份证号等敏感信息,需要账号系统请用 CloudBase / Supabase。
- 服务地址是
http://,数据明文传输。课堂和练习够用;正式产品建议给服务器配域名和 HTTPS。 - 网络微数据库组件不能设置请求头,所以口令只能放在服务地址里。
Q8:数据多了怎么办?
网络微数据库每次只能按一个标签存取,不能按条件查询、排序、分页。数据量大或需要筛选时,改用 CloudBase 的数据库组件,或用 Web 客户端连接自建 MySQL。
附:通信协议(自己写服务端时参考)
想用 PHP、Node.js 等其它语言实现,只要遵守下面的约定,网络微数据库组件就能直接使用。PHP 和 Node.js 的参考实现见云数据库配置教程第 4.4、4.5 节。
组件把请求发到“服务地址 + / + 命令名”:
| 动作 | 请求 | 服务端返回 |
|---|---|---|
| 保存值 | POST 服务地址/storeavalue,表单字段 tag、value |
任意内容,返回 HTTP 200 即触发“值存储完毕时” |
| 获取值 | POST 服务地址/getvalue,表单字段 tag |
JSON 数组 ["VALUE", 标签, 值] |
注意三点:
- 请求体是表单编码(
application/x-www-form-urlencoded,UTF-8),不是 JSON 请求体。 value字段是值的 JSON 文本:存文本张三时实际发来的是"张三"(带引号),存列表时是[1,2]。服务端原样保存,取值时原样放回数组第三项。- 标签不存在时第三项返回空字符串
"",组件拿到的值就是空文本。没有NO_DATA这种约定。
图片上传是本文服务端额外提供的接口,不属于网络微数据库协议,App 用 Web 客户端调用:
| 动作 | 请求 | 服务端返回 |
|---|---|---|
| 上传图片 | POST 服务地址/upload,请求体就是图片文件(Web 客户端的「执行 POST 文件请求」) |
{"status": "OK", "url": 图片地址, "name": 文件名} |
| 取回图片 | GET 服务地址/files/文件名 |
图片本身 |
- 只收 jpg、png、gif、webp(按文件头判断,改扩展名没用),否则返回 400;超过 5MB 返回 413;口令不对返回 404。
- Web 客户端发文件用分块传输,请求里没有 Content-Length,自己写服务端时要能读分块的请求体。
- 回复之前要先把请求体读完。手机还在发送时服务端就回复并断开,手机收到的是“连接被重置”,看不到 404/413 这些原因。
- 图片地址里带着服务端的 IP 和端口,服务端换了电脑或 IP,旧图片地址就打不开了。
其它选择
| 需求 | 选择 | 说明 |
|---|---|---|
| 不想自己运行服务端 | 国内免费的网络微数据库服务 | 见组件文档中文网注,单个值有大小上限 |
| 要用户账号、图片文件、按条件查询 | CloudBase / Supabase 拓展 | 网络微数据库做不了账号和文件 |
LeanDB 是 LeanCloud 的拓展,不是网络微数据库服务,不能填进“服务地址”。LeanCloud 已公告 2027-01-12 停止服务,新项目改用 CloudBase。
扫码添加客服咨询