windows一键部署java项目php
由于公司需求,要在windows的环境上作一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址。就像安装软件同样将jdk,tomcat,mysql,influxdb,nginx安装并配置到系统上,顺便还要初始化一下数据。花了一周的时间,这里记录个人踩坑日志。html
磨刀不误砍柴工,选择好工具能够事半功倍。
一)、Inno Setup,一款为Windows程序提供的免费安装程序,经过它能够将须要的文件压缩打包成exe安装程序,而后像安装程序同样解压到另一个环境中。官网地址
二)、虚拟机,开两台虚拟机的做用:第一能够避免玩坏本身的电脑,第二能够保证每次测试安装的环境都是干净的系统,减小一些没必要要的麻烦。对电脑的性能有点要求。
三)、JDK1.8,MySQL5.7,Tomcat8,Nginx,InfluxDB等,这是须要压缩的文件资源。
四)、Windows Server 2012 R2,你值得拥有,用2008安装MySQL会很不顺。java
Inno Setup的模版几乎同样,经过官方提供的innosetup-QSP.exe 能够帮助咱们快速生成模版。但若是须要自定义界面,那你可就要挠挠头呢。好比我如今的需求是在安装的过程当中添加一个有输入框的界面,而且能将输入的值替换指定配置文件中的指定内容,安装成功后在桌面生成快捷键。
对于bat脚本语言很薄弱的我来讲这里有两个难点,但依葫芦画瓢仍是能够作出来的。
一)、Inno Setup的函数,在[Code]代码块中,Inno Setup提供了不少函数来折磨,不来知足咱们的需求。具体能够参考在线的文档
二)、须要用bat脚本配置jdk环境变量,安装部署Tomcat,安装部署MySQL。mysql
千篇一概的iss文档:nginx
#define MyAppName "自定义程序名称" #define MyAppVersion "V1.0" #define MyAppPublisher "自定义程序出版商" #define MyAppURL "http://www.xxxx.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-5.6.1.exe 工具自动生成 AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} ; 默认安装路径 DefaultDirName=C:\Program Files\ITDragon\ DefaultGroupName={#MyAppName} ; 软件名称 OutputBaseFilename=ITDragon ; 软件图标 SetupIconFile=C:\Users\Long\Desktop\ok\ITDragon\itdragon.ico ; 压缩方式 Compression=lzma ; yes 可使文件更小 SolidCompression=yes ; 必需有管理员权限才能安装 PrivilegesRequired=admin ; 安装密码 ;Password=itdragon ; 开启加密,须要一个iscrypt.dll文件,网上有下载的 ;Encryption=yes ; 语言配置 [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" ; 安装文件 [Files] ; 安装部署的源文件路径 Source: "C:\Users\Long\Desktop\ITDragon\*"; 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}\快捷HTTP地址"; Filename: http://localhost Name: "{commondesktop}\Mysql数据初始化脚本"; Filename: "{app}\mysql\init-data.bat" Name: "{commondesktop}\安装须知"; Filename: "{app}\安装须知.doc" ; 程序安装成功后执行脚本 [Run] Filename: "{app}\tomcat\init-jdk.bat"; Filename: "{app}\tomcat\bin\init-tomcat.bat"; Filename: "{app}\mysql\bin\init-mysql.bat"; ; 在安装的时候输入IP地址,动态将localhost修改成输入值 [Code] var myPage:TwizardPage;//自定义窗口 ed1:TEdit;//自定义输入框 Lbl1: TNewStaticText;//自定义标题 //初始化引导窗口 procedure InitializeWizard(); begin myPage:=CreateCustomPage(wpWelcome, '配置服务IP地址', '请输入正确的IP地址,已确保服务的正常使用'); Lbl1 := TNewStaticText.Create(myPage); Lbl1.Left := ScaleX(5); Lbl1.Top := ScaleY(5); Lbl1.Width := ScaleX(250); Lbl1.Height := ScaleY(50); Lbl1.Caption := 'IP地址输入框标题'; Lbl1.Parent := myPage.Surface; ed1:=TEdit.Create(myPage); ed1.Width:=ScaleX(410); ed1.Top := ScaleY(25); ed1.Text :='127.0.0.1'; ed1.Parent:=myPage.Surface; end; procedure CurStepChanged(CurStep: TSetupStep); var fileName:String; svArray: TArrayOfString; nLines,i:Integer; begin //复制文件后执行 if CurStep = ssPostinstall then begin fileName := ExpandConstant('{app}\nginx\html\main.bundle.js'); LoadStringsFromFile(fileName, svArray);//读取文件 nLines := GetArrayLength(svArray); for i := 0 to nLines - 1 do if (0 < Pos('localhost', svArray[i])) then//查找目标 StringChange(svArray[i], 'localhost', ed1.Text); SaveStringsToUTF8File(fileName, svArray, false); end; end;
注意:
一)、若是你不须要自定义函数,[Code]代码块均可以删掉
二)、点击Inno Setup上的compile按钮开始编译,编译成功后会在一个Output目录夹生成exe文件,这个Output目录通常和iss文件在同一级。
web
在作这个需求的时候,看了几篇文章,发现他们都把jdk放在Tomcat目录中,第一次作的时候也傻乎乎的放在Tomcat目录中,其实不必。并且目前主流的springboot项目都是内嵌tomcat。新建一个bat脚本用来运行java程序java -jar xxx.jar
安装成功后在桌面生成一个快捷键,让用户双击启动服务。若是你有更合理的方法,能够教教我!!!
init-jdk.bat,内容来源网络,修改时须要目录层级关系:spring
@echo off echo cd .. echo "%~dp0" echo "%cd%" set jdkpath=%cd%\tomcat\bin\java\jdk echo %jdkpath% setx JAVA_HOME "%jdkpath%" -m setx CLASSPATH ".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar" -m echo %Path% echo %Path%|find /i "%java_home%" && set IsNull=true || set IsNull=false echo %IsNull% if not %IsNull%==true ( reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f setx Path "%%JAVA_HOME%%\bin;%Path%" ) exit
须要将init-tomcat.bat文件放在tomcat/bin目录下,有博客说要修改service.bat文件,我没有修改依然能够正常启动。在看别人的博客的时候,遇到不明白的地方能够先试着跳过去。我就傻乎乎的下了一个tomcat6,对比二者有什么区别......sql
echo -------tomcat begin-------- call "%~dp0%service.bat" install tomcat8 echo -------tomcat install end------------------ sc config tomcat8 start= auto net start tomcat8 exit
MySQL安装须要注意两点:第一设置数据库初始密码,第二设置数据库编码格式,
一)、初始化数据库的时候不要生成密码,方便后期修改,命令mysqld.exe --initialize-insecure --user=mysql --console
二)、数据库的编码格式要统一为utf8,网上不少方法都是在my.ini文件中配置编码格式,可MySQL5.7没有该文件,没有咱们能够建立一个。但MySQL5.6若是手动建立my.ini文件可能在启动服务时有问题。数据库
init-mysql.bat,内容来源网络,稍做修改。windows
cd /d %~dp0 cd .. set inipath=%cd%\my.ini cd bin "%cd%\mysqld.exe" -install mysql --defaults-file="%inipath%" "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console net start mysql sc config mysql start=auto net stop mysql net start mysql echo 安装完毕 "%cd%\mysqladmin.exe" -u root password root echo 修改密码完毕 cd .. "%cd%\bin\mysql.exe" -uroot -proot < "%cd%\sqlfile\initMysql.sql" echo 数据库初始化完成 pause;
initMysql.sql,用来建立数据库和设置编码。MySQL启动成功后,咱们仍是要进去执行show variables like '%char%;'
看看是否是统一修改为了utf8
create database IF NOT EXISTS itdragon_data character set utf8; set global character_set_database=utf8; set global character_set_server=utf8;
有了Inno Setup工具,一键部署配置web项目变的很简单,只须要将部署的资源压缩成exe文件,而后点击exe文件待安装成功后执行自动运行bat文件初始化配置便可。可我依然花了很长的时间。缘由有几点:
一)、开始安装的环境是Windows Server 2008,安装MySQL5.7失败,缘由是不支持MySQL5.7提供的高级读写锁。后来换成了MySQL5.6安装成功
二)、MySQL5.6启动服务失败1067,网上也有不少解决方法,没有一个成功。无奈换了WIndows Server 2012 r2,结果一次成功。
三)、对Inno Setup函数使用不熟,资源文件太大,每次编译调试要等待半小时。
一)、安装InfluxDB数据库时,须要初始化数据库。咱们没有必要在安装成功后初始化,由于InfluxDB是免安装的,能够在打安装包以前就把初始化的工做作好。
文章到这里就结束了,InfluxDB和Nginx就更简单了,同样的逻辑。但愿你们把时间用到正确的地方。若是以为不错能够点个"推荐"
参考文章:
https://blog.csdn.net/liuhaomatou/article/details/52576162
https://blog.csdn.net/dj0721/article/details/72462688