likes
comments
collection
share

Java及依赖环境自动化部署

作者站长头像
站长
· 阅读数 85

1、需求

部分项目客户无外网环境,可能需要外地出差部署项目,而公司需要做一个能够自动化部署程序以及依赖程序的东西,这样以后任何项目都不用去客户那儿部署,于是就有了该篇博客作为踩坑记录。花了几天时间,高强度搜索了不少文章,本地测试完毕,请放心使用。项目主要部署在windows环境下,且注册为服务自启动。

2、软件准备

下面软件版本均为我个人使用版本

免安装版MySQL5.6.30 downloads.mysql.com/archives/co…

Redis3.2.100 github.com/microsoftar…

Nginx1.23.3 nginx.org/en/download…

免安装版Chrome121.0.6149.0 vikyd.github.io/download-ch…

免安装版JDK1.8,这个oracle官网我并未找到免安装,自行网上寻找即可

InnoSetup www.jrsoftware.org/isdl.php windows打包工具,可将软件打包exe

WinSW github.com/kohsuke/win… 可将程序注册为系统服务的工具

DirectXRepairP 4.3.0.20888 这是一个DirecX修复工具,而且可以更新C++环境,这里有个大坑,使用WinSW时候,Win10,Windows Server2019会提示缺少msvcr100.dll等等文件,使用该软件即可修复。低版本不行,最起码高于等于我使用的版本,这个大家自行寻找。实在找不到留言,我用云盘共享给你

打包后的Java程序,miracle.jar,前端文件夹dist

3、测试操作系统

使用虚拟机实际测试了Win10,Windows Server2019

4、步骤

将以上所有文件放入一个文件夹内,再放入一个ico文件,用于exe文件图标,网上搜个ico在线制作网站即可制作。下图miracle_server放入Java程序包,前端dist文件夹,WinSW.exe。同时nginx-1.23.3文件夹内也放入一个WinSW.exe

Java及依赖环境自动化部署 进入miracle_server,改名WinSW.exe为miracle.exe,创建xml文件miracle.xml,xml文件内容如下

Java及依赖环境自动化部署

这里有个坑,红框内不能直接使用java,在win11下是可以拿到环境变量,但是win10和windows server2019下无法获取到环境变量,winsw的github中issues也有提出和解决github.com/winsw/winsw…

所以这里必须填写绝对路径的java.exe,完成之后如下图所示

Java及依赖环境自动化部署

返回miracle目录,创建第一个bat文件install_java_evn.bat,用于配置JDK环境变量

Java及依赖环境自动化部署

创建第二bat文件install_mysql.bat,用于初始化MySQL

Java及依赖环境自动化部署

这里需要说明的是,mysql -uroot -p123456 < 该命令用于执行SQL文件,且该SQL文件内必须有USE 指定数据库,如,USE miracle; 不然无法执行,我这里是先用navicat导出SQL脚本文件,然后给文件头加上 create database miracle; use miracle; 即可使用

创建第三个bat文件install_redis.bat,用于初始化redis

Java及依赖环境自动化部署

进入nginx-1.23.3文件,将WinSW.exe改名为nginx-server.exe,然后创建一个nginx-server.xml文件,内容如下

Java及依赖环境自动化部署

返回miracle目录,创建第四个bat文件install_nginx.bat,用于初始化nginx

Java及依赖环境自动化部署

创建第五个bat文件install_miracle.bat,用于初始化Java程序

Java及依赖环境自动化部署

创建第六个bat文件install_directx.bat,这个我主要是用于安装完成之后,卡主安装程序,让使用者先打开DirectXRepairP软件,完善DLL文件。当然,该步骤也可以忽略掉,先完善DLL文件,然后在启动安装程序exe即可。

Java及依赖环境自动化部署

其中的CHCP 65001用于修改编码,不然命令行中文乱码。

打开Inno Setup软件,第一次会让你打开iss脚本文件,该脚本文件则是程序用于创建exe的步骤,咱们可以打开它自带的一个,然后复制拷贝到miracle文件夹下,再修改其中的脚本内容即可,我的脚本内容如下

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "miracle"        
#define MyAppVersion "1.1.1"           
#define MyAppPublisher "miracle_silence"
#define MyAppURL ""
 
; 基本配置
[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.)
; 单独标识,可以通过 工具自动生成    点击工具--- 生成GUID{3077320F-A63B-4E05-A822-96E5B07CB7F1}
*AppId={{3077320F-A63B-4E05-A822-96E5B07CB7F1}}
AppName={#MyAppName}*
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 默认安装路径
DefaultDirName=C:\miracle
DefaultGroupName={#MyAppName}
; 软件名称
OutputBaseFilename=miracle
; 软件图标
SetupIconFile=E:\miracle\miracle.ico 
; 压缩方式  
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理员权限才能安装
PrivilegesRequired=admin
; 安装密码
;Password=itdragon
; 开启加密,可能还需要一个dll文件
;Encryption=yes
 
; 语言配置 
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
 
; 安装文件
[Files]
; 安装部署的源文件路径
 Source: "E:\miracle\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

 
; 快捷键
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" 
Name: "{commondesktop}\miracle网站"; Filename: <http://localhost:10086>

[INI]

 
; 程序安装成功后执行以下服务脚本
[Run]             
Filename: "{app}\install_directx.bat";
Filename: "{app}\install_mysql.bat";
Filename: "{app}\install_java_evn.bat"; 
Filename: "{app}\install_redis.bat";
Filename: "{app}\install_nginx.bat";    
Filename: "{app}\install_miracle.bat";

 ; 指定在卸载第一步要执行以下服务脚本
[UninstallRun]

;卸载程序删除除用 [Files] 或 [Dirs] 条目安装/创建外的其它文件或目录
[UninstallDelete]

最终目录如下

Java及依赖环境自动化部署

右键管理员运行Inno Setup,打开miracle.ico文件,Build—>Compile,我这一套下来,大约等了20分左右,在此期间不要打开miracle里面的任何文件,不然编译过程会报错,提示文件其它地方使用,不幸的是,我遇到好几次,每次都是在90%左右报错。。。完成之后会在miracle文件夹下生成Output文件里面就有我们需要的exe文件了。将该文件放到客户电脑里,右键管理员运行即可。

5、更新

考虑到后期还需要给软件进行更新,于是又创建了两个bat文件,很简单,我们只更换jar包和dist文件夹即可。

第七个bat文件卸载程序.bat,用于卸载Java程序注册服务

Java及依赖环境自动化部署

第八个bat文件注册程序.bat,将Java程序重新注册服务

Java及依赖环境自动化部署

先执行卸载程序.bat,然后删除jar包,dist,将新的jar包,dist放入,执行注册程序.bat

6、补充

在做的过程中,想到过使用docker也可以一键部署,如果能找到免安装版docker,放入制作好的镜像,运行容器,而且该方式不需要很注意宿主机的操作系统,省去了不少适配系统问题。后续有时间抽空做一做。

转载自:https://juejin.cn/post/7356129837960036403
评论
请登录