作为一个合格的程序猿,仅仅会打代码还是远远不够的,项目的部署也是我们必须要会的操作,也就是所谓的上线,将我们本地开发好的项目部署到远程服务器上,使得任何机器都可以通过我们远程服务器的公网ip或者域名加上端口号访问到我们的项目。这篇博客详细的列出每个步骤,并且也列举了在部署过程中常见的问题,看完这篇文章,你一定会有所收获!
首先,我先给大家捋一下项目部署的流程:
环境搭建: 我们以当下最流行的项目为例,最终打成的是一个jar包,jar包要在远程服务器上跑起来,环境搭建是第一步,也就是安装jdk环境,至于的话,自带,所以不安装也可以;
数据库的部署: 在本地开发的时候,我们代码里面的数据库连接主机名写的是,之所以这样写了能访问到,那是因为我们的项目和数据库都在我们的本地机器上,所以可以访问到;而如果项目部署到远程服务器上,要访问到数据库,应该先部署数据库,至于数据库连接还能不能写,要分两种情况,如果我们的数据库和项目都部署到了同一台远程服务器上,那可以;如果部署在不同机器上,那显然不行,这种情况的话数据库连接的主机名就需要修改成数据库所部署的那台机器的公网ip或者域名。
上面两步操作完成之后,就可以把本地打好的jar包上传到远程服务器上,远程服务器进入jar包所在目录,执行 java -jar jar包名 即可启动项目,至此,项目部署完成!
对于以上的步骤,我再详细的列出:
【一】数据库部署到远程服务器
方法一:连接远程服务器进行命令行操作
将本地的数据库导出成.sql文件在远程服务器中创建一个文件夹,专门存放.sql文件的执行rz命令(前提是安装了lrzsz),将本地的.sql文件上传到远程服务器上该文件夹;也可以使用xftp实现文件传输登录mysql:mysql -u root -p(回车后输入密码)执行.sql文件之前需要先创建对应的数据库
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
选中刚刚创建的数据库之后再执行.sql文件:use 数据库名执行.sql文件: ***.sql
(注意如果我们是在.sql文件所在的文件夹中执行该命令就不用加路径,否则需要加上.sql文件所在路径)
方法二:本地连接远程服务器的数据库进行可视化操作
关于本地连接远程数据库的操作可参考我另一篇博客:
同样是先将本地的数据库导出成.sql文件,我们可以看下导出来的.sql文件包含了什么内容:
这里只截图了部分,下面开始的都是表结构和表数据,可以看到导出来的.sql文件并没有为我们创建数据库,所以在导入.sql文件之前需要先手动创建数据库,并且在我们导出来的.sql文件中添加一行选中我们的数据库 use 数据库名
以上两步操作没完成的话在导入.sql文件的时候都会报错,显示没有选中数据库,如下图:
操作完成之后,便可以将.sql文件导入远程mysql数据库了。
【二】项目部署到远程服务器
当我们已经将数据库部署到远程服务器上,如果数据库和项目部署不在同一台远程服务器上,那么在将项目打成jar包之前需要先修改数据库连接的配置信息,将主机名修改成数据库所部署的那台机器的公网ip或者域名,如果数据库和项目部署在同一台远程服务器上,那么主机名可以继续使用;
连接阿里云远程服务器,并使用xftp将本地的jar包传输到远程服务器上,如果安装了lrzsz可以直接使用rz命令上传
放行端口号,部署项目成功之后,要能够访问到项目,还应该在阿里云控制台开放对应的端口(进入阿里云官网)
除此之外,还应该在宝塔面板中的防火墙放行该端口
关于宝塔面板: 其实可以简单的理解成就是用来管理我们服务器的,可视化操作简单,管理方便。我们要在服务器中安装软件,部署环境,除了使用linux命令,也可以使用宝塔面板进行可视化操作,去到宝塔面板里的软件商店即可下载,另外,对于防火墙的端口号放行,通过宝塔面板设置也非常的简单快捷。
关于服务器的购买教程和宝塔部署的相关操作可以参考视频:
【三】启动项目 在中操作,先进入到阿里云远程服务器中jar包所在的文件夹目录使用nohup java -jar jar包名 & 命令运行jar包
(nohup加上&表示项目可以在后台永久的执行,即使关闭终端也不会停止运行;如果后面想要停止该项目的运行,可以直接结束该项目端口占用的进程)
以上命令执行之后会提示:nohup: input and to ‘nohup.out’,这是正常提示,并不是错误,直接打回车就可以。该提示产生的原因是nohup默认会把标准输出重定向到默认文件nohup.out中,也可以自定义该输出文件,例如:nohup java -jar jar包名 >temp.txt & 但是标准错误输出没有重定向到某个文件,所以会有该提示。
如果想要不输出该提示,省去打回车键的操作,那么可以使用以下命令:nohup java -jar jar包名 2>&1 & 解释:2>&1 是将错误提示信息的输出重定向到标准输出,而这里的标准输出已经重定向到默认文件nohup.out中,也就是说标准的错误提示也直接输出到nohup.out中,所以就没有提示了,也就不用再打回车了。
【四】需要注意的问题 如果已经在阿里云控制台开放了项目对应的端口号之后,通过公网ip和端口号还是无法访问项目的话,最大的一个可能就是防火墙的原因,防火墙并没有开放对应的端口号,这时候就可以使用宝塔面板去防火墙设置里放行对应的端口号;关于项目运行的端口号,建议在打jar包之前改成不常见的那些端口号,避免出现端口号冲突,例如使用8080、3306、80这些端口号都容易出现端口号冲突,尽量不用。Linux下解决端口号冲突的方法:
# 查看所有端口使用情况
lsof -i
# 查看具体某个端口使用情况
lsof -i:端口号
# COMMAND指的是进程名,PID指的是进程号/进程ID
# 通过进程名结束占用端口的进程
killall 进程名
# 通过进程ID结束占用端口的进程
kill 进程ID
# 通过进程ID强制结束占用端口的进程
kill -9 进程ID
PS:以上就是整个项目部署的完整流程,如果看了之后还有问题的小伙伴可以私信我,没准能帮得上忙哦!