该篇博文记录我手动部署SpringBoot项目的jar包到服务器上,和我遇到的一些坑和解决过程。

成功打包后,jar包会在 target 文件夹中

这时候,这个jar包在有Java的环境下就可以直接在DOS窗口中启动了 (SpringBoot项目内置了Tomcat,不需要我们再配置)

若jar包能在本机DOS窗口中成功启动,我们就可以将这个jar包拉到服务器中了。(使用Xshell和Xftp远程操作服务器)
因为是jar包,所以是需要Java环境的,与开发环境相同。我这里是 jdk 1.8
可参考文章:https://blog.csdn.net/u010993514/article/details/82926514


需要注意一个点,因为想要访问服务器(或虚拟机)内部的端口的话,是会被防火墙的卡住的。所以我们需要提前开放项目使用的那个端口,以供我们在本地访问。
我们这里的项目所用端口是 8099 端口,所以我们要开放 8099 端口。
可参考文章:https://blog.csdn.net/Honnyee/article/details/81535464
# 开放8099端口
firewall-cmd --zone=public --add-port=8099/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
# 添加8099端口外部访问权限(这样外部才能访问)
firewall-cmd --add-port=8099/tcp
# 重新载入,添加端口后重新载入才能起作用
firewall-cmd --reload
其余指令:
# 查看防火墙状态
systemctl status firewalld
# 查看开启了哪些端口
firewall-cmd --list-ports
# 查看端口
firewall-cmd --zone=public --query-port=80/tcp
然后就可以尝试在本地访问该项目了。
不出意外的话,在本地访问 服务器IP:项目端口/... 是可以访问到项目接口的。可是。。。还是出意外了。

无法访问,就是单纯地访问不到服务器上的这个端口(我用虚拟机做了一样的步骤:能成功访问)。
再次检查服务器开放的端口:没毛病呀,8099 是开放了呀!

我甚至将服务器内部的防火墙都关闭了,还是 嗯... 无法访问此页面


反正,就是端口开放的问题!!!!
然后突然受到一篇文章的启发:进入腾讯云服务器的控制台,这还有一个防火墙!??
而且,这里的防火墙开放的端口和我刚才在服务器内部开放的端口不一样。。。

然后我就尝试在这也开放一次 8099 端口,然后在本地再请求一次服务器的 8099 端口。

成功出现了这个页面!那就意味着访问成功了!

尝试调用项目接口:(成功!!)
因为我的项目中有数据库,所以我还要把本地的数据库导入到服务器中。接口才能成功访问。
所以我们还需要在服务器中安装MySQL。
安装MySQL可参考文章:https://www.cnblogs.com/xsge/p/13827288.html
数据库数据:可以先将本地数据库导出为.sql文件,然后将该.sql文件拉到服务器上,然后再导入到服务器的数据库中。

切记:还需要在腾讯云服务器(可能每种服务器都需要)的控制台,开放相应端口
之前我们都是直接用命令:
# 运行jar包
java -jar harmonyos-0.0.1-SNAPSHOT.jar

这种方式是直接运行jar包,当你关闭远程连接时,它就被关闭了,相当于这个进程被杀死了。
可是部署一个项目,那它就应该一直处于运行状态,这样我们才能随时随地的调用API。
在服务器上(我这是centOS)想要让一个jar一直处于运行状态,需要让其在后台启动。
# 后台启动
nohup java -jar xxx.jar &
# 然后通过exit退出终端窗口
exit


我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit