1. 程式人生 > >windows一鍵部署java項目

windows一鍵部署java項目

lines out add 減少 common blog \n left compile

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的模版幾乎一樣,如果需要自定義界面,可以在[Code]中添加代碼。比如我需要在安裝的過程中添加一個有輸入框的自定義界面,將輸入的值替換配置文件中的指定內容,安裝成功後在桌面生成快捷鍵。
對於bat腳本語言很薄弱的我來說這裏有兩個難點,但依葫蘆畫瓢還是可以做出來的。
一)、Inno Setup的函數,在[Code]代碼塊中,可以自定義很多功能來實現自定義的開發,具體可以參考在線的文檔

二)、需要用bat腳本配置jdk環境變量,安裝部署Tomcat,安裝部署MySQL。

#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\ITDragonDefaultGroupName={#MyAppName}
; 軟件名稱
OutputBaseFilename=ITDragon
; 軟件圖標
SetupIconFile=C:\Users\Long\Desktop\ok\ITDragon\itdragon.ico 
; 壓縮方式  
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理員權限才能安裝
PrivilegesRequired=admin
; 安裝密碼
;Password=itdragon
; 開啟加密,可能還需要一個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文件在同一層。
技術分享圖片

配置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%\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

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%\bin\mysql.exe" -uroot -proot < "%cd%\sqlfile\initMysql.sql" 
echo 數據庫初始化完成 
pause;

initMysql.sql

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和Nginx就更簡單了,一樣的邏輯。希望大家把時間用到正確的地方。如果覺得不錯可以點個"推薦"

參考文章:
https://blog.csdn.net/liuhaomatou/article/details/52576162

https://blog.csdn.net/dj0721/article/details/72462688

windows一鍵部署java項目