前言
写这篇博客用于记录当开发完一个项目时,如何实现给用户使用时能够一键安装部署。
服务
- elasticsearch 开源搜索引擎
- geoserver 地理数据服务器
- node + server 用于静态资源服务器搭建
- postgresql + postgis 关系型数据库及其空间数据拓展插件
- redis
- graphhopper 地理导航服务
- 系统jar包
实现方案
- 下载以上服务的免安装版本(幸运的是都有免安装的)
- 编写各个服务的启动脚本(windows bat脚本)
- windows 下使用 nssm 将 bat 脚本注册为 windows 服务
部分截图
某些原因,只能放一些截图了。能看懂最好,看不懂私信提供一些思路。
nssm.exe是注册windows服务的插件
nssm_intsall.bat是windows服务注册程序,nssm_intsall.properties是配置文件,供nssm_intsall.bat扫描,里面存放的是服务的属性:
- IP
- 端口
- 名称
- 别名
- 是否有依赖服务
- 服务依赖列表,当不存在依赖服务时,为NONE,存在依赖服务时为空格隔开的服务名称列表
- 服务启动脚本相对路径
nssm_uninstall.bat是windows服务卸载程序,nssm_unintsall.properties是配置文件(同 nssm_intsall.properties),供nssm_unintsall.bat扫描。
Shell 命令
nssm_intsall.bat
cd /d %~dp0
setlocal enabledelayedexpansion
@echo off
set rootpath=%~dp0
for /f "tokens=* delims==," %%i in ('type "nssm_install.properties"') do (
for /f "tokens=1,2,3,4,5,6,7 delims==," %%A in ("%%i") do (
set host=%%A
set port=%%B
set serviceName=%%C
set displayName=%%D
set dependOn=%%E
set dependOnService=%%F
set script=%%G
set address=!host!:!port!
echo install !address! !serviceName!
echo %rootpath%!script!
echo =================================>>log
echo ServiceName: !serviceName!>>log
echo DisplayName: !displayName!>>log
echo Host: !host!>>log
echo Port: !port!>>log
echo DependOnService: !dependOnService!>>log
echo Time: !date! !time!>>log
echo Operation: Install>>log
nssm install !serviceName! %rootpath%!script!
nssm set !serviceName! DisplayName !displayName!
if !dependOn!==T (
echo !dependOnService!
nssm set !serviceName! DependOnService !dependOnService!
)
)
)
echo Service installed please restart your computer.
pause
nssm_intsall.properties
127.0.0.1,30001,rbroute,RBEIS Route,F,NONE,route\startup_an.bat
127.0.0.1,30002,rbelasticsearch,RBEIS Elasticsearch,F,NONE,elasticsearch\bin\startup_an.bat
127.0.0.1,30003,rbpostgresql,RBEIS Postgresql,F,NONE,pgsql\startup_an.bat
127.0.0.1,30004,rbredis,RBEIS Redis,F,NONE,redis\startup_an.bat
127.0.0.1,30005,rbnode,RBEIS Node,F,NONE,node\startup_an.bat
127.0.0.1,30006,rbgeoserver,RBEIS Geoserver,F,NONE,geoserver\bin\startup_an.bat
127.0.0.1,30000,rbqjpa,RBEIS System,T,rbroute rbelasticsearch rbpostgresql rbredis rbnode rbgeoserver,qjpa\startup_an.bat
nssm_uninstall.bat
cd /d %~dp0
setlocal enabledelayedexpansion
@echo off
set rootpath=%~dp0
for /f "tokens=* delims==," %%i in ('type "nssm_uninstall.properties"') do (
for /f "tokens=1,2,3,4,5,6,7 delims==," %%A in ("%%i") do (
set host=%%A
set port=%%B
set serviceName=%%C
set displayName=%%D
set dependOn=%%E
set dependOnService=%%F
set script=%%G
set address=!host!:!port!
echo uninstall !address! !serviceName!
echo %rootpath%!script!
echo =================================>>log
echo ServiceName: !serviceName!>>log
echo DisplayName: !displayName!>>log
echo Host: !host!>>log
echo Port: !port!>>log
echo DependOnService: !dependOnService!>>log
echo Time: !date! !time!>>log
echo Operation: UnInstall>>log
nssm stop !serviceName!>>log
nssm remove !serviceName! confirm>>log
)
)
pause
nssm_uninstall.properties
127.0.0.1,30000,rbqjpa,RBEIS System,T,rbroute rbelasticsearch rbpostgresql rbredis rbnode rbgeoserver,qjpa\startup_an.bat
127.0.0.1,30001,rbroute,RBEIS Route,F,NONE,route\startup_an.bat
127.0.0.1,30002,rbelasticsearch,RBEIS Elasticsearch,F,NONE,elasticsearch\bin\startup_an.bat
127.0.0.1,30003,rbpostgresql,RBEIS Postgresql,F,NONE,pgsql\startup_an.bat
127.0.0.1,30004,rbredis,RBEIS Redis,F,NONE,redis\startup_an.bat
127.0.0.1,30005,rbnode,RBEIS Node,F,NONE,node\startup_an.bat
127.0.0.1,30006,rbgeoserver,RBEIS Geoserver,F,NONE,geoserver\bin\startup_an.bat