最近在学习springboot,感觉springboot开发后台,提供api接口太方便了。简直是傻瓜式开发,一直都是本地在跑springboot项目。梦想着有一天,项目能在阿里云上跑。只有在阿里云上跑才是真正的java服务器项目。这里就带大家一起把springboot项目部署到阿里云,并且支持https 准备工作 一,购买阿里云ecs配置安全组规则 二,买域名 至于域名怎么买,我就不啰嗦了,不会的自行百度 30paotui.com我买的域名 域名.png 三,通过filezilla连接阿里云服务器,运行项目 ftp连接服务器.png 我在我的服务器home目录下新建一个jar文件,把打包好的springboot的jar包放到这里,我的是qcl80.jar home:jar.png 然后就可以通过 java -jar qcl80.jar 运行springboot项目 运行springboot项目.png 注意:这样运行springboot项目,如果你关闭当前shell窗口,就会导致服务器的springboot关闭。因为我们现在用的是springboot自带的tomcat,不能在后台运行。 springboot生成的jar在阿里云的linux服务器后台运行,不会在shell客户端关闭时关闭 后台运行脚本.png 通过创建stop.sh , start.sh ,run.sh这三个脚本文件来实现后台长久运行springboot 这里我把运行的qcl80.jar ,start .sh,stop.sh ,run.sh都放在home下的jar目录下 1,创建stop.sh vim stop.sh 创建文件然后把下面内容复制进去,一定要把qcl80.jar替换成你的jar 2,创建start.sh,这里我们用80端口,这样可以直接通过ip访问,不用再输端口了 vim start.sh 输入这个命令后然后把下面的内容复制进去 3,创建run.sh 整合了关闭和启动的脚本:run.sh,由于会先执行关闭应用,然后再启动应用,这样不会引起端口冲突等问题,适合在持续集成系统中进行反复调用。 把下面内容复制进去,一定要注意复制时不能少东西 4,start .sh,stop.sh ,run.sh都创建后 ./run.sh 运行run.sh脚本 如果遇到没有权限运行的问题,就在run.sh所在目录下执行 chmod u+x *.sh 这样就ok了。 执行完以后,我们可以去nohup.out文件中查看启动的log cat nohup.out 这个命令可以查看jar启动的log run.sh启动jar项目.png 到此我们的springboot项目就启动了,可以通过你阿里云的公网ip访问你的网站了 ip访问.png https访问.png 由于我配置了https,所以这里用IP访问会显示不安全,接下来给大家讲解怎么配置https访问。 四,配置https 1,申请阿里云免费的ca证书,ca证书是实现https必不可少的 ca证书购买.png ca免费购买.png ca补全信息.png 通常审核10分钟左右就行,如果资料不全或者不真实可能就久些。 下载后解压 pfx证书.png 然后在我们的springboot配置文件中配置 ca配置.png 注意:214590826650132.pfx还需要在我们能阿里云的home/jar目录下放一份,即和我们的打包jar放在同一个目录下 ca证书放到阿里云.png HTTP自动转向HTTPS 实现http转https就是我们访问 30paotui.com www.30paotui.com http://30paotui.com http://www.30paotui.com 都会指向https://30paotui.com package com.qcl; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; @SpringBootApplication public class SellApplication implements EmbeddedServletContainerCustomizer { public static void main(String[] args) { SpringApplication.run(SellApplication.class, args); } //拦截所有请求 @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint constraint = new SecurityConstraint(); constraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); constraint.addCollection(collection); context.addConstraint(constraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } //配置http转https @Bean public Connector httpConnector() { Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL); connector.setScheme("http"); //Connector监听的http的端口号 connector.setPort(80); connector.setSecure(false); //监听到http的端口号后转向到的https的端口号 connector.setRedirectPort(443); return connector; } //这里设置默认端口为443,即https的,如果这里不设置,会https和http争夺80端口 @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(443); } } 至此,我们的springboot就可以在阿里云上运行了,同时支持http和https的访问#!/bin/bash
PID=$(ps -ef | grep qcl80.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi
#!/bin/bash
nohup java -jar qcl80.jar --server.port=80 &
#!/bin/bash
echo stop application
source stop.sh
echo start application
source start.sh