练习一 部署(非默认端口绑定二级域名)
现在先将之前最简单的小 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 包输出出来了。
如果输出失败的话,试着 “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 的默认页。
部署 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 。
绑定域名
目前,环境已安装OK,程序也部署好了,只是我们访问的时候,需要添加一个端口号来访问 localhost:8080,
现在想通过域名 blog.sqber.com 来访问此项目,且不带端口。
情况一:服务器的80端口没有占用。
这种情况就比较简单了,修改 tomcat 下 conf 目录下的 server.xml 文件
找到端口设置的地方。
将 默认的 8080 端口修改为 80 。
然后找到 Engine 节点,将 defaultHost 修改为域名 blog.sqber.com
找到 Host 节点,将 name 修改为域名 blog.java.com
这样设置就 OK 了,然后进行域名解析,将 java.sqber.com 指向自己的服务器地址。
情况二:服务器的80端口被占用。
服务器的80端口被IIS占用,通过使用 isapi_redirect 来整合 tomcat 和 iis 来解决域名绑定的问题。
IIS 下域名绑定比较简单,新建站点,并在绑定中添加一个新的绑定,绑定到域名即可。
则此站点,在服务器上可以通过 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 权限。
解压后的内容如下:
注意一定是解压在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 的项,
这里是 32 位注册的位置,如果使用的是 64 位的 reg 文件,则位置在 Wow6432Node 注册项下面。
四、
修改配置文件
打开 jakarta/conf/workers.properties 文件,将 域名修改为自己的域名。注意下面的端口号不要动,一定要是 8009 。
打开 tomcat 下的 conf 目录下的 server.xml 文件,找到 Engine 节点,添加一个 jvrmRoute="jvm1" 的属性,和上面的 jvm1 相对应。
至此,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
*昵称:
*邮箱:
个人站点:
*想说的话: