将项目部署到服务器上
最近因为毕业设计的项目需要一个远程检查,所以老师让我把毕业设计部署到服务器上,然后让我联系一个买了阿里云服务器的学长,学长的阿里云上已经有 docker 了,所以记录一下将项目用 docker 部署到阿里云上的过程。
目录
ssh 连接
ssh 连接主要使用的是 Xshell 的教育版,官网的下载地址是这个:
教程主要参考的下面这个,由于我的账户密码是学长给的,所以参考的就是后半部分的连接部分:
按照教程连接对应的主机时,会要求输入对应的账户名和密码,同时分配账户的人还可以设置各个账户的权限,我发现我这个账户就没有 root 权限。
neo4j 数据库
neo4j 数据库为了保证兼容性,达到和在自己电脑上一致的运行效果,首先查看自己电脑上 neo4j 的版本信息:
然后参考这两篇博客部署 neo4j:
Centos 下 Docker 中运行 neo4j 并配置挂载本地文件
首先使用
docker pull neo4j:[对应版本号]
的命令下载对应的 neo4j 版本:
然后输入对应的语句配置和启动 neo4j:
docker run -d --name container_name \ //-d 表示容器后台运行 --name 指定容器名字
-p 7474:7474 -p 7687:7687 \ //映射容器的端口号到宿主机的端口号
-v /home/neo4j/data:/data \ //把容器内的数据目录挂载到宿主机的对应目录下
-v /home/neo4j/logs:/logs \ //挂载日志目录
-v /home/neo4j/conf:/var/lib/neo4j/conf //挂载配置目录
-v /home/neo4j/import:/var/lib/neo4j/import \ //挂载数据导入目录
--env NEO4J_AUTH=neo4j/password \ //设定数据库的名字的访问密码
neo4j:version //指定使用的镜像对应版本号
最后通过客户端的浏览器查看访问对应端口验证是否设置成功:
MySQL 数据库
首先还是查看 MySQL 的版本:
然后主要参照这个博客部署 MySQL:
但是这个教程中修改文件位置会报错,原因应该是默认配置文件的位置发生了变化:
之后的过程与下载和配置 noe4j 类似:
部署后端
参考了这些博客部署 SpringBoot 的项目:
使用 docker 将 SpringBoot 项目部署到阿里云
首先,需要将 SpringBoot 项目打包:
然后需要将打包后的 jar 包发送到服务器上,这时候就需要使用工具发送,我使用的是 Xftp
Xftp 支持图形化界面操作,新建一个传输连接之后,创建对应目录拖动即可
之后需要使用 vim 编辑一个配置文件:
之后悲催的发现 jdk 11 没有官方的 docker 镜像,为了保证版本兼容,先找一个靠谱的第三方 jdk 11 的镜像:
然后需要制作一个 jdk 11 的 docker 镜像,这里参考了这两个博客:
然后使用构建语句:
docker build -t java:11 .
构建镜像(注意后面那个点不要少了,表示在当前路径构建)
完成之后再次构建后端镜像就成功了:
最后运行后端的镜像:
后端部署的 bug
当事情显得过于顺利的时候,往往就是坎坷的开始,当以为部署完成的时候,实际上就是开始的 debug 的时候。
总结了一下,部署的时候大致存在以下几个问题:
1.地址的误用
由于当时在开发的时候并没有考虑到部署到服务器的问题,所以有一些需要前后端配合写地址的地方直接把 localhost 和前后端的端口号硬编码到地址中去了,但是后面发现部署到服务器上的时候需要将地址改为服务器的地址。
具体的解决方法就是在代码中引用配置文件的字段,这样子重新配置时只需要修改配置文件即可。
2.配置文件中字段的误用
为了解决之前将地址硬编码进入代码的问题,于是将各种变量都写进了配置文件里面,然后由于参考网上教程的将后端端口命名为 serve.port 于是想当然的把地址命名为 serve.address,然后部署之后就没法启动了,tomcat 插件疯狂报错端口被占用,重点是这个错误网上搜索基本找不到一样的问题,于是疯狂被折磨。
之后求助了一下学长,学长研究了很久说这个字段是有含义的,修改了之后问题就解决了。
springboot server.address 配置问题
3.后端打包前没有先 clean
还有一个要注意的点就是后端打包时最好先 clean 一下,有一个包怎么也部署不成功,但是 clean 了一下之后重新打包部署就好了,这也是一个好的习惯。
重新部署
解决了上面的问题我们重新部署一下,前端部署实际上就是打包成静态资源放到后端的 /resources/static 文件夹中,首先打包前端的资源,用:
npm run build
这个命令。
然后打开对应前端项目的 dist 文件夹,将其中的所有内容复制到对应后端项目的 /resources/static 文件夹中。
之后 clean 后 package 打包,按照本文第四部分的步骤打包即可。
确认一下 Dockerfile 的内容:
FROM java:11
ADD ./kgbackend-0.0.1-SNAPSHOT.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.config.location=/home/application.properties","-jar","/app.jar"]
打包的命令:
docker build -t kg .
运行的命令:
docker run -d -p 8443:8443 -v /home/wy/data:/home --name kg kg
通过
docker ps -a
查看运行结果。