开源低代码平台 Microi 吾码:架构、部署与实战指南
低代码优势
低代码平台与传统开发对比
低代码平台通过可视化界面与预建模块显著提升开发速度,能快速搭建应用并大幅缩短周期,尤其适用于快速迭代项目。相比之下,传统代码开发需从零编写大量逻辑,过程复杂且耗时,即便是简单应用也往往需要较长的架构设计与实现时间。
低代码与零代码平台差异
低代码平台提供了更强的可扩展性选项,能够构建新应用程序以适应业务增长带来的用户量变化,满足企业长远发展需求。零代码平台虽然学习曲线低,但扩展性相对较弱,难以应对业务规模扩大和功能复杂度增加的场景。
此外,低代码开发需要掌握变量、条件语句和循环等基础编程概念,有助于开发人员提升技术能力,更好地应对复杂项目开发;而零代码几乎无需编程知识,不利于技术成长。
Microi 吾码简介
Microi 吾码支持多人协作操作,不限制人数及表单数、数据量和数据库数量。平台具备跨平台性和跨数据库能力,支持扩展组件及自定义 Vue 组件嵌入表单,允许二次开发调用表单引擎。集成 Google V8 引擎,支持使用 JavaScript 在线编写后端接口,处理 GET/POST 请求,响应文件及读取文件等操作。内置微服务、组件及界面模板,支持一键加载第三方数据库,在接口引擎中访问任意数据库。同时支持多公众号配置(不同集团分公司绑定不同公众号发送模板消息)、多小程序配置及模板消息配置。

官方资源
- 官网:https://microi.net
- GitEE 开源地址:https://gitee.com/ITdos/microi.net
平台特性
核心介绍
该平台专注于全局应用搭建领域,由拥有十余年全栈开发经验的专业团队维护。旨在将原本耗时以'月'计的繁杂编码过程缩减至'小时'计,极大降低开发与维护成本。基于十余年的行业服务经验,产品已覆盖商务、财务、销售到服务类等多个行业领域,实现个性化的行业解决方案。

产品特点
- 多语言支持:前后端均支持多语言管理,可在线配置,满足不同地区和用户的语言需求。
- 细粒度权限控制:细化到每张表、每个字段、每个菜单、每个 V8 按钮及每个接口的权限控制,保障系统安全性。
- 界面自定义:提供界面自定义引擎,用户可根据需求灵活定制界面,提高用户体验。
- 技术架构:采用 .NET8 + Redis + MySql/SqlServer/Oracle + Vue2/3 + Element-UI/Element-Plus 架构。支持跨平台、跨数据库、分布式部署,并集成消息队列、搜索引擎、MongoDB 等组件。

