在前后端分离的情况下,如何单独将Springboot项目部署到服务器?以下是我的在第一次部署之后的记录和总结,希望可以帮到同样也刚刚用到服务器的你。
部署服务器主要的几个步骤:1.服务器环境配置;2.配置项目并打包;3.部署到服务器;4.后台运行项目。
服务器环境配置
服务器环境:Debian8 x64(vps)
本机环境:Mac,Intellij IDEA,FinalShell
我们需要一个SSH工具来连接到服务器,因为我使用的MacOs,所以使用了FinalShell。如果安装了brew,可以通过brew cask install finalshell
来安装FinalShell。Win用户可以使用Putty等软件。
此处假设你已会简单使用SSH,并已经连上了你的服务器。
Linux安装并配置JDK
准备
以root身份登录,因为我的vps默认就是root,所以我不用登录,如果需要的话,你可以输入su
回车,然后再输入你的密码(linux输入密码不显示星号或其他替换符号),再回车即可。
确认你的系统是否自带jdk,可以通过输入:
1 | apt-get list installed | grep java |
来列举匹配已安装的java。如果没有,则继续;如果有,可以试试:
1 | apt-get -y remove java-1.7.0-openjdk* |
来卸载(因为我没有试过)。
接下来,我们新建一个目录来存放jdk。
1 | mkdir /home/java |
进入该目录。
1 | cd /home/java |
接下来的操作都是基于此路径进行,如果是存放在其他路径下,请注意对应修改。
下载压缩包
先到官网上查看需要的jdk版本,获取压缩包的下载链接,再使用命令下载
这里选用jdk8,在本地点击打开下载主页,选中Accept License Agreement,点击Linux版本的的.tar.gz
文件(x64或x86视你的Linux而定,可通过uname -a
命令查看,有64即可下x64版本),复制对应的下载链接,这里不需要下载,只是为了获取下载链接。
输入命令:
1 | curl -O https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz?AuthParam=1554125860_f7bf6ea27a443245f5d1cb9fde89b37d |
注意O
是大写的字母。
-O 后面跟着刚才复制的下载链接,这个貌似要实时获取的链接才能下载,有AuthParam参数来校验,否则你会看到所有项都是 0 ,不会变化;出现这个情况的话,重新去点击那个文件,获取下载链接复制过来再试。
用ls
命令查看,可以看到当前目录下出现了一个jdk-8xxx.tar.gz
文件(后缀的AuthParam=…不用管)。
解压并安装
使用命令解压(输入文件名可以输入前一部分,然后按tab键自动补全)
1 | tar -zxvf jdk-8u201-linux-x64.tar.gz... |
此时使用ls
命令可以看到路径下多处了一个目录jdk1.8.0_201
。
检查下载下来的jdk是否正常,输入以下命令验证:
1 | /home/java/jdk1.8.0_201/bin/java -version |
如果能够正常显示jdk的版本信息,即为正常;否则,重新下载。
设置环境变量
打开/ect/profile
文件,并在文件末尾添加(JAVA_HOME的值根据实际路径填写):
1 | # set java environment |
你可以通过以下两种方式使配置生效:
- 重启机器:
reboot
; - 使用source命令:
source /etc/profile
、source ~/.bashrc
分别输入命令 java -version
和javac -version
,若显示jdk的版本信息,说明已正确配置。
可能出现的问题
- 如果出现了
-bash: java: command not found
,检查上面的各个步骤,然后出现这个情况的,请仔细检查配置文件!以及/etc/profile
的各项值是否设置正确。 - 如果出现了
-bash: ./java: cannot execute binary file
,出现这个错误的原因可能是在32位的操作系统上安装了64位的jdk,检查jdk版本和Linux版本位数是否一致。
安装Mysql|MariaDB
MariaDB 和 MySQL是一家。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
这里 安装 MariaDB 来用用,使用ssh工具连接登录上Linux。
安装MariaDB
1 | apt-get -y install mariadb-server |
安装时会让你设置数据库root用户的密码,这个密码和LInux的root用户密码是不同的。
(2019.7.10:因为某些原因换了服务器,在Debian9例安装MariaDB直接跳过了密码设置,这样接下去需要输入密码的时候直接回车)
Debain上MariaDB好像是自动启动的。
手动启动
1 | systemctl start mariadb.service |
手动设置服务自启动
1 | systemctl enable mariadb.service |
配置和简单使用
通过命令:
1 | mysql -u root -p |
进入,然后输入你设置的密码。
修改数据库字符集,使支持中文。先要查看数据库的原字符集设定可登录mysql后,
1 | MariaDB [(none)]> show variables like 'char%'; |
可以看到:
1 | MariaDB [(none)]> show variables like 'char%'; |
默认character_set_database项不为utf8,可以通过修改/etc/mysql/my.cnf
配置文件更改。在该文件的mysqld
字段内加上一句character-set-server=utf8
。
因为我使用systemctl restart mariadb
重启mariadb服务无效,所以只能通过reboot来使配置生效。
允许远程登陆
登陆mysql
1
2
3
4
5
6
7
8# mysql -uroot -p /*输入密码进入*/
/*第一个方式:直接编辑数据库字段*/
MariaDB [(none)]> use mysql;
MariaDB [mysql]> UPDATE user SET password=123456 WHERE user='root';
/*修改允许远程访问*/
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> exit第一个位置,为数据库, 第二个位置,为表,所以
*.*
,表示可以访问任意数据的任意表'root'@'%'
,root
表示远端登录使用的用户名,%
表示允许任意ip登录,可将指定ip替换掉%
,root
与%
可以自定义IDENTIFIED BY 'root'
这个root
是登录时的使用的密码,(方便记忆就用了root,生产环境一定要替换掉)修改配置文件
将
/etc/mysql/mariadb.conf.d/50-server.cnf
中bind-address = 127.0.0.1
加#
注释掉重启服务
1
systemctl restart mariadb.service
将本地Springboot项目打包
确保你的项目完整,然后在右侧(或者边栏的其他地方)的Maven Projects中选中package双击或者右键点击Run Maven Build,然后你会看到在运行框程序正在打包。打包默认是你最初建项目时选中的jar工程。
当运行框出现BUILD SUCCESS说明你的项目已经打包成功了,打包好的jar包是在项目的target文件夹下。
将本地数据库上传至服务器
我本地使用的是Mysql+Navicat Premium,如果你也是用的这个组合,那么接下来的操作会很简单。如果你没安装Navicat Premium,可以看Navicat Premium for Mac破解教程。如果是其他情况,我的文章里没有记录,请自行百度。下面是具体步骤:
打开Navicat Premium,连接到你的服务器的数据库(请注意打开服务器的3306端口);
在服务器MySQL创建一个和 要迁移数据的数据库 同名的数据库,为了方便,直接在Navicat图形界面操作(有兴趣可以在命令行操作),右键 服务器连接 -> 创建数据库 -> 输入要迁移的数据库名,字符集选择utf8 – UTF-8 Unicode -> 确定;
进行数据迁移,点击Navicat菜单栏“工具” -> 数据传输… -> 设置“源”为本地数据库“localhost”,设置“目标”为服务器数据库,选择要传输的数据库,和接收数据的数据库 -> 开始传输 -> 确定 -> 传输中… -> 关闭(这是已经传好了,别点“开始”,不然又传一次)。
部署到服务器并运行
部署Springboot项目的话就不用下载tomcat了,Springboot内嵌tomcat。如果是之后还要部署其他项目,也可提前把tomcat下了。如果你配置了安全组或者防火墙,请打开必要的端口
将生成的jar文件上传至你的服务器(可以任意位置),比如我上传至了/home
下。
cd到jar文件路径下,然后使用命令:
1 | nohup java -jar demo-0.0.1-SNAPSHOT.jar >/home/test.log>&1& |
然后可以直接在对应的端口/接口访问,也可以使用命令进行查看项目是否已经后台运行。可以使用:
1 | ps -ef |
查看进程运行的情况。
1 | root 16974 5043 0 08:55 ? 00:00:00 bash -c export LANG="en_US.UTF-8";export LANGU |
可以看到项目的进程号23904正在运行。
如果需要停止项目的运行直接使用命令:kill 23904
(进程号)
测试端口
推荐使用Postman进行端口的测试。
参考文献
- markix:【入门篇】篇一、Linux服务器安装Java运行环境,即安装JDK
- markix:【入门篇】篇三、Linux服务器安装MySQL | MariaDB
- markix:【入门篇】篇四、将本地Web项目部署到服务器,迁移本地数据库到服务器
- Box_clf:如何将IDEA的Springboot项目打包到服务器进行后台运行