开源低代码平台-Microi吾码-一键安装使用(centos一键安装mysql+redis+mini ...

打印 上一主题 下一主题

主题 841|帖子 841|积分 2523

前言

   

  • 有小同伴提出他并不想在当地编译代码、打包镜像、上传镜像、安装服务器环境、安装docker容器等一系列繁琐的利用,见文章【开源低代码平台-Microi吾码-Docker摆设】
  • 因此博主编写了一键安装【mysql+redis+minio+mongodb+watchtower+低代码平台步伐】脚本
  CentOS7一键安装脚本

   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安装】,请根据现实环境输入g或n
  • 假如服务器没有docker环境,也会提示是否按y安装,虽然博主建议使用1Panel、宝塔之类的面板工具来管理服务器并安装docker,但假如您想快速开始就直接键入y吧
  • 安装乐成后,必须开放microi-api端口、前端传统界面端口、前端Web利用体系端口、MinIO端口
  安装乐成预览图


安装过程图


安装效果docker


脚本代码【有点东西:)】

   目前更新于2024-11-17 20:21,后续大概会经常更新
  1. #!/bin/bash
  2. echo 'Microi:当前一键脚本版本:2024-11-17 20:21'
  3. # 获取局域网IP
  4. LAN_IP=$(hostname -I | awk '{print $1}')
  5. echo 'Microi:获取局域网IP: '$LAN_IP
  6. # 获取公网IP
  7. PUBLIC_IP=$(curl -s ifconfig.me)
  8. echo 'Microi:获取公网IP: '$PUBLIC_IP
  9. # 询问用户安装类型
  10. echo 'Microi:您是想在公网访问系统还是内网访问?公网请提前做好端口开放。'
  11. echo 'Microi:输入 g 以公网IP安装,输入 n 以内网IP安装:'
  12. read -r install_type
  13. if [ "$install_type" == "g" ]; then
  14.   ACCESS_IP=$PUBLIC_IP
  15.   echo 'Microi:将以公网IP安装。'
  16. elif [ "$install_type" == "n" ]; then
  17.   ACCESS_IP=$LAN_IP
  18.   echo 'Microi:将以内网IP安装。'
  19. else
  20.   echo 'Microi:无效的输入,脚本退出。'
  21.   exit 1
  22. fi
  23. # 检查Docker是否安装
  24. if ! [ -x "$(command -v docker)" ]; then
  25.   echo 'Microi:您未安装docker,推荐使用1Panel、宝塔等面板工具来安装docker并管理您的服务器!'
  26.   echo 'Microi:是否立即安装Docker?(y/n)'
  27.   read -r answer
  28.   if [ "$answer" != "y" ]; then
  29.     echo 'Microi:安装取消,脚本退出。'
  30.     exit 1
  31.   fi
  32.   # 安装Docker
  33.   echo 'Microi:开始安装Docker...'
  34.   sudo yum update -y
  35.   sudo yum install -y yum-utils
  36.   sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  37.   sudo yum install -y docker-ce docker-ce-cli containerd.io
  38.   sudo systemctl start docker
  39.   sudo systemctl enable docker
  40.   echo 'Microi:Docker已成功安装。'
  41. fi
  42. # 配置Docker镜像加速器(现在太难找了,如果报错timeout就去阿里云申请一个自己私有的加速地址)
  43. DOCKER_ACCELERATOR="https://mirrors.aliyun.com/docker-ce/"
  44. echo 'Microi:配置Docker镜像加速器'
  45. sudo tee /etc/docker/daemon.json <<EOF
  46. {
  47.   "registry-mirrors": ["${DOCKER_ACCELERATOR}"]
  48. }
  49. EOF
  50. sudo systemctl daemon-reload
  51. sudo systemctl restart docker
  52. # 生成随机端口和密码函数
  53. echo 'Microi:生成随机端口和密码函数'
  54. generate_random_port() {
  55.   shuf -i 17777-65535 -n 1
  56. }
  57. generate_random_password() {
  58.   openssl rand -base64 12 | tr -dc 'A-Za-z0-9' | head -c16
  59. }
  60. # 生成随机数据目录
  61. generate_random_data_dir() {
  62.   local container_name="$1"
  63.   local dir="/home/data-${container_name}-$(openssl rand -hex 4)"
  64.   mkdir -p "${dir}"
  65.   echo "${dir}"
  66. }
  67. # 检查并提示用户手动删除已有容器
  68. echo 'Microi:检查并提示用户手动删除已有容器'
  69. if docker ps -a --format '{{.Names}}' | grep -q '^microi-install-'; then
  70.   echo 'Microi:脚本重复运行前,需要先通过命令【docker ps -a --format "{{.Names}}" | grep "^microi-install-" | xargs -r docker rm -f】删除所有相关容器后再重新运行,注意此操作将会删除数据库、MinIO文件,请谨慎操作'
  71.   exit 1
  72. fi
  73. # 创建 MySQL 配置文件
  74. MYSQL_CONF_FILE="/tmp/my_custom.cnf"
  75. echo '[mysqld]' > ${MYSQL_CONF_FILE}
  76. echo 'lower_case_table_names = 1' >> ${MYSQL_CONF_FILE}
  77. echo 'max_connections = 500' >> ${MYSQL_CONF_FILE}
  78. echo 'key_buffer_size = 268435456' >> ${MYSQL_CONF_FILE}
  79. echo 'query_cache_size = 268435456' >> ${MYSQL_CONF_FILE}
  80. echo 'tmp_table_size = 268435456' >> ${MYSQL_CONF_FILE}
  81. echo 'innodb_buffer_pool_size = 536870912' >> ${MYSQL_CONF_FILE}
  82. echo 'innodb_log_buffer_size = 268435456' >> ${MYSQL_CONF_FILE}
  83. echo 'sort_buffer_size = 1048576' >> ${MYSQL_CONF_FILE}
  84. echo 'read_buffer_size = 2097152' >> ${MYSQL_CONF_FILE}
  85. echo 'read_rnd_buffer_size = 1048576' >> ${MYSQL_CONF_FILE}
  86. echo 'join_buffer_size = 2097152' >> ${MYSQL_CONF_FILE}
  87. echo 'thread_stack = 393216' >> ${MYSQL_CONF_FILE}
  88. echo 'binlog_cache_size = 196608' >> ${MYSQL_CONF_FILE}
  89. echo 'thread_cache_size = 192' >> ${MYSQL_CONF_FILE}
  90. echo 'table_open_cache = 1024' >> ${MYSQL_CONF_FILE}
  91. # 安装MySQL 5.6
  92. MYSQL_PORT=$(generate_random_port)
  93. MYSQL_ROOT_PASSWORD=$(generate_random_password)
  94. MYSQL_DATA_DIR=$(generate_random_data_dir "mysql")
  95. echo 'Microi:MySQL 将在端口 '${MYSQL_PORT}' 上安装,root 密码: '${MYSQL_ROOT_PASSWORD},数据目录: ${MYSQL_DATA_DIR}
  96. docker pull registry.cn-hangzhou.aliyuncs.com/microios/mysql5.6:latest
  97. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  98.   --name microi-install-mysql56 -p ${MYSQL_PORT}:3306 \
  99.   -v ${MYSQL_DATA_DIR}:/var/lib/mysql \
  100.   -v ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/my_custom.cnf \
  101.   -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
  102.   -e MYSQL_INIT_COMMAND="SET GLOBAL key_buffer_size=268435456; \
  103.                         SET GLOBAL query_cache_size=268435456; \
  104.                         SET GLOBAL tmp_table_size=268435456; \
  105.                         SET GLOBAL innodb_buffer_pool_size=536870912; \
  106.                         SET GLOBAL innodb_log_buffer_size=268435456; \
  107.                         SET GLOBAL sort_buffer_size=1048576; \
  108.                         SET GLOBAL read_buffer_size=2097152; \
  109.                         SET GLOBAL read_rnd_buffer_size=1048576; \
  110.                         SET GLOBAL join_buffer_size=2097152; \
  111.                         SET GLOBAL thread_stack=393216; \
  112.                         SET GLOBAL binlog_cache_size=196608; \
  113.                         SET GLOBAL thread_cache_size=192; \
  114.                         SET GLOBAL table_open_cache=1024; \
  115.                         SET GLOBAL character_set_server = 'utf8mb4'; \
  116.                         SET GLOBAL collation_server = 'utf8mb4_unicode_ci'; \
  117.                         SET GLOBAL time_zone = 'Asia/Shanghai'; \
  118.                         SET GLOBAL max_connections=500;" \
  119.   -e MYSQL_LOWER_CASE_TABLE_NAMES=1 \
  120.   -e MYSQL_CHARACTER_SET_SERVER=utf8mb4 \
  121.   -e MYSQL_COLLATION_SERVER=utf8mb4_unicode_ci \
  122.   -e TZ=Asia/Shanghai \
  123.   -d registry.cn-hangzhou.aliyuncs.com/microios/mysql5.6:latest
  124. # 安装Redis 6.2
  125. REDIS_PORT=$(generate_random_port)
  126. REDIS_PASSWORD=$(generate_random_password)
  127. echo 'Microi:Redis 将在端口 '${REDIS_PORT}' 上安装,密码: '${REDIS_PASSWORD}
  128. docker pull registry.cn-hangzhou.aliyuncs.com/microios/redis6.2:latest
  129. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  130.   --name microi-install-redis -p ${REDIS_PORT}:6379 \
  131.   -e REDIS_PASSWORD=${REDIS_PASSWORD} \
  132.   -d registry.cn-hangzhou.aliyuncs.com/microios/redis6.2:latest redis-server --requirepass ${REDIS_PASSWORD}
  133. # 等待MySQL容器启动
  134. echo 'Microi:等待MySQL容器启动...'
  135. sleep 5 # 等待5秒,可根据实际情况调整
  136. # 检查MySQL是否可以连接
  137. echo 'Microi:检查MySQL是否可以连接...'
  138. for i in {1..60}; do
  139.   docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1" > /dev/null 2>&1 && break
  140.   sleep 1
  141. done
  142. # 如果MySQL服务启动失败,则退出脚本
  143. if [ $i -eq 60 ]; then
  144.   echo 'Microi:MySQL服务启动失败,脚本退出。'
  145.   exit 1
  146. fi
  147. # 允许root用户从任意主机连接
  148. echo 'Microi:允许root用户从任意主机连接'
  149. 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;"
  150. docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"
  151. # 下载并解压MySQL数据库备份
  152. SQL_ZIP_URL="https://static.itdos.com/download/microi/file/mysql5.6.50-bak-latest.sql.zip"
  153. SQL_ZIP_FILE="/tmp/mysql_backup.zip"
  154. SQL_DIR="/tmp/mysql_backup"
  155. SQL_FILE="${SQL_DIR}/microi_demo.sql"
  156. # 创建目录
  157. mkdir -p ${SQL_DIR}
  158. echo 'Microi:创建目录: '${SQL_DIR}
  159. # 下载ZIP文件
  160. curl -o ${SQL_ZIP_FILE} ${SQL_ZIP_URL}
  161. echo 'Microi:下载ZIP文件: '${SQL_ZIP_FILE}
  162. # 解压ZIP文件并覆盖现有文件
  163. unzip -o -d ${SQL_DIR} ${SQL_ZIP_FILE}
  164. echo 'Microi:解压ZIP文件到: '${SQL_DIR}
  165. # 创建数据库
  166. echo 'Microi:创建数据库 microi_demo'
  167. 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;"
  168. # 还原MySQL数据库备份
  169. echo 'Microi:还原MySQL数据库备份: '${SQL_FILE}
  170. docker exec -i microi-install-mysql56 mysql -uroot -p${MYSQL_ROOT_PASSWORD} microi_demo < ${SQL_FILE}
  171. # 安装MongoDB
  172. MONGO_PORT=$(generate_random_port)
  173. MONGO_ROOT_PASSWORD=$(generate_random_password)
  174. MONGO_DATA_DIR=$(generate_random_data_dir "mongodb")
  175. echo 'Microi:MongoDB 将在端口 '${MONGO_PORT}' 上安装,root 密码: '${MONGO_ROOT_PASSWORD},数据目录: ${MONGO_DATA_DIR}
  176. docker pull registry.cn-hangzhou.aliyuncs.com/microios/mongo:latest
  177. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  178.   --name microi-install-mongodb -p ${MONGO_PORT}:27017 \
  179.   -v ${MONGO_DATA_DIR}:/data/db \
  180.   -e MONGO_INITDB_ROOT_USERNAME=root \
  181.   -e MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD} \
  182.   -d registry.cn-hangzhou.aliyuncs.com/microios/mongo:latest
  183. # 安装MinIO
  184. MINIO_PORT=$(generate_random_port)
  185. MINIO_CONSOLE_PORT=$(generate_random_port)
  186. MINIO_ACCESS_KEY=$(generate_random_password)
  187. MINIO_SECRET_KEY=$(generate_random_password)
  188. MINIO_DATA_DIR=$(generate_random_data_dir "minio")
  189. echo 'Microi:MinIO 将在端口 '${MINIO_PORT}' 和控制台端口 '${MINIO_CONSOLE_PORT}' 上安装,access key: '${MINIO_ACCESS_KEY}',secret key: '${MINIO_SECRET_KEY},数据目录: ${MINIO_DATA_DIR}
  190. docker pull registry.cn-hangzhou.aliyuncs.com/microios/minio:latest
  191. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  192.   --name microi-install-minio -p ${MINIO_PORT}:9000 -p ${MINIO_CONSOLE_PORT}:9001 \
  193.   -v ${MINIO_DATA_DIR}:/data \
  194.   -v ${MINIO_DATA_DIR}/config:/root/.minio \
  195.   -e "MINIO_ROOT_USER=${MINIO_ACCESS_KEY}" \
  196.   -e "MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY}" \
  197.   -d registry.cn-hangzhou.aliyuncs.com/microios/minio:latest server /data --console-address ":9001"
  198. # 拉取并安装后端microi-api接口系统
  199. API_PORT=$(generate_random_port)
  200. API_IMAGE="registry.cn-hangzhou.aliyuncs.com/microios/microi-api:latest"
  201. API_CONTAINER_NAME="microi-install-api"
  202. 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;"
  203. echo 'Microi:拉取并安装后端microi-api接口系统: '${API_IMAGE}
  204. docker pull ${API_IMAGE}
  205. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  206.   --name ${API_CONTAINER_NAME} -p ${API_PORT}:80 \
  207.   -e "OsClient=iTdos" \
  208.   -e "OsClientType=Product" \
  209.   -e "OsClientNetwork=Internal" \
  210.   -e "OsClientDbConn=${OS_CLIENT_DB_CONN}" \
  211.   -e "OsClientRedisHost=${LAN_IP}" \
  212.   -e "OsClientRedisPort=${REDIS_PORT}" \
  213.   -e "OsClientRedisPwd=${REDIS_PASSWORD}" \
  214.   -e "AuthServer=http://${LAN_IP}:${API_PORT}" \
  215.   -v /etc/localtime:/etc/localtime \
  216.   -v /usr/share/fonts:/usr/share/fonts \
  217.   -d ${API_IMAGE}
  218. # 拉取并安装前端传统界面
  219. VUE_PORT=$(generate_random_port)
  220. VUE_IMAGE="registry.cn-hangzhou.aliyuncs.com/microios/microi-client:latest"
  221. VUE_CONTAINER_NAME="microi-install-client"
  222. echo 'Microi:拉取并安装前端传统界面: '${VUE_IMAGE}
  223. docker pull ${VUE_IMAGE}
  224. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  225.   --name ${VUE_CONTAINER_NAME} -p ${VUE_PORT}:80 \
  226.   -e "OsClient=iTdos" \
  227.   -e "ApiBase=http://${ACCESS_IP}:${API_PORT}" \
  228.   -v /etc/localtime:/etc/localtime \
  229.   -v /usr/share/fonts:/usr/share/fonts \
  230.   -d ${VUE_IMAGE}
  231. # 拉取并安装前端WebOS操作系统
  232. WEBOS_PORT=$(generate_random_port)
  233. WEBOS_IMAGE="registry.cn-hangzhou.aliyuncs.com/microios/microi-os:latest"
  234. WEBOS_CONTAINER_NAME="microi-install-os"
  235. echo 'Microi:拉取并安装前端WebOS操作系统: '${WEBOS_IMAGE}
  236. docker pull ${WEBOS_IMAGE}
  237. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  238.   --name ${WEBOS_CONTAINER_NAME} -p ${WEBOS_PORT}:80 \
  239.   -e "OsClient=iTdos" \
  240.   -e "ApiBase=http://${ACCESS_IP}:${API_PORT}" \
  241.   -v /etc/localtime:/etc/localtime \
  242.   -v /usr/share/fonts:/usr/share/fonts \
  243.   -d ${WEBOS_IMAGE}
  244. # 安装Watchtower
  245. WATCHTOWER_CONTAINER_NAME="microi-install-watchtower"
  246. echo 'Microi:安装Watchtower以自动更新API、Vue和WebOS容器'
  247. docker pull registry.cn-hangzhou.aliyuncs.com/microios/watchtower:latest
  248. docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=10 --privileged=true \
  249.   --name ${WATCHTOWER_CONTAINER_NAME} -v /var/run/docker.sock:/var/run/docker.sock \
  250.   registry.cn-hangzhou.aliyuncs.com/microios/watchtower:latest ${API_CONTAINER_NAME} ${VUE_CONTAINER_NAME} ${WEBOS_CONTAINER_NAME}
  251. # 输出所有服务的信息
  252. echo -e "=================================================================="
  253. echo 'Microi:所有服务已成功安装。'
  254. echo 'Microi:前端传统界面访问地址: http://'$ACCESS_IP':'$VUE_PORT',账号: admin,密码: demo123456'
  255. echo 'Microi:前端WebOS操作系统访问地址: http://'$ACCESS_IP':'$WEBOS_PORT',账号: admin,密码: demo123456'
  256. echo 'Microi:Redis: 容器名称 microi-install-redis, 端口 '${REDIS_PORT}', 密码: '${REDIS_PASSWORD}
  257. echo 'Microi:MySQL: 容器名称 microi-install-mysql56, 端口 '${MYSQL_PORT}', Root 密码: '${MYSQL_ROOT_PASSWORD}
  258. echo 'Microi:MongoDB: 容器名称 microi-install-mongodb, 端口 '${MONGO_PORT}', Root 密码: '${MONGO_ROOT_PASSWORD}
  259. echo 'Microi:MinIO: 容器名称 microi-install-minio, 端口 '${MINIO_PORT}', 控制台端口 '${MINIO_CONSOLE_PORT}', Access Key: '${MINIO_ACCESS_KEY}, Secret Key: ${MINIO_SECRET_KEY}
  260. echo 'Microi:后端microi-api接口系统: 容器名称 '${API_CONTAINER_NAME}', 端口 '${API_PORT}', 镜像: '${API_IMAGE}', 局域网IP: '${LAN_IP}
  261. echo 'Microi:前端传统界面: 容器名称 '${VUE_CONTAINER_NAME}', 端口 '${VUE_PORT}', 镜像: '${VUE_IMAGE}', API URL: http://'${ACCESS_IP}':'${API_PORT}
  262. echo 'Microi:前端WebOS操作系统: 容器名称 '${WEBOS_CONTAINER_NAME}', 端口 '${WEBOS_PORT}', 镜像: '${WEBOS_IMAGE}', API URL: http://'${ACCESS_IP}':'${API_PORT}
  263. echo 'Microi:Watchtower: 容器名称 '${WATCHTOWER_CONTAINER_NAME}', 已安装以自动更新API、Vue和WebOS容器'
  264. echo -e "=================================================================="
复制代码
踩过的坑

   

  • 有些服务器走不了任何docker加速源,因此博主将redis、mysql、mongodb、minio、watchtower全部跟步伐一样打包上传到容器镜像服务。相关文章【记录将服务器上已安装好的mysql、redis等docker容器镜像发布到本身的阿里云容器镜像服务】
  • mysql指定表名不区分巨细写(lower_case_table_names=1)不支持环境变量,接纳特别办法实现
  • mysql性能处置惩罚
  • mysql主动创建数据库、还原数据库、设置root权限
  • mysql、minio等数据映射目录参加随机目录机制
  • 全部环境参加随机端口、随机帐号暗码机制
  • 脚本语法上的一些处置惩罚
  • 必须让用户手动确认公网IP安装或内网IP安装,懂的自然懂:)
  感谢浏览:)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表