一.配置部署所需的环境.
1.1 什么是部署?
- 要想知道什么是部署, 就要先了解我们在日常开发的过程中所设计到的几种环境:
- 开发环境: 软件开发环境指的是开发人员在创建、测试和部署软件应用程序时所需的一系列硬件、软件、工具和流程的集合。它是为了支持软件开发过程而构建的基础设施.
- 测试环境: 测试环境是专门为软件测试工作搭建的环境,用于模拟真实生产环境以验证软件的功能和性能。
- 生产环境: 生产环境是软件正式发布并对外提供服务的环境,用于面向最终用户的实际使用.
- 部署: 把程序安装到生产环境上, 这个过程称为 “部署”. 也叫 “上线”. 一旦程序部署成功, 那么这个程序就能被外网中千千万万的普通用户访问到. 当然,如果程序有 BUG, 这个 BUG 也就被千千万万的用户看到了. 部署过程至关重要, 属于程序开发中最重要的一环. 一旦部署出现问题, 极有可能导致严重的事故(服务器不可用之类的问题). 为了防止部署出错, 一般公司内部都有一些自动化部署工具(如 Jenkins 等). 当前我们在学习阶段先使用手工部署的方式来完成部署.
1.2 环境配置.
- 程序正常运行, 需要保证环境和程序都要正确, 我们需要先设置环境
- 实际工作中, 开发环境, 测试环境以及生产环境的配置都是不一样的. 比如mysql的用户名和密码
我们可以针对不同的环境, 设置不同的配置
多平台文件配置
- application-dev.yml (开发环境的配置)
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 120348driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句mapper-locations: classpath:mapper/**Mapper.xml
# 设置日志文件的文件名
logging:file:name: spring-blog.log
- application-prod.yml (生产环境的配置)
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: YT@yyds.666driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换mapper-locations: classpath:mapper/**Mapper.xml
# 设置日志文件的文件名
logging:file:name: spring-blog.log
- application.yml (主配置文件, 用于选择在不同的环境下,选择不同的配置文件)
spring:profiles:active: @profile.name@
在pom中添加标签,方便我们选择不同的环境配置:
<profiles><profile><id>dev1</id><properties><C>dev</C></properties></profile><profile><id>prod1 </id><properties><profile.name>prod</profile.name></properties></profile></profiles>
二.构建项目并打包.
- 在本地使用maven进行打包
- 如果Test代码中有与环境配置相关的操作(比如数据库相关的操作), 打包会失败, 点击下图①处的图标, 可以跳过测试
- 点击clean->package
三.上传Jar包到服务器, 并运行
3.1 上传Jar包到服务器
- 将打好的Jar包, 直接拉到Linux的终端中
如果使用其他客户端,不支持文件的上传, 需要借助lrzsz命令- 上传文件
sz filename
- 下载文件
rz
- 上传文件
- 问题: 如果执行上述命令之后, 提示 Command ‘XX’ not found , 表示当前云服务器未安装lrzsz
命令, 需要先进行安装- 安装lrzsz
apt-get install lrzsz
- 安装lrzsz
- 运行程序.
- 命令:
nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &
nohup : 后台运行程序. 用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行. - 语法格式:
nohup Command [ Arg … ] [ & ]
- 参数说明:
- Command:要执行的命令。
- Arg:⼀些参数,可以指定输出文件
- &:让命令在后台执行,终端退出后命令仍旧执行
- 比如:
nohup java -jar blog-0.0.1-SNAPSHOT.jar >/logs &
Linux 可以通过 > 把需要输出的内容写到指定文件中. 这样的操作称为 “重定向”.
- 命令:
3.2 开放服务器端口号.
-
如果外网需要访问该服务, 需要先服务器防火墙开放对应的端口号, 本着服务器安全的原则,云服务器上的端口非必要不开启. 比如常见端口号: 数据库 3306 , Redis 6379, 尽可能避免开放, 而是采用其他方式来连接, 比如配置隧道的方式
-
以阿里云为例子:
3.3 杀掉进程.
如果我们需要重启服务, 或者重新部署等, 都需要先停止之前的服务.
-
查看当前服务的进程
ps -ef|grep java
-
杀掉进程
kill -9 PID
四.常见问题.
- 一个程序的正常运行, 需要程序的正确和环境的正确. 同样的代码在Windows上可以运行成功, 不一定在Linux上运行成功. 不同的系统对代码的理解和支持是不同的. 比如Windows系统对MySQL不区分大小写, Linux区分大小写服务不能正常访问的原因有很多, 主要分以下几个方面
- 服务未启动
a. 使用 ps -ef|grep java 查看程序是否在运⾏
b. 使用 curl http://127.0.0.1:8080/blog_login.html 看下是否有返回html页面,
如果有返回, 说明程序启动成功了, 考虑端口未开放
c. 如果未启动成功, 需要查看对应的日志, 根据原因来分析.
i. 数据库不存在
ii. 表不存在(区分大小写)
iii. 数据库密码不正确
iv. Jdk 安装版本不对, 或者未安装
v. mysql未设置密码
vi. … - http端口未开放
检查云服务器防火墙/安全组是否开放相应端⼝(如8080)
- 服务未启动