zoukankan      html  css  js  c++  java
  • windows一键部署java项目

    windows一键部署java项目

    因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址。就像安装软件一样将jdk,tomcat,mysql,influxdb,nginx安装并配置到系统上,顺便还要初始化一下数据。花了一周的时间,这里记录我的踩坑日志。

    准备工作

    磨刀不误砍柴工,选择好工具可以事半功倍。
    一)、Inno Setup,一款为Windows程序提供的免费安装程序,通过它可以将需要的文件压缩打包成exe安装程序,然后像安装程序一样解压到另外一个环境中。官网地址
    二)、虚拟机,开两台虚拟机的作用:第一可以避免玩坏自己的电脑,第二可以保证每次测试安装的环境都是干净的系统,减少一些不必要的麻烦。对电脑的性能有点要求。
    三)、JDK1.8,MySQL5.7,Tomcat8,Nginx,InfluxDB等,这是需要压缩的文件资源。
    四)、Windows Server 2012 R2,你值得拥有,用2008安装MySQL会很不顺。

    Inno Setup基础使用

    Inno Setup的模版几乎一样,通过官方提供的innosetup-QSP.exe 可以帮助我们快速生成模版。但如果需要自定义界面,那你可就要挠挠头呢。比如我现在的需求是在安装的过程中添加一个有输入框的界面,并且能将输入的值替换指定配置文件中的指定内容,安装成功后在桌面生成快捷键。
    对于bat脚本语言很薄弱的我来说这里有两个难点,但依葫芦画瓢还是可以做出来的。
    一)、Inno Setup的函数,在[Code]代码块中,Inno Setup提供了很多函数来折磨,以满足我们的需求。具体可以参考在线的文档
    二)、需要用bat脚本配置jdk环境变量,安装部署Tomcat,安装部署MySQL。

    千篇一律的iss文档:

    #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 FilesITDragon
    DefaultGroupName={#MyAppName}
    ; 软件名称
    OutputBaseFilename=ITDragon
    ; 软件图标
    SetupIconFile=C:UsersLongDesktopokITDragonitdragon.ico 
    ; 压缩方式  
    Compression=lzma
    ; yes 可以使文件更小
    SolidCompression=yes
    ; 必需有管理员权限才能安装
    PrivilegesRequired=admin
    ; 安装密码
    ;Password=itdragon
    ; 开启加密,需要一个iscrypt.dll文件,网上有下载的
    ;Encryption=yes
    
    ; 语言配置 
    [Languages]
    Name: "english"; MessagesFile: "compiler:Default.isl"
    
    ; 安装文件
    [Files]
    ; 安装部署的源文件路径
    Source: "C:UsersLongDesktopITDragon*"; 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}mysqlinit-data.bat" 
    Name: "{commondesktop}安装须知"; Filename: "{app}安装须知.doc" 
    
    ; 程序安装成功后执行脚本
    [Run]     
    Filename: "{app}	omcatinit-jdk.bat"; 
    Filename: "{app}	omcatininit-tomcat.bat";
    Filename: "{app}mysqlininit-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}
    ginxhtmlmain.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文件在同一级。
    安装效果图

    配置JDK环境变量

    在做这个需求的时候,看了几篇文章,发现他们都把jdk放在Tomcat目录中,第一次做的时候也傻乎乎的放在Tomcat目录中,其实没必要。而且目前主流的springboot项目都是内嵌tomcat。新建一个bat脚本用来运行java程序java -jar xxx.jar 安装成功后在桌面生成一个快捷键,让用户双击启动服务。如果你有更合理的方法,可以教教我!!!
    init-jdk.bat,内容来源网络,修改时需要目录层级关系:

    @echo off 
    echo
    cd ..
    echo  "%~dp0"
    echo "%cd%"
    set jdkpath=%cd%	omcatinjavajdk
    echo %jdkpath%
    setx JAVA_HOME  "%jdkpath%"  -m
    setx CLASSPATH  ".;%%JAVA_HOME%%lib	ools.jar;%%JAVA_HOME%%libdt.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_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%in;%%JAVA_HOME%%jrein" /f
    setx Path "%%JAVA_HOME%%in;%Path%"
    )
    exit
    
    • 注意:实际工作中不建议配置jdk的环境变量,可以直接指定Java的全路径。这样避免破坏客户机器上原有的jdk配置。

    Tomcat安装部署

    需要将init-tomcat.bat文件放在tomcat/bin目录下,有博客说要修改service.bat文件,我没有修改依然可以正常启动。在看别人的博客的时候,遇到不明白的地方可以先试着跳过去。我就傻乎乎的下了一个tomcat6,对比两者有什么区别......

    echo -------tomcat begin--------
    call "%~dp0%service.bat" install tomcat8
    echo -------tomcat install end------------------
    sc config tomcat8 start= auto
    net start tomcat8
    exit
    

    MySQL安装部署

    MySQL安装需要注意两点:第一设置数据库初始密码,第二设置数据库编码格式,
    一)、初始化数据库的时候不要生成密码,方便后期修改,命令mysqld.exe --initialize-insecure --user=mysql --console
    二)、数据库的编码格式要统一为utf8,网上很多方法都是在my.ini文件中配置编码格式,可MySQL5.7没有该文件,没有我们可以创建一个。但MySQL5.6如果手动创建my.ini文件可能在启动服务时有问题。

    init-mysql.bat,内容来源网络,稍作修改。

    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%inmysql.exe" -uroot -proot < "%cd%sqlfileinitMysql.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

  • 相关阅读:
    less-循环写法
    利用IntersectionObserver完成懒加载、加载更多
    通过is切换组件
    css3-背景渐变
    css-六边形、平行四边形、扇形实现
    vue-利用递归组件完成一个树形组件
    event loop 事件循环
    vue-组件间通信
    video 背景图平铺
    JS 事件委托
  • 原文地址:https://www.cnblogs.com/itdragon/p/9283397.html
Copyright © 2011-2022 走看看