练习一 部署(非默认端口绑定二级域名)

时间 2018/5/30 11:06:37 加载中...

现在先将之前最简单的小 Demo 部署到 云服务器上,系统为 Windows Server 2012 R2

Spring Boot的部署可以使用两种形式:

Jar包形式

War包形式


这里使用的 War 包的形式


部署的主要过程分为

1、修改项目

2、服务器上安装 java jdk 和 tomcat

3、绑定域名


修改项目


一、

将项目修改为 war 包形式,之前是 jar 包。

找开 pom.xml 文件,在 version 节点下面添加

<packaging>war</packaging>


二、

spring-boot 使用外置 tomcat,而不是内置的 tomcat。

打开 pom.xml 文件,在 dependencies 节点下添加

<!--外置tomcat启动-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>


如果要设置生成的 war 文件名字为 blog,则在 project 节点下添加

<build>
    <finalName>blog</finalName>
</build>


修改pom.xml 文件之后,“Alt + F5”更新 Maven 库。


三、

修改启动类“BlogApplication”,让“BlogApplication”继承自“SpringBootServletInitializer”,并重写 configure 方法。

@SpringBootApplication
public class BlogApplication extends SpringBootServletInitializer{

	public static void main(String[] args) {
		SpringApplication.run(BlogApplication.class, args);
	}
	
	@Override  
            protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
                              return application.sources(BlogApplication.class);  
            } 
}


四、

生成 war 包。

在 blog 项目上,右击选择“Run As”,“maven build",在 Edit configuration and launch 页面

在 Goals 中输入 “package”,点击 “Run”按钮,我们可以在 console 中看到 war 包输出出来了。


1.png


如果输出失败的话,试着 “Alt + F5”更新一下 Maven 库。


服务器部署环境


下载下面的文件到服务器

jdk-8u162-windows-x64.exe   https://pan.baidu.com/s/1tX1vOUw46smU4NNmdhV0hA

apache-tomcat-7.0.88-windows-x64.zip https://pan.baidu.com/s/1WEUZJfO3jeqJjjEo5JTQhw


安装 java jdk


执行 jdk-8u162-windows-x64.exe 文件,默认设置,一路next。

安装完毕后,设置环境变量。


Java_home   :  C:\Program Files\Java\jdk1.8.0_162

path             :  %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

classpath     :  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;


注意: classpath 的值有一个 “点”。


在命令行中,执行 java -version 查看是否安装成功。


安装tomcat


tomcat,解压就能用。将 apache-tomcat-7.0.88-windows-x64.zip 压缩包解压,并 Copy 到 C 盘根目录下。

然后双击 C:\apache-tomcat-7.0.88\bin 下的 startup.bat 文件 来 运行tomcat。tomcat 默认端口 8080,

在浏览器中输入 localhost:8080,则可以看到 tomcat 的默认页。


1.png


部署 war 包


tomcat 的站点是在 C:\apache-tomcat-7.0.88\webapps 目录下。

其中,Root 目录下的站点为 默认站点,我们上面看到的站点,其实为这个站点。

webapps 目录下每一个目录都代表着一个站点。


将之前的 blog.war 包 copy 到服务器的 webapps 文件夹下。

然后,重新运行 tomcat 的 bin 目录下的 startup.bat 文件,在 tomcat 启动时,会自动将 blog.war 包解压

生成一个 blog 目录。这个目录就是我们的项目了。


问题:启动过程中,发生如下错误:

