armbian通过node20-alpine和mariadb部署小程序数据库
部署环境
- 系统:Armbian(ARM64)
- 外网域名:https://wx.yxxx.top(域名可以不用备案)
- 用途:小程序 → API → 数据库
用 Docker 只需要跑两个容器:
- MariaDB(数据库)
- NodeJS 后端接口(给小程序访问)
docker部署
在armbian中新建 /wxchat文件夹 mkdir -p wxchat
在wxchat中新建2个文件:
wxchat/index.js;代码如下:
const express = require('express')
const mysql = require('mysql2/promise')
const app = express()
app.use(express.json())
// 数据库连接(Docker 内部直接用服务名 db)
const pool = mysql.createPool({
host: 'db',
user: 'root',
password: 'root123456',
database: 'miniapp',
waitForConnections: true,
connectionLimit: 5
})
// 测试接口
app.get('/api/hello', async (req, res) => {
res.json({
code: 0,
msg: '连接成功',
server: 'Armbian + Docker + 微信小程序'
})
})
// 查询示例
app.get('/api/user/list', async (req, res) => {
try {
const [rows] = await pool.query('SELECT * FROM user')
res.json({ code: 0, data: rows })
} catch (err) {
res.json({ code: -1, msg: err.message })
}
})
// 插入示例
app.post('/api/user/add', async (req, res) => {
try {
const { name } = req.body
const [result] = await pool.query(
'INSERT INTO user (name) VALUES (?)',
[name]
)
res.json({ code: 0, insertId: result.insertId })
} catch (err) {
res.json({ code: -1, msg: err.message })
}
})
// 初始化表
async function initTable() {
await pool.query(`
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
created_at DATETIME DEFAULT NOW()
)
`)
console.log('表初始化完成')
}
initTable()
const PORT = 3000
app.listen(PORT, () => {
console.log(`API 服务启动:${PORT}`)
})wxchat/package.json;代码如下:
{
"dependencies": {
"express": "^4.18.2",
"mysql2": "^3.6.5"
}
}在
/wxchat/docker-compose.yml新建文件;代码如下:# 给微信小程序使用的数据库文件
version: '3.8'
services:
# 数据库
db:
container_name: wxchatdb
image: mariadb:latest
restart: always
ports:
- "3306:3306" # 给dbeaver本地管理数据库用
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: miniapp # 创建一个基础数据库
volumes:
- ./mariadb:/var/lib/mysql
networks:
- app-net
# https://docker.aityp.com/image/docker.io/node:20.14.0-alpine
#小程序接口服务(端口 3000)
# 镜像: node:18-alpine
api:
container_name: wxchatapi
image: node:20.14.0-alpine
restart: always
working_dir: /app
ports:
- "3000:3000"
volumes:
- ./api:/app
command: sh -c "npm install && node index.js"
depends_on:
- db
networks:
- app-net
networks:
app-net:拉取镜像:
cd /wxchat
docker compose up -d查看是否正常:
docker compose logs -f api
出现:
API 服务已启动:3000 端口
数据库初始化完成就成功了,这样数据库服务器就部署好了。
最终接口地址:
https://wx.yxxx.top/api/test
打开上的地址如果出现:
{"code":0,"msg":"连接成功:Armbian + Docker + 微信小程序"}
说明接口能够成功访问。
新建小程序项目
- 打开微信开发者工具,在创建小程序页面上:
- 项目名称:随便取一个
- 目录:找好存放的目录
- AppID:在微信公众平台>首页>小程序信息>账号信息>AppID(小程序ID):xadf4adf6sdfgab4f98c9
- 不使用云服务
- 开发模式:小程序
- 模板选择:不使用模板
- 创建
修改小程序项目文件
主要修改6个文件: (替换文件里的全部内容)
app.js;代码如下:
App({
globalData: {
baseUrl: 'https://weito.top'
}
})app.json;代码如下:
{
"pages": [
"pages/index/index"
],
"window": {
"navigationBarTitleText": "我的小程序"
},
"sitemapLocation": "sitemap.json"
}sitemap.json;代码如下:
{
"desc": "关于本文件的更多信息,请参考文档",
"rules": [{
"action": "allow",
"page": "*"
}]
}pages/index/index.js(主页面(核心));代码如下:
const app = getApp()
Page({
data: {
list: [],
inputContent: ''
},
onLoad() {
this.getData()
},
// 获取数据列表
getData() {
wx.request({
url: app.globalData.baseUrl + '/api/data/list',
success: res => {
if (res.data.code === 0) {
this.setData({
list: res.data.data
})
}
}
})
},
// 输入框内容
onInput(e) {
this.setData({
inputContent: e.detail.value
})
},
// 提交数据
submit() {
const content = this.data.inputContent.trim()
if (!content) return
wx.request({
url: app.globalData.baseUrl + '/api/data/add',
method: 'POST',
data: { content },
success: res => {
if (res.data.code === 0) {
wx.showToast({ title: '提交成功' })
this.setData({ inputContent: '' })
this.getData()
}
}
})
}
})pages/index/index.wxml;代码如下:
<view class="container">
<view class="title">数据列表</view>
<view class="list">
<view class="item" wx:for="{{list}}" wx:key="id">
{{item.content}}
</view>
</view>
<view class="input-box">
<input placeholder="请输入内容" value="{{inputContent}}" bindinput="onInput" />
<button bindtap="submit">提交</button>
</view>
</view>pages/index/index.wxss;代码如下:
.container {
padding: 20rpx;
}
.title {
font-size: 36rpx;
margin-bottom: 20rpx;
}
.item {
padding: 20rpx;
background: #f5f5f5;
margin-bottom: 10rpx;
border-radius: 8rpx;
}
.input-box {
margin-top: 30rpx;
display: flex;
gap: 20rpx;
}
input {
flex: 1;
border: 1rpx solid #ddd;
border-radius: 8rpx;
padding: 0 20rpx;
}
button {
padding: 0 30rpx;
}
使用说明
- 在微信开发者工具新建小程序项目
- 把上面 4 个文件对应替换
- 去微信小程序后台把
https://wx.yxxx.top加到 request 合法域名 - 编译运行
功能:
- 页面加载自动从你家里 Armbian 数据库读取数据
- 输入内容提交 → 写入家里数据库
- 实时显示列表
dbeaver本地数据库管理工具
- DBeaver 汉化:启动 DBeaver,点击菜单栏 Windows → Preferences(Windows);
在左侧选择 User Interface(用户界面),找到 Language 选项。从下拉菜单中选择 简体中文。 - DBeaver 新建连接:打开 DBeaver,点击菜单 数据库 → 新建连接。
连接方式:主机
服务器地址:192.168.1.1
端口:3306