短学期用一周的时间学了下Spring Boot基础,弄了个小破站,后来想部署到服务器上,还是碰到一些问题的,参考了不少文章,这里总结分享一下,也是为了避免自己以后忘记~
工具准备
本案例用的是腾讯云的域名,阿里云的云服务器ECS(CentOS 8)。在开始之前首先需要
- 一个准备部署的Spring Boot本地项目
- 配置完善的Linux云服务器(JDK、MySQL等)(若使用国内云服务器如阿里云则还需先备案)
- 域名的SSL证书
Spring Boot项目就不说了,超过本文的scope了。稍微说两句最新版JDK和MySql吧,如果已经配置好的直接在目录里跳过:
JDK
我是喜欢追新的,所以直接搜索并安装最新版JDK 14:
yum list java*
yum install java-latest-openjdk*
因为我这台上面都已经装过了,所以就没有安装过程的截图了,下面mysql同样。
装好之后还是打出经典的
java -version
验证安装成功。
MySQL
一个套路,也是通过yum搜索安装8.0版
yum list mysql*
yum install mysql*
这样装完默认居然是没有密码的,所以要手动改,改成和本地Spring Boot项目配置文件中设置的密码相同。首先进入MySQL
mysql
修改密码、授予权限
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
配置完成,先尝试用新密码登录。登录成功后,建一个和本地测试相同的数据库和表。建议直接在IDEA或相应的数据库软件中生成DDL。
表建完后,随便插入一些测试数据,基本上服务器的MySQL就配置完成了。
SSL证书
腾讯云SSL申请
直接选择免费版,输入域名,五分钟审核通过,其他域名运营商同理。
下载证书后打开是这样
在项目中配置SSL
因为SB内嵌Tomcat,当然是打开Tomcat文件夹,里面会有一个.jks文件和一个keystorePass.txt文件,这里把jks重命名成ssl.jks放到项目resources文件夹下。
完成后在application.properties中配置。因为是要部署到服务器和域名的,所以端口号需要特别注意一下,不然访问的时候输入域名还得再指定端口。key-store-password填txt文件中的密码。
server.port=443
server.custom.http-port=80
server.ssl.key-store=classpath:ssl.jks
server.ssl.key-store-type=jks
server.ssl.key-store-password=********
随后在任意一个JAVA Controller中加入以下代码
@Value("${server.custom.http-port}")
private Integer httpPort;
@Value("${server.port}")
private Integer httpsPort;
@Bean
public TomcatServletWebServerFactory servletContainer() { //springboot2 新变化
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);
connector.setSecure(false);
connector.setRedirectPort(httpsPort);
return connector;
}
IntelliJ IDEA打包JAR文件
项目配置完成后就可以打包了,在IDEA右边栏的Maven栏中选择“package”
等待一段时间,在项目的target目录中找到打包完成的jar文件
上传并在服务器中后台常驻运行
通过Xftp将jar上传到服务器中。
进入jar文件的目录,输入
nohup java -jar projectname-0.0.1-SNAPSHOT.jar > logfilename.log 2>&1 &
jar将会在后台运行,且原本在java控制台输出的内容将会保存到相同目录下的logfilename.log中
至此,项目已正常在云服务器中常驻运行,可以通过访问域名直接跳转https,并显示网站安全。
如有问题,欢迎探讨和指正。