windows环境使用InnoSetup一键打包部署springcloud微服务项目(jdk+mysql+redis+minio+nacos+nginx)

windows环境使用InnoSetup一键打包部署springcloud微服务项目(jdk+mysql+redis+minio+nacos+nginx)

前言

springcloud微服务项目需要用到的组件非常多,在Linux环境下我们可以使用docker部署还算比较方便,但是鉴于docker对于windows环境的支持不是很友好,传统的部署方式需要安装很多个软件才能支持微服务项目的运行(jdk、mysql、redis、nacos等等),本文介绍了通过Inno setup打包所有环境成一个可以一键部署的exe文件,可以快速进行springcloud项目的部署

准备工作

  • jdk用的1.8免安装版,又称解压版或者绿色版,自行下载解压 下载地址
  • mysql5.7解压版 下载地址
  • redis解压版
  • nacos-server-1.3.0解压版
  • minio解压版
  • nginx解压版
  • Inno Setup6 下载地址
  • 纯净的win10系统(建议在虚拟机安装win10进行测试,失败可直接重置系统)
    以上软件 redis nacos minio niginx 本身就是解压直接就能用,请自行到网上下载。
    所有软件准备好,文件目录结构如下(只显示需要自己添加的文件,其他如jdk,mysql为正常解压后的软件目录)
    文件目录结构
    其中 msvcp120.dll msvcr120.dll 隶属Visual Studio 2013运行库一般在C:\Windows\System32 目录中就有,这两个文件是为了防止安装在一个纯净的系统中安装mysql时有可能会缺少文件而报错,提前打包进去然后复制到客户机的C:\Windows\System32中

编写脚本

my.ini

[client]

port=3306

default-character-set=utf8

[mysqld]

wait_timeout=2880000

interactive_timeout = 2880000

max_allowed_packet = 100M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

install-mysql.bat

cd "%~dp0%"

set pwd=%~dp0%

xcopy "%pwd%install\msvcp120.dll"  C:\Windows\System32  /Y

xcopy "%pwd%install\msvcr120.dll"   C:\Windows\System32  /Y

install.bat

@echo off
title 软件配置安装中,请不要手动关闭
color 0a
echo 配置安装环境中...
setx /M JAVA_HOME "%~dp0%jdk"
setx /M MYSQL_HOME "%~dp0%mysql"
setx /M REDIS_HOME "%~dp0%redis"
setx /M CLASS_PATH ".;%%JAVA_HOME%%\lib;"
setx /M PATH  "%PATH%;%%JAVA_HOME%%\bin;%%MYSQL_HOME%%\bin;%%REDIS_HOME%%"

echo 环境变量配置成功

cd "%~dp0%"

echo 开始安装数据库
cd mysql
bin\mysqld.exe install
bin\mysqld.exe --initialize-insecure --user=mysql
net start MySQL
sc config MySQL start= auto
echo 数据库启动中...
ping -n 3 127.1>nul
echo 初始化数据库...
bin\mysqladmin.exe -u root password root

echo 创建数据库
bin\mysql.exe -u root -proot < sqlfile\createDb.sql
echo 初始化数据库表
bin\mysql.exe -u root -proot < sqlfile\smartmag-cloud.sql
bin\mysql.exe -u root -proot < sqlfile\smartmag-config.sql
cd ..
echo 数据库安装完成

echo 开始安装缓存服务
cd redis
redis-server.exe --service-install
echo 缓存服务启动中
redis-server.exe --service-start
ping -n 3 127.1>nul
cd ..
echo 缓存服务安装完成

echo 开始安装文件存储服务
cd minio
MinioServer.exe install
sc start MinioServer
cd ..
echo 文件存储服务安装完成

echo 开始安装nacos服务
cd nacos\bin
nacos.exe install
sc start nacos
cd ..\..\
echo nacos服务安装完成

echo 开始安装nginx
cd nginx
nginxServer.exe install
sc start nginx
cd ..\
echo 安装nginx完成

StartBigUnion.bat

@echo off
echo.
echo BigUnion START...
echo.
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限

:: 进入目录文件夹
cd "%~dp0%"
cd jar


:: 执行多个javaw命令,但是无法输出日志

echo  bigunion-auth START...
start javaw -jar -Dfile.encoding=utf-8 -Xms800m -Xmx1024m  XXXX-1.0.0.jar

echo  bigunion-gateway START...
start javaw -jar -Dfile.encoding=utf-8 -Xms800m -Xmx1024m  XXXX-1.0.0.jar

echo  bigunion-system START...
start javaw -jar -Dfile.encoding=utf-8 -Xms800m -Xmx1024m  XXXX-1.0.0.jar


pause

StopBigUnion.bat

@echo off
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限
set port=8002 8012 8022
for /f "tokens=1-5" %%a in ('netstat -ano^|findstr ":%port%"') do (
    echo PID:%%e is running,kill the process [%%e] who use the port [%%b]
    taskkill /F /pid %%e
)
pause

