Inno Setup制作windows部署Web项目环境一键安装程序
项目需求
项目最近需要在windows服务器部署Web项目,环境部署大致需要如下软件:jdk、mysql、redis、nginx、nodejs等。为了降低安装难度,所以决定使用windows常用的软件安装方式进行部署,经过查找和搜索,最终决定使用开源软件Inno Setup进行制作。
Inno Setup简介
InnoSetup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件。
Inno Setup主要功能介绍
1.支持现在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008,2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服务包)。
2.广泛支持在 64 位 的 Windows XP and Windows Server2003 版本的操作系统中的 64 位应用程序安装。支持 x64 和 Itanium 两个结构。(在 Itanium 结构中,必须在 64 位模式安装 Service Pack 1。)
3.支持创建单个EXE 格式的安装程序,使你的程序可以很方便地在网络上发表。同时也支持磁盘延伸。
4.标准的Windows 2000/XP 样式向导界面。
5.定制安装类型,例如:完整安装,最小安装,自定义安装。
6.完整的卸载功能。
7.文件安装:包括完全的“压缩”支持,bzip2 和 7-Zip LZMA 文件压缩。安装程序可以比较文件版本信息,替换正在使用的文件,使用共享文件计数,注册DLL/OCX 和类型库,以及安装字体。
8.可以在任意地方创建快捷方式,包括开始菜单和桌面。
9.创建注册表 和.INI 条目。
10.在安装之前、之中或之后可运行其他程序。
11.支持多语言安装。
12.支持密码和加密安装。
13.支持数字签名 、安装和卸载。
14.后台安装和后台卸载。
15.Unicode安装。(Windows 2000/XP 或更高)
16.完整的Pascal 脚本 引擎选项于运行期高级自定义安装和卸载。
17.全部源代码公开(Borland Delphi 2.0-5.0 和 2009)。
下载地址
官网下载或者下面百度网盘下载。
提取码:6jz4
使用方法
下载下来直接安装即可,打开软件按制作向导即可创建初始项目,生成init.iss这样的配置文件,后续所有安装包的信息基本都可以在这里进行配置。下面是我生成修改后的配置文件信息。
#define MyAppName "CESHI"
#define MyAppNameEn "XJPMabDoor"
#define MyAppVersion "2.0"
#define MyAppPublisher "CESHI"
#define MyAppURL "https://www.kgraph.cn"
[Setup]
AppId={{FCE3DF48-9DBE-48FF-B6BC-FAC3D41D92A6}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=ABDoor\{#MyAppNameEn}
DefaultGroupName={#MyAppName}
OutputBaseFilename=abdoor
Compression=lzma
SolidCompression=yes
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "F:\ABDoor_package\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "F:\ABDoor_package\nginx\www\*"; DestDir: "C:\Program Files\xjpm\www"; Flags: ignoreversion recursesubdirs createallsubdirs
;Source: "F:\ABDoor_package\mysql\*";DestDir: "C:\Program Files\mysql"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
;Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\CESHI"; Filename: http://localhost:8090
;Name: "{commondesktop}\CESHI"; Filename: "{app}\mysql\init-data.bat"
Name: "{commondesktop}\CESHI"; Filename: "{app}\CESHI.doc"
[INI]
Filename:"{app}\mysql\mysql-5.7.28-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql\mysql-5.7.28-winx64"
Filename:"{app}\mysql\mysql-5.7.28-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql\mysql-5.7.28-winx64\data"
Filename:"{app}\mysql\mysql-5.7.28-winx64\my.ini";Section:"mysqld";Key:"port"; String:"3306"
Filename:"{app}\mysql\mysql-5.7.28-winx64\my.ini";Section:"client";Key:"port"; String:"3306"
[Run]
Filename: "{app}\java\init-jdk.bat";
Filename: "{app}\mysql\init-mysql.bat";
Filename: "{app}\redis\init-redis.bat";
Filename: "{app}\nodejs\init-nodejs.bat";
;Filename: "C:\Program Files\xjpm\www\flvs\start-index.bat";
Filename: "{app}\nginx\start-nginx.bat";
;Filename: "{app}\java\xjpm\start-xjpm.bat";
项目目录结构
每个环境安装完成执行的bat脚本均放置于目录首级目录,安装包和bat脚本同级。
配置jdk环境变量bat脚本
init-jdk.bat:
@echo off
echo
echo "%~dp0"
echo "%cd%"
set jdkpath=%cd%\jdk1.8.0_121
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
配置mysql环境bat脚本
Init-mysql.bat:
cd /d %~dp0
cd mysql-5.7.28-winx64
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 ---Installation completed---
"%cd%\mysqladmin.exe" -u root password 123456
echo ---Password change completed---
cd ..
"%cd%\bin\mysql.exe" -uroot -p123456 < "%cd%\sqlfile\initMysql.sql"
echo ---Database initialization complete---
pause;
其中initMysql.sql是mysql初始化数据库表的sql文件,根据系统来设置即可。
注意:mysql安装包需要提前创建好my.ini文件,简单配置如下:
[client]
port=3306
[mysql]
default-character-set=utf8mb4
[mysqld]
port=3306
basedir="C:/Program Files/mysql/mysql-5.7.28-winx64"
datadir="C:/Program Files/mysql/mysql-5.7.28-winx64/data/"
character-set-server=utf8mb4
collation-server=utf8mb4_bin
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=32M
table_open_cache=256
tmp_table_size=35M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=69M
key_buffer_size=50M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=96M
innodb_log_file_size=20M
innodb_thread_concurrency=18
Redis和Nginx环境bat脚本basedir和datadir在iss配置文件中可以动态修改,具体可以看上面我贴出来的配置信息[INI]代码块。
init-redis.bat:
cd /d %~dp0
cd Redis-x64-3.2.100
set inipath=%cd%\redis.windows.conf
"%cd%\redis-server.exe" --service-install "%inipath%" --service-name redisserver --loglevel verbose
net start redisserver
sc config redisserver start=auto
net stop redisserver
net start redisserver
echo ---Installation completed---
pause;
start-nginx.bat:
cd /d %~dp0
cd nginx-1.12.2
start nginx
echo ---start nginx success---
pause;
stop-nginx.bat:
cd /d %~dp0
cd nginx-1.12.2
"%cd%\nginx.exe" -s stop
echo ---stop nginx success---
taskkill /f /t /im nginx.exe
pause;
nodejs环境配置bat脚本
init-nodejs.bat:
@echo off
echo
echo "%~dp0"
echo "%cd%"
set nodejspath=%cd%\node-v12.16.1-win-x64
echo %nodejspath%
setx NODEJS_HOME "%nodejspath%" -m
setx Path "%nodejspath%;%Path%" -m
echo %Path%
exit
编译
点击软件上方编译按钮,系统会自动打包压缩成exe文件在你配置的输出目录。