Failed to start component [StandardEngine[Catalina].StandardHost[localhost]

caused by java.lang.NoClassDefFoundError: javax/el/ELManager


这是由于 tomcat 的 lib 目录下的 el-api.jar 包版本与项目所需要版本不匹配导致的。

方法1:将 tomcat 的 lib 目录下的 el-api.jar 包删掉。

方法2:将 tomcat 的 lib 目录下的 el-api.jar 包替换掉。可以在自己的项目中找到此jar文件。

如果找不到,在 pom 文件中添加如下依赖,让其自己下载,我用的是 el-api-2.2.jar 版本。

<dependency>
	<groupId>javax.el</groupId>
	<artifactId>el-api</artifactId>
	<version>2.2</version>
</dependency>


目前 webapps 目录下有 ROOT 和 BLOG 两个目录,访问 blog 项目的话,则在浏览器中输入

localhost:8080/blog 来访问。


也可以将 BLOG 中的内容 copy 到 ROOT 下面,使用 localhost:8080 来访问。

注意:需要重启 tomcat 。

1.png


绑定域名


目前,环境已安装OK,程序也部署好了,只是我们访问的时候,需要添加一个端口号来访问 localhost:8080,

现在想通过域名 blog.sqber.com 来访问此项目,且不带端口


情况一:服务器的80端口没有占用。


这种情况就比较简单了,修改 tomcat 下 conf 目录下的 server.xml 文件

找到端口设置的地方。

1.png

将 默认的 8080 端口修改为 80 。


然后找到 Engine 节点,将 defaultHost 修改为域名 blog.sqber.com

找到 Host 节点,将 name 修改为域名 blog.java.com


1.png

1.png


这样设置就 OK 了,然后进行域名解析,将 java.sqber.com 指向自己的服务器地址。


情况二:服务器的80端口被占用。


服务器的80端口被IIS占用,通过使用 isapi_redirect 来整合 tomcat 和 iis 来解决域名绑定的问题。


IIS 下域名绑定比较简单,新建站点,并在绑定中添加一个新的绑定,绑定到域名即可。


1.png


则此站点,在服务器上可以通过 localhost:8004 来访问,也可以通过 域名 java.sqber.com 来访问。

我们可以通过 localhost:8004 来测试站点情况。


访问域名 java.sqber.com 时,其实访问的是我们的 IIS 站点, IIS 站点通过 isapi_redirect 将请求导向

了 tomcat 。


具体步骤:

1、安装 isapi_redirect

2、配置 IIS


安装 isapi_redirect

我这里总结了网上的安装方法,并进行了简化。


一、

首先下载文件 https://pan.baidu.com/s/1VtZs9xW118JECvoqGXjGuw

将压缩包解压到 C 盘根目录下,并为解压后的文件夹添加 everyone 权限。

解压后的内容如下:


1.png


注意一定是解压在C盘目录。如是不是,则需要修改 reg文件里面的目录,建议不要选择其它目录。


二、

复制对应dll文件, 如果你的系统是 64 位的话,则将 isapi_redirect.dll -64 复制到 bin 目录下,并去除 -64,

还原dll文件,同理,如果是 32 位的话,则复制 isapi_redirect.dll -32 文件。


三、

执行 reg 文件,运行的是 addIsapi-32.reg,(我的系统是64位系统,但还是使用的32位的 reg 文件)

此文件只是添加一个注册表项。

运行 regedit 打开 注册表,在 HKEY_LOCAL_MACHINE - SOFTWARE 下新增了一个 Apache SoftWare Foundation 的项,


1.png


这里是 32 位注册的位置,如果使用的是 64 位的 reg 文件,则位置在 Wow6432Node 注册项下面。


四、

修改配置文件

打开 jakarta/conf/workers.properties 文件,将 域名修改为自己的域名。注意下面的端口号不要动,一定要是 8009 。


1.png

打开 tomcat 下的 conf 目录下的 server.xml 文件,找到 Engine 节点,添加一个 jvrmRoute="jvm1" 的属性,和上面的 jvm1 相对应。


1.png


至此,isapi_redirect 的安装就完成了。


如果遇到了什么问题,还可以查看 jakarta/log 下的日志文件来定位错误信息。


配置IIS


在IIS中新建一个站点,名称为 jav(随意),并绑定到域名 java.sqber.com,且此站点也绑定到 localhost:8004

在jav站点下,新增一个虚拟目录,名称为“jakarta”。目录路径为“C:\jakarta\bin”,即“isapi_redirect.dll”所在目录。

选中“jakarta”虚拟目录后,选择右侧的“处理程序映射”,将 “ISAPI-dll”设为启用。(方法:编辑权限,勾选执行)

选中“jav”站点,选择右侧的“ISAPI筛选器”,添加一个名为“tomcat”文件为“C:\jakarta\bin\isapi_redirect.dll”的新项。

选中服务器器名字,选择右侧的“ISAPI和CGI限制”,点击添加路径还为“C:\jakarta\bin\isapi_redirect.dll”,描述tomcat(随意)

并勾选下面的“允许执行扩展路径”。


重启 IIS(先关闭IIS,再点击启动)


在服务器上,使用浏览器访问 localhost:8004 ,看是否能正常访问 tomcat 。

如果 OK,在使用域名 java.sqber.com 来访问。


注意:阿里云控制台要开启 8004 端口的访问权限。


至此,域名的绑定完成。


以下是问题列表:


问题一:

浏览器提示 isapi_redirect.dll XXX 的问题?


dll版本不对,或者 注册的注册表位置不对,更换 dll 版本,或使用不同版本的 reg 注册试试。

记得在 注册表中 删除之前注册的项。


问题二:

浏览器提示 HTTP 错误 500.0 - Internal Server Error

无法显示页面,因为发生内部服务器错误。


查看 C:/jakarta/log 下的日志文件,定位错误信息,我的信息是 “文件找不到”发现是单词拼写错了。


问题三:

浏览器提示

Bad Gateway!

There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server.


查看 C:/jakarta/log 下的日志文件,提示

ajp_connection_tcp_get_message::jk_ajp_common.c (1372): (jvm1) wrong message format 0x4854 from XXX


workers.properties 下的 worker.jvm1.port 要修改为 8009,因为8009是tomcat下的 AJP 接收端口。这个可以在 server.xml 文件中看到。


参考资料


官方: https://tomcat.apache.org/connectors-doc/webserver_howto/printer/iis.html

https://blog.csdn.net/zhulin2012/article/details/23549227

https://blog.csdn.net/zhongyangjian/article/details/30060665

https://blog.csdn.net/hgxbra/article/details/53316608


版权说明
作者:SQBER
文章来源:http://blog.sqber.com/articles/java-test1-deploy.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。