使用winsw让windows程序成为服务后台运行

  • winsw可以将Windows上的任何一个程序注册为服务,如果不需要,也可以方便的卸载服务。下载地址
  • 将下载后端WinSW.exe复制到自定义的目录,并重命名为自己想命名的服务名称如复制到minio目录中重命名为MinioServer.exe
  • 同目录下创建minio-server.xml。特别注意,xml和exe必须同名
  • minio-server.xml内容如下
<service>
    <id>MinioServer</id>
    <name>MinioServer</name>
    <description>minio文件存储服务器</description>
    <!-- 可设置环境变量 -->
    <env name="%~dp0%" value="%BASE%"/>
    <executable>%BASE%\minio.exe</executable>
    <arguments>server "%BASE%\data"</arguments>
    <!-- <logmode>rotate</logmode> -->
    <logpath>%BASE%\logs</logpath>
    <log mode="roll-by-size-time">
      <sizeThreshold>10240</sizeThreshold>
      <pattern>yyyyMMdd</pattern>
      <autoRollAtTime>00:00:00</autoRollAtTime>
      <zipOlderThanNumDays>5</zipOlderThanNumDays>
      <zipDateFormat>yyyyMMdd</zipDateFormat>
    </log>
</service>

nacos,nginx制作方式同理

nacos.xml

<service>
    <id>nacos</id>
    <name>nacos</name>
    <description>nacos</description>
    <!-- 可设置环境变量 -->
    <env name="%~dp0%" value="%BASE%"/>
    <executable>%BASE%\startup.cmd</executable>
    <arguments>m standalone</arguments>
    <!-- <logmode>rotate</logmode> -->
    <logpath>%BASE%\logs</logpath>
    <log mode="roll-by-size-time">
      <sizeThreshold>10240</sizeThreshold>
      <pattern>yyyyMMdd</pattern>
      <autoRollAtTime>00:00:00</autoRollAtTime>
      <zipOlderThanNumDays>5</zipOlderThanNumDays>
      <zipDateFormat>yyyyMMdd</zipDateFormat>
    </log>
</service>

nginxServer.xml

<service>
    <id>nginx</id>
    <name>nginx</name>
    <description>nginx</description>
    <!-- 可设置环境变量 -->
    <env name="%~dp0%" value="%BASE%"/>
    <executable>%BASE%\nginx.exe</executable>
    <!-- <logmode>rotate</logmode> -->
    <logpath>%BASE%\logs</logpath>
    <log mode="roll-by-size-time">
      <sizeThreshold>10240</sizeThreshold>
      <pattern>yyyyMMdd</pattern>
      <autoRollAtTime>00:00:00</autoRollAtTime>
      <zipOlderThanNumDays>5</zipOlderThanNumDays>
      <zipDateFormat>yyyyMMdd</zipDateFormat>
    </log>
</service>

安装与启动的命令已经在install.bat脚本中写入,如下(服务名与xml文件中配置的一致)
在这里插入图片描述

Inno Setup使用

  • 新建一个.iss后缀名的文件,编辑完成后,点击上方Build——>Compile,等待完成打包,输出在同级目录下的Output文件
#define MyAppName "xxx平台"        
#define MyAppVersion "V1.0"           
#define MyAppPublisher "公司名称"
#define MyAppURL "http://www.baidu.com"

; 基本配置
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
; 单独标识,可以通过innosetup-QSP-6.0.5.exe 工具自动生成
AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 默认安装路径
DefaultDirName=C:\Program Files\program\
DefaultGroupName={#MyAppName}
; 软件名称
OutputBaseFilename=smartmagWebEnd
; 压缩方式  
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理员权限才能安装
PrivilegesRequired=admin
; 安装密码
;Password=password
; 开启加密,需要一个iscrypt.dll文件,网上有下载的
;Encryption=yes

; 语言配置 
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"

; 安装文件
[Files]
; 安装部署的源文件路径
; 这里是你的文件路径我的是在D盘这个目录
Source: "D:\data\systeminstall\program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

; 快捷键
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\XXX平台-首页"; Filename: http://localhost:9001
Name: "{commondesktop}\运行程序"; Filename: "{app}\tool\StartBigUnion.bat" 
Name: "{commondesktop}\关闭程序"; Filename: "{app}\tool\StopBigUnion.bat" 
Name: "{commondesktop}\安装须知"; Filename: "{app}\tool\安装须知.txt" 

; 程序安装成功后执行脚本
[Run]     
Filename: "{app}\install-mysql.bat";
Filename: "{app}\install.bat";

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone

; 程序卸载成功后执行脚本
[UninstallRun]
Filename:"{app}\uninstall\uninstall.bat";

; 程序卸载成功后删除文件
; 卸载程序可自己补充
[UninstallDelete]
Type:filesandordirs;Name:"{app}\mysql"
Type:filesandordirs;Name:"{app}\install"
Type:filesandordirs;Name:"{app}\uninstall"
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值