使用 Nginx Unit 部署 JavaWebApp

从源码构建和安装 NginxUnit

主要参考:http://unit.nginx.org/installation/#source-code

# 下载源码
git clone https://github.com/nginx/unit
cd unit
# 配置路径前缀
./configurate --prefix=/apps/unit
# 配置 java 模块
./configurate java
# 生成应用并安装到 /apps/unit
make && make install

启动和停止 NginxUnit

cd /apps/unit
# 查看命令行使用帮助
./sbin/unitd --help
# 使用命令行形式启动控制台,IP:127.0.0.1,端口:7777
./sbin/unitd --no-daemon --control 127.0.0.1:7777

# 停止命令行运行,Ctrl+C 即可终止命令行的执行

对于非命令行执行,即没有使用 --no-daemon的运行方式,需要查询端口号并使用 kill 命令杀死进程的方式,在 MacBookPro 下,操作如下:

lsof -i tcp:7777
MacBook-Pro:$ lsof -i tcp:7777
COMMAND   PID  USER      FD   TYPE             DEVICE SIZE/OFF NODE NAME
unitd   51926  nobody    4u  IPv4 0xee618302c41ebef9      0t0  TCP localhost:cbt (LISTEN)
unitd   51928  nobody    4u  IPv4 0xee618302c41ebef9      0t0  TCP localhost:cbt (LISTEN)
unitd   51929  nobody    4u  IPv4 0xee618302c41ebef9      0t0  TCP localhost:cbt (LISTEN)
unitd   51930  nobody    4u  IPv4 0xee618302c41ebef9      0t0  TCP localhost:cbt (LISTEN)

# 执行如下命令即可 (pid需要更换为自己查询到的进程pid)
kill -9 51926 51928 51929 51930

如何配置 Java 应用程序

创建配置文件 /apps/unit/unit.json

{
  "config": {
    "listeners": {
      "*:8300": {
        "application": "fxz"
      }
    },

    "applications": {
      "fxz": {
        "type": "java",
        "webapp": "/data/workspace/mine/fengxinzi/fxz-api/web"
      }
    }
  }
}

发布配置到 NginxUnit

curl -X PUT -d@/apps/unit/unit.json '127.0.0.1:7777/config'
{
"success": "Reconfiguration done."
}

“success”表示配置成功。此时执行下述命令时将看到的内容与 unit.json 配置文件内容一致

curl 127.0.0.1:7777

通过 tail -n 200 -f /apps/unit/unit.log或查看控制台输出可知 JavaWebApp 已经启动成功!

配置主要参考:http://unit.nginx.org/configuration/

Java 应用程序

属性 说明
classpath 应用程序所需库的路径数组(可能指向目录或.jar 文件)
options 定义 JVM 运行时选项的字符串数组
webapp (必需) 应用程序的打包或未打包.war 文件的路径名

例:

{
  "type": "java",
  "classpath": ["/www/qwk2mart/lib/qwk2mart-2.0.0.jar"],
  "options": ["-Dlog_path=/var/log/qwk2mart.log"],
  "webapp": "/www/qwk2mart/qwk2mart.war"
}

最为简短的配置,只需要 2 行:

{
  "type": "java",
  "webapp": "/www/qwk2mart/qwk2mart.war"
}

{
  "type": "java",
  "webapp": "/www/qwk2mart/qwk2mart"
}

即可。

注意:目前的配置方式不支持 Jndi 的数据库配置方式。暂未找到设置的方法。