Springboot项目部署到腾讯云(超详细版)

转载自:少年弈

一、根据个人需求修改tomcat默认端口号

在application.properties里或者application.yml里加上server.port=8081(修改为8081端口)

二、把项目打包成jar

在maven窗口点击

Springboot项目部署到腾讯云(超详细版)插图1

就会自动打包在项目路径文件夹的/target文件夹下,自己可以找找

三、因为springboot有内置tomcat容器,这点比较方便,省去了tomcat的部署。我们到时候直接可以直接把jar包扔到linux上。

我们上传文件使用ftp工具FileZilla,国内在中文站下载,不然下载速度慢死了……

https://www.filezilla.cn/download/client

主机填公网ip,用户名和密码云服务器提供商应该有给,腾讯云端口是22(其他服务商端口自己查查)然后点击快速连接

四、下载jdk

https://www.oracle.com/java/technologies/javase-jdk14-downloads.html里下载64位jdk,选tar.gz结尾的

在国内的话oracle下载太慢,可以用清华的镜像站

https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/

五、安装jdk

1.在FileZilla中打开我们下载jdk安装包的目录,右键文件名,点击上传

我上传在/root目录下了

Springboot项目部署到腾讯云(超详细版)插图2

2.cd /root命令可以切换到绝对路径/root下

ls -al命令可以显示路径下所有文件,没事干ls -al一下避免迷路

pwd命令可以查看当前所在的路径

Springboot项目部署到腾讯云(超详细版)插图3

在usr下创建一个叫java的文件夹

mkdir /usr/java

把我们的压缩包解压到我们创建的文件夹

tar xzf jdk-8u171-linux-x64.tar.gz -C /usr/java

(注意-C是大写)

Springboot项目部署到腾讯云(超详细版)插图4

3.cd到我们的解压路径,ls -al看看是不是解压好了,记住这里jdk的名字,下面设置环境变量要用

4.设置环境变量

vi /etc/profile

进入vi后,按 i 可以进行输入,编辑完以后按 Esc ,然后输入 :wq 即可保存并退出

在文档末尾加上

#set java environment 
export JAVA_HOME=/usr/java/jdk-12.0.2
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib 
export PATH=$JAVA_HOME/bin:$PATH

保存退出后,运行以下命令以使更改生效

source /etc/profile

此时可以运行java -version来确认是否配置成功

六、安装mysql

1. mariadb是mysql的一个分支,Centos自带mariadb但是我们不需要,所以我们需要自己下载mysql

可以在mysql官网下载,如果国内的小伙伴感觉比较慢(虽然总共只有几十KB也慢不到哪去),同样可以在清华大学的镜像站下载https://mirrors.tuna.tsinghua.edu.cn/mysql/

我下载的是mysql80-community-release-el7-1.noarch.rpm

版本是8.0,下载mysql5.6版本容易出现各种诡异的错误,慎重。

注意这里el7的意思是适用于centos7版本,我的系统版本是centos7.5,注意系统版本不要下错了,不然报错。

2.安装命令

yum -y install mysql80-community-release-el8-1.noarch.rpm

然后

yum -y install mysql-community-server

这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。

3.也可以先

yum install wget

然后输入

wget -i -c http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

命令来下载

下载后还是

yum -y install mysql80-community-release-el7-1.noarch.rpm
yum -y install mysql-community-server

3.报错Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)的话

执行yum install libstdc++

如果缺少其他包,按照缺少包的名字安装。

如果安装了还没用,检查自己下载的mysql版本,比如我上面说的el8适用于centos8,我第一次安装的时候不知道这个下载了el8,卸载8版本手动清除mysql文件后依然报el8的错,网上找了好几种彻底删除的方式均无效,无奈之下重装系统才好了。

一个简单的小笔记:

如果使用yum install xxxx,会找到安装包之后,询问你Is this OK[y/d/N],需要你手动进行选择。但是如果加上参数-y,就会自动选择y,不需要你再手动选择。

yum -y install 包名(支持*) :自动选择y,全自动

yum install 包名(支持*) :手动选择y or n

4.安装完毕后运行mysql

service mysql start

我这里报错了:Failed to start mysql.service: Unit not found.没报错请忽略以下内容

首先看一下服务列表里有没有这个服务:

systemctl list-unit-files --type=service

然后查找mysql相关的service

发现了只有mysqld.service,没有mysql.service

使用 service mysqld start 能启动,很奇怪。

5.登录

mysql -uroot -p

通常第一次没密码,如果有密码的话打开mysql默认日志文件/var/log/mysqld.log

找到A temporary password……那一行,就有密码了

Springboot项目部署到腾讯云(超详细版)插图5

然后用

mysql -uroot -p密码

进去

这个密码不好记,我们修改一下

格式alter user '用户名'@'主机名' identified by '新密码';

例如

alter user 'root'@'localhost' identified by '123456';

注意mySQL8强制要求必须含大小写字母和特殊符号

6.此时如果我们用客户端远程连接数据库是不行的(此处以HeidiSQL为例)

Springboot项目部署到腾讯云(超详细版)插图6

我们在sql里执行三个命令:

use mysql #访问mysql库
update user set host = '%' where user = 'root'; #使root能再任何host访问
FLUSH PRIVILEGES; #刷新

Springboot项目部署到腾讯云(超详细版)插图7

我们再用远程客户端连接,发现已经可以了

在数据库里建表吧,记得项目的数据库地址要改一改哦

七、部署项目

先上传jar包,然后运行,运行命令是:

java -jar 包名.jar

Springboot项目部署到腾讯云(超详细版)插图8

然后我们在浏览器输入IP,网站已经可以正常运行了(不要在意丑陋的内容,演示嘛嘿嘿)

Springboot项目部署到腾讯云(超详细版)插图9

但是此时只要我们关闭linux控制台,它就进不去了。

守护进程写法(以包名为xx.jar为例)

nohup java -jar xx.jar > logName.log 2>&1 &

命令详解:

nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程。

>logName.log :是nohup把command的输出重定向到当前目录的指定的“日志文件名.log”文件中,即输出内容不打印到屏幕上,而是输出到”日志文件名.log”文件中。不指定文件名会在当前目录创建nohup.out,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这里&相当于标准错误等效于标准输出,即把标准错误和标准输出同时输出到指定的“日志文件名.log”文件中。

如果想关闭的话,对于已经后台的执行的进程,可以通过ps命令查看对应pid,直接sudo kill pid即可

八、去控制台解析一下域名

Springboot项目部署到腾讯云(超详细版)插图10

点击添加记录,一般要添加两条,也可以根据自己个人情况添加。一条带有“www”的可以通过www你的域名来访问你的网站 和一条不带“www”。不带“www”以“@”符号来代替,记录值的位置记得填写你主机的域名

Springboot项目部署到腾讯云(超详细版)插图11

但是仅仅这样设置的话依然需要在网址后加上端口号才能访问,怎样可以不加端口号呢?

当访问域名的时候,端口默认指定的是80;而80端口在Linux系统下,1024之前的端口是只有root用户才能使用的,

因此我们需要映射一下端口。比如我们设置的端口是8081,因此将系统层面将端口80 映射到8081,

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081

命令解释:

-t nat : 指出我要操作什么表.(不写就表示filter.默认是filter)

-A PREROUTING : A 添加的意思.表示我要在PREROUTING 中添加一个规则

--dport 80 : 如果请求80端口.

--to-port 8081 : 那么就转到8081端口.

至此我们的项目部署完毕,希望能对你有所帮助。