团队优势
研发团队主要由技术开发人员组成,分为产品研发组与二次定制开发组,提供稳定的更新与售后服务。
部署与使用
安装指南
推荐使用 Docker 环境进行部署。以下是 CentOS 7 的一键安装脚本执行方式。
一键安装脚本
url=https://static.itdos.com/install/install-microi-centos.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install-microi-centos.sh $url;fi;bash install-microi-centos.sh
注意事项
- 脚本运行后,界面会提示输入
g以公网 IP 安装,或输入n以内网 IP 安装,请根据实际情况选择。 - 若服务器未安装 Docker,脚本会提示是否立即安装。建议优先使用 1Panel、宝塔等面板工具管理服务器,若追求快速开始可直接确认安装。
- 安装成功后,必需开放 microi-api 端口、前端传统界面端口、前端 Web 操作系统端口以及 MinIO 端口。
- 脚本默认针对 4G 内存服务器优化配置,2G 内存服务器建议下载脚本去掉性能配置项后再运行。重复执行前会提示删除已有容器,这将导致所有数据丢失,请谨慎操作。
脚本源码参考
以下为脚本核心逻辑,包含环境检测、Docker 配置、MySQL/Redis/MongoDB/MinIO 及前后端容器启动流程。
echo 'Microi:当前一键脚本版本:2024-11-24 11:47'
# 获取局域网 IP
LAN_IP=$(hostname -I | awk '{print $1}')
echo 'Microi:获取局域网 IP: '$LAN_IP
# 获取公网 IP
PUBLIC_IP=$(curl -s ifconfig.me)
echo 'Microi:获取公网 IP: '$PUBLIC_IP
# 询问用户安装类型
echo 'Microi:您是想在公网访问系统还是内网访问?公网请提前做好端口开放。'
echo 'Microi:输入 g 以公网 IP 安装,输入 n 以内网 IP 安装:'
read -r install_type
if [ "$install_type" == "g" ]; then
ACCESS_IP=$PUBLIC_IP
echo 'Microi:将以公网 IP 安装。'
elif [ "$install_type" == "n" ]; then
ACCESS_IP=$LAN_IP
echo 'Microi:将以内网 IP 安装。'
else
echo 'Microi:无效的输入,脚本退出。'
exit 1
fi
# 检查 Docker 是否安装
if ! [ -x "$(command -v docker)" ]; then
echo 'Microi:您未安装 docker,推荐使用 1Panel、宝塔等面板工具来安装 docker 并管理您的服务器!'
echo 'Microi:是否立即安装 Docker?(y/n)'
read -r answer
if [ "$answer" != "y" ]; then
echo 'Microi:安装取消,脚本退出。'
exit 1
fi
# 安装 Docker
echo 'Microi:开始安装 Docker...'
sudo yum update -y
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
echo 'Microi:Docker 已成功安装。'
fi
# 配置 Docker 镜像加速器
DOCKER_ACCELERATOR="https://mirrors.aliyun.com/docker-ce/"
echo 'Microi:配置 Docker 镜像加速器'
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["${DOCKER_ACCELERATOR}"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 生成随机端口和密码函数
generate_random_port() {
shuf -i 17777-65535 -n 1
}
generate_random_password() {
openssl rand -base64 12 | tr -dc 'A-Za-z0-9' | head -c16
}
# 生成随机数据目录
generate_random_data_dir() {
local container_name="$1"
local dir="/home/data-${container_name}-$(openssl rand -hex 4)"
mkdir -p "${dir}"
echo "${dir}"
}
# 检查并提示用户手动删除已有容器
echo 'Microi:检查并提示用户手动删除已有容器'
if docker ps -a --format '{{.Names}}' | grep -q '^microi-install-'; then
echo 'Microi:脚本重复运行前,需要先通过命令【docker ps -a --format "{{.Names}}" | grep "^microi-install-" | xargs -r docker rm -f】删除所有相关容器后再重新运行,注意此操作将会删除数据库、MinIO 文件,请谨慎操作'
exit 1
fi
# 检查并安装 unzip
if ! [ -x "$(command -v unzip)" ]; then
echo 'Microi:您未安装 unzip,正在为您安装...'
sudo yum install -y unzip
if [ $? -ne 0 ]; then
echo 'Microi:unzip 安装失败,脚本退出。'
exit 1
fi
echo 'Microi:unzip 已成功安装。'
else
echo 'Microi:unzip 已安装。'
fi
# 创建 MySQL 配置文件
MYSQL_CONF_FILE="/tmp/my_microi.cnf"
echo '[mysqld]' > ${MYSQL_CONF_FILE}
echo 'lower_case_table_names = 1' >> ${MYSQL_CONF_FILE}
echo 'max_connections = 500' >> ${MYSQL_CONF_FILE}
echo 'key_buffer_size = 268435456' >> ${MYSQL_CONF_FILE}
echo 'query_cache_size = 268435456' >> ${MYSQL_CONF_FILE}
echo 'tmp_table_size = 268435456' >> ${MYSQL_CONF_FILE}
echo 'innodb_buffer_pool_size = 536870912' >> ${MYSQL_CONF_FILE}
echo 'innodb_log_buffer_size = 268435456' >> ${MYSQL_CONF_FILE}
echo 'sort_buffer_size = 1048576' >> ${MYSQL_CONF_FILE}
echo 'read_buffer_size = 2097152' >> ${MYSQL_CONF_FILE}
echo 'read_rnd_buffer_size = 1048576' >> ${MYSQL_CONF_FILE}
echo 'join_buffer_size = 2097152' >> ${MYSQL_CONF_FILE}
echo 'thread_stack = 393216' >> ${MYSQL_CONF_FILE}
echo 'binlog_cache_size = 196608' >> ${MYSQL_CONF_FILE}
echo 'thread_cache_size = 192' >> ${MYSQL_CONF_FILE}
echo 'table_open_cache = 1024' >> ${MYSQL_CONF_FILE}
echo 'character_set_server=utf8mb4' >> ${MYSQL_CONF_FILE}
echo 'collation_server=utf8mb4_unicode_ci' >> ${MYSQL_CONF_FILE}
# 安装 MySQL 5.6
MYSQL_PORT=$(generate_random_port)
MYSQL_ROOT_PASSWORD=$(generate_random_password)
MYSQL_DATA_DIR=$(generate_random_data_dir "mysql")
echo 'Microi:MySQL 将在端口 '${MYSQL_PORT}' 上安装,root 密码:'${MYSQL_ROOT_PASSWORD},数据目录:${MYSQL_DATA_DIR}
docker pull registry.cn-hangzhou.aliyuncs.com/microios/mysql5.6:latest
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name microi-install-mysql56 -p ${MYSQL_PORT}:3306 \
-v ${MYSQL_DATA_DIR}:/var/lib/mysql \
-v ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/my_microi.cnf \
-e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
-e MYSQL_TIME_ZONE=Asia/Shanghai \
-d registry.cn-hangzhou.aliyuncs.com/microios/mysql5.6:latest
# 安装 Redis 6.2
REDIS_PORT=$(generate_random_port)
REDIS_PASSWORD=$(generate_random_password)
echo 'Microi:Redis 将在端口 '${REDIS_PORT}' 上安装,密码:'${REDIS_PASSWORD}
docker pull registry.cn-hangzhou.aliyuncs.com/microios/redis6.2:latest
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name microi-install-redis -p ${REDIS_PORT}:6379 \
-e REDIS_PASSWORD=${REDIS_PASSWORD} \
-d registry.cn-hangzhou.aliyuncs.com/microios/redis6.2:latest
redis-server --requirepass ${REDIS_PASSWORD}
# 等待 MySQL 容器启动
echo 'Microi:等待 MySQL 容器启动...'
sleep 5
# 检查 MySQL 是否可以连接
echo 'Microi:检查 MySQL 是否可以连接...'
for i in {1..10}; do
docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1" > /dev/null 2>&1 && break
sleep 1
done
# 如果 MySQL 服务启动失败,则退出脚本
if [ $i -eq 60 ]; then
echo 'Microi:MySQL 服务启动失败,脚本退出。'
exit 1
fi
# 允许 root 用户从任意主机连接
echo 'Microi:允许 root 用户从任意主机连接'
docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "USE mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' WITH GRANT OPTION;"
docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"
# 下载并解压 MySQL 数据库备份
SQL_ZIP_URL="https://static.itdos.com/download/microi/file/mysql5.6.50-bak-latest.sql.zip"
SQL_ZIP_FILE="/tmp/mysql_backup.zip"
SQL_DIR="/tmp/mysql_backup"
SQL_FILE="${SQL_DIR}/microi_demo.sql"
# 创建目录
mkdir -p ${SQL_DIR}
echo 'Microi:创建目录:'${SQL_DIR}
# 下载 ZIP 文件
curl -o ${SQL_ZIP_FILE} ${SQL_ZIP_URL}
echo 'Microi:下载 ZIP 文件:'${SQL_ZIP_FILE}
# 解压 ZIP 文件并覆盖现有文件
unzip -o -d ${SQL_DIR} ${SQL_ZIP_FILE}
echo 'Microi:解压 ZIP 文件到:'${SQL_DIR}
# 创建数据库
echo 'Microi:创建数据库 microi_demo'
docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "CREATE DATABASE IF NOT EXISTS microi_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 还原 MySQL 数据库备份
echo 'Microi:还原 MySQL 数据库备份:'${SQL_FILE}
docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} microi_demo < ${SQL_FILE}
# 安装 MongoDB
MONGO_PORT=$(generate_random_port)
MONGO_ROOT_PASSWORD=$(generate_random_password)
MONGO_DATA_DIR=$(generate_random_data_dir "mongodb")
echo 'Microi:MongoDB 将在端口 '${MONGO_PORT}' 上安装,root 密码:'${MONGO_ROOT_PASSWORD},数据目录:${MONGO_DATA_DIR}
docker pull registry.cn-hangzhou.aliyuncs.com/microios/mongo:latest
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name microi-install-mongodb -p ${MONGO_PORT}:27017 \
-v ${MONGO_DATA_DIR}:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD} \
-d registry.cn-hangzhou.aliyuncs.com/microios/mongo:latest
# 安装 MinIO
MINIO_PORT=$(generate_random_port)
MINIO_CONSOLE_PORT=$(generate_random_port)
MINIO_ACCESS_KEY=$(generate_random_password)
MINIO_SECRET_KEY=$(generate_random_password)
MINIO_DATA_DIR=$(generate_random_data_dir "minio")
echo 'Microi:MinIO 将在端口 '${MINIO_PORT}' 和控制台端口 '${MINIO_CONSOLE_PORT}' 上安装,access key: '${MINIO_ACCESS_KEY}',secret key: '${MINIO_SECRET_KEY},数据目录:${MINIO_DATA_DIR}
docker pull registry.cn-hangzhou.aliyuncs.com/microios/minio:latest
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name microi-install-minio -p ${MINIO_PORT}:9000 -p ${MINIO_CONSOLE_PORT}:9001 \
-v ${MINIO_DATA_DIR}:/data \
-v ${MINIO_DATA_DIR}/config:/root/.minio \
-e "MINIO_ROOT_USER=${MINIO_ACCESS_KEY}" \
-e "MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY}" \
-d registry.cn-hangzhou.aliyuncs.com/microios/minio:latest server /data --console-address ":9001"
# 拉取并安装后端 microi-api 接口系统
API_PORT=$(generate_random_port)
API_IMAGE="registry.cn-hangzhou.aliyuncs.com/microios/microi-api:latest"
API_CONTAINER_NAME="microi-install-api"
OS_CLIENT_DB_CONN="Data Source=${LAN_IP};Database=microi_demo;User Id=root;Password=${MYSQL_ROOT_PASSWORD};Port=${MYSQL_PORT};Convert Zero Datetime=True;Allow Zero Datetime=True;Charset=utf8mb4;Max Pool Size=500;sslmode=None;"
echo 'Microi:拉取并安装后端 microi-api 接口系统:'${API_IMAGE}
docker pull ${API_IMAGE}
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name ${API_CONTAINER_NAME} -p ${API_PORT}:80 \
-e "OsClient=iTdos" \
-e "OsClientType=Product" \
-e "OsClientNetwork=Internal" \
-e "OsClientDbConn=${OS_CLIENT_DB_CONN}" \
-e "OsClientRedisHost=${LAN_IP}" \
-e "OsClientRedisPort=${REDIS_PORT}" \
-e "OsClientRedisPwd=${REDIS_PASSWORD}" \
-e "AuthServer=http://${LAN_IP}:${API_PORT}" \
-v /etc/localtime:/etc/localtime \
-v /usr/share/fonts:/usr/share/fonts \
-d ${API_IMAGE}
# 拉取并安装前端传统界面
VUE_PORT=$(generate_random_port)
VUE_IMAGE="registry.cn-hangzhou.aliyuncs.com/microios/microi-client:latest"
VUE_CONTAINER_NAME="microi-install-client"
echo 'Microi:拉取并安装前端传统界面:'${VUE_IMAGE}
docker pull ${VUE_IMAGE}
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name ${VUE_CONTAINER_NAME} -p ${VUE_PORT}:80 \
-e "OsClient=iTdos" \
-e "ApiBase=http://${ACCESS_IP}:${API_PORT}" \
-v /etc/localtime:/etc/localtime \
-v /usr/share/fonts:/usr/share/fonts \
-d ${VUE_IMAGE}
# 拉取并安装前端 WebOS 操作系统
WEBOS_PORT=$(generate_random_port)
WEBOS_IMAGE="registry.cn-hangzhou.aliyuncs.com/microios/microi-os:latest"
WEBOS_CONTAINER_NAME="microi-install-os"
echo 'Microi:拉取并安装前端 WebOS 操作系统:'${WEBOS_IMAGE}
docker pull ${WEBOS_IMAGE}
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name ${WEBOS_CONTAINER_NAME} -p ${WEBOS_PORT}:80 \
-e "OsClient=iTdos" \
-e "ApiBase=http://${ACCESS_IP}:${API_PORT}" \
-v /etc/localtime:/etc/localtime \
-v /usr/share/fonts:/usr/share/fonts \
-d ${WEBOS_IMAGE}
# 安装 Watchtower
WATCHTOWER_CONTAINER_NAME="microi-install-watchtower"
echo 'Microi:安装 Watchtower 以自动更新 API、Vue 和 WebOS 容器'
docker pull registry.cn-hangzhou.aliyuncs.com/microios/watchtower:latest
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
--name ${WATCHTOWER_CONTAINER_NAME} -v /var/run/docker.sock:/var/run/docker.sock \
registry.cn-hangzhou.aliyuncs.com/microios/watchtower:latest ${API_CONTAINER_NAME} ${VUE_CONTAINER_NAME} ${WEBOS_CONTAINER_NAME}
# 输出所有服务的信息
echo -e "=================================================================="
echo 'Microi:所有服务已成功安装。'
echo 'Microi:前端传统界面访问地址:http://'$ACCESS_IP':'$VUE_PORT',账号:admin,密码:demo123456'
echo 'Microi:前端 WebOS 操作系统访问地址:http://'$ACCESS_IP':'$WEBOS_PORT',账号:admin,密码:demo123456'
echo 'Microi:Redis: 容器名称 microi-install-redis, 端口 '${REDIS_PORT}', 密码:'${REDIS_PASSWORD}
echo 'Microi:MySQL: 容器名称 microi-install-mysql56, 端口 '${MYSQL_PORT}', Root 密码:'${MYSQL_ROOT_PASSWORD}
echo 'Microi:MongoDB: 容器名称 microi-install-mongodb, 端口 '${MONGO_PORT}', Root 密码:'${MONGO_ROOT_PASSWORD}
echo 'Microi:MinIO: 容器名称 microi-install-minio, 端口 '${MINIO_PORT}', 控制台端口 '${MINIO_CONSOLE_PORT}', Access Key: '${MINIO_ACCESS_KEY}, Secret Key: ${MINIO_SECRET_KEY}
echo 'Microi:后端 microi-api 接口系统:容器名称 '${API_CONTAINER_NAME}', 端口 '${API_PORT}', 镜像:'${API_IMAGE}', 局域网 IP: '${LAN_IP}
echo 'Microi:前端传统界面:容器名称 '${VUE_CONTAINER_NAME}', 端口 '${VUE_PORT}', 镜像:'${VUE_IMAGE}', API URL: http://'${ACCESS_IP}':'${API_PORT}
echo 'Microi:前端 WebOS 操作系统:容器名称 '${WEBOS_CONTAINER_NAME}', 端口 '${WEBOS_PORT}', 镜像:'${WEBOS_IMAGE}', API URL: http://'${ACCESS_IP}':'${API_PORT}
echo 'Microi:Watchtower: 容器名称 '${WATCHTOWER_CONTAINER_NAME}', 已安装以自动更新 API、Vue 和 WebOS 容器'
echo -e "=================================================================="
打印引擎
基础组件包括表格、文本、键值文本、长文本、图片、条形码、横线、竖线、矩形、椭圆等。拓展组件涵盖常规单据表头(单据类型、订单编号、业务日期、平台名称、装订线)及客户信息(客户名称、客户电话)。

接口引擎
接口配置包含序号、名称、Key、自定义接口地址、启用状态、分布式锁 Key、匿名调用权限、角色接口说明、参数附件、创建时间及操作记录等信息。

成功案例
目前已有超过 50 家开发团队客户,基于该低代码平台研发的系统应用于数百家企业。典型场景包括:
- 房地产互联网平台(仿贝壳),涉及大量前端微服务定制。
- 大型电器 ERP,包含 300+ 表、100+ 模块,侧重后端定制。
- 多个服装 ERP,100+ 表,单人一个月完成,纯低代码实现。
- 物联网智能家居(亿级数据量处理)、植物工厂智能硬件控制。
- 集团、国企 OA 系统。
- 停车场、潮汐检测、固定资产、CRM 等平台。
- 四所大学实训课程。


