Microi 吾码开源低代码平台部署与实战指南
低代码开发概览
传统开发与低代码对比
低代码平台通过可视化界面和预建模块显著提升开发速度,大幅缩短周期,适合快速迭代。传统开发需从零编写代码,架构复杂且耗时较长。
低代码与零代码的区别
低代码保留了扩展性,能构建新应用应对业务增长;零代码扩展性较弱,难以满足规模化需求。低代码需要基础编程知识(变量、循环等),有助于技术提升;零代码门槛虽低,但不利于技能成长。

平台简介:Microi 吾码
支持多人协作,无人数限制,表单数和数据量灵活配置。具备跨平台、跨数据库能力,支持自定义 Vue 组件嵌入。集成 Google V8 引擎,允许使用 JavaScript 在线编写后端接口,支持 GET/POST 请求及文件操作。内置微服务、组件库和界面模板,支持一键加载第三方数据库。

官方地址: https://microi.net Gitee 开源地址: https://gitee.com/ITdos/microi.net
核心特性
技术架构
采用 .NET8 + Redis + MySql/SqlServer/Oracle + Vue2/3 + Element-UI/Plus 架构。支持分布式部署,集成消息队列、搜索引擎、MongoDB 等组件。
功能亮点
- 多语言支持:前后端均支持在线配置多语言。
- 细粒度权限:控制到表、字段、菜单、按钮及接口级别。
- 界面自定义:提供自定义引擎,灵活定制 UI。

快速部署指南
环境准备
建议使用 CentOS 7 及以上系统,确保已安装 Docker。若未安装,脚本会提示是否自动安装。
一键安装脚本
以下脚本会自动拉取 MySQL、Redis、MongoDB、MinIO 及 API 和前端容器。
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)或内网(n)IP 安装。
- 若服务器无 Docker,脚本会询问是否安装,建议直接输入 y 快速开始。
- 安装成功后需开放 microi-api、前端端口、WebOS 端口及 MinIO 端口。
- 脚本默认配置适用于 4G 内存服务器,2G 内存建议调整配置后再运行。重复执行前需删除旧容器,否则数据会丢失。
安装完成后,终端将输出各服务的访问地址、账号密码及端口信息。

完整脚本逻辑
脚本内部包含以下关键步骤:
- 检测并安装 Docker 及镜像加速器。
- 生成随机端口和密码,避免冲突。
- 启动 MySQL 5.6、Redis 6.2、MongoDB、MinIO 容器。
- 初始化数据库并导入演示数据。
- 启动微服务 API、Vue 前端及 WebOS 操作系统。
- 配置 Watchtower 实现容器自动更新。
以下是脚本的核心部分(简化展示):
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 镜像加速器(现在太难找了,如果报错 timeout 就去阿里云申请一个自己私有的加速地址) 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 # 生成随机端口和密码函数 echo 'Microi:生成随机端口和密码函数' 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 # 等待 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、自定义地址、分布式锁及角色权限。可响应文件、读取文件等操作。

应用场景
目前已应用于 50+ 开发团队客户,覆盖房地产、ERP、物联网、OA 等多个领域。例如服装 ERP 可在 1 个月内完成纯低代码实现,大型电器 ERP 支持 300+ 表结构。


