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

  • 相关阅读:
    Java的静态块与实例块(转)
    Programming Ability Test学习 1031. Hello World for U (20)
    Programming Ability Test学习 1011. World Cup Betting (20)
    Programming Ability Test学习 1027. Colors in Mars (20)
    Programming Ability Test学习 1064. Complete Binary Search Tree (30)
    Programming Ability Test学习 1008. Elevator (20)
    【maven详解-生命周期】Maven的生命周期和插件
    【maven详解-插件】maven插件学习之源码插件Source Xref
    $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别
    你还没真的努力过,就轻易输给了懒惰
  • 原文地址:https://www.cnblogs.com/itdragon/p/9283397.html
Copyright © 2011-2022 走看看