JavaWeb项目实际部署流程
前几天从阿里领了一台服务器,记录下服务器从0到运行服务的过程
Vue部署
前端部署主要需要注意下axios请求根地址需要替换,而且我使用Nginx反向代理,所以似乎不需要关注路由模式的问题
import axios from 'axios'
const config = {
baseURL: "http://localhost:8080",
}
const request = axios.create(config)
export default request
- 在项目部署前,先将baseURL更换为服务器的ip
- 执行
npm run build
命令,此时会进行项目的检查和打包,打包完成后会在根目录下产生一个dist文件夹 - 将这个文件夹移动到服务器中即可
不过因为这个项目是我拿来练手的项目,导致ts类型报错了…最后通过AI才解决类型的问题(创建对应的.d.ts文件)
docker安装
之前在虚拟机中安装docker的时候,我记得需要先配置阿里云的yum源,然后再进行安装,操作起来好像有点麻烦,所以这次我直接用了宝塔面板
- 打开宝塔官网,复制脚本命令,再到服务器上执行
- 安装成功后将用户名和密码记住,在浏览器上打开宝塔的端口,输入用户名和密码
- 可以以图形化的界面安装一些应用(最近docker好像放开了,直接yum似乎也可以安装了)
Nginx安装
安装完docker后,其他的应用就比较简单了,关于Nginx的部署可以看docker安装Nginx和Nginx无更新的解决方案,
安装完nginx容器后,将之前那个dist文件夹移动到对应目录下,对应目录指的是:要不移动到你挂载的数据卷下,要不直接docker cp dist nginx:/etc/
需要注意的是配置nginx.conf是基于docker里nginx容器那个目录结构的
数据库安装
我使用的是mysql8.0,数据库存储在本地(windows)
- 先执行
mysqldump -u 用户名 -p 数据库名 > 导出数据库文件名.sql
,然后输入密码,导出的数据库大多在你桌面的上一级目录上(C:/user/用户名/) - 将这个文件移动到服务器中
- 通过docker安装mysql容器,安装的过程还是十分顺利的
- 安装完后,执行
docker cp 数据库文件.sql mysql:/
将数据库脚本移动到docker容器中 docker exec -it mysql bash
进入到mysql容器中,登录mysql,创建一个数据库,use 你新创建的数据库
,然后执行source 数据库文件.sql
将之前那个导出的数据库数据导入到服务器的mysql中- 执行一个简单的select语句后发现英文正常显示,中文显示
?
,然后意识到我没指定字符集,不仅是数据库的字符集需要指定,mysql的字符集同样需要指定 - 打开/etc/my.conf(docker容器中)
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
修改完成后中文正常显示了
不过我在windows的cmd连接服务器数据库l时发现中文乱码了,似乎是字符集不匹配的原因?,但是Java获取数据的时候中文正常显示,我就没管
部署springboot项目
SpringBoot部署起来确实方便很多,直接Maven执行package就能打包运行了,不过需要注意提前修改访问的地址
- 一般application.yaml配置都会分成不同环境创建
spring.profiles.active = test
能直接切换到不同配置上,或者偷偷懒没创建多个环境配置文件,那就需要手动修改配置文件了,主要是切换不同环境下mysql,es,redis啥的密码,用户名,url等以及需要暴露的端口号 - 执行package命令,如果项目没问题的话会在根目录下产生target文件夹,将target文件夹中的xxx.jar移动到服务器中(如果jar包只有几十B看一下是不是没指定主类)
- 创建一个dockerfile文件(不需要后缀,文件名指定dockerfile就行)
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY 项目名.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
将项目名替换下,更换到自己的JDK版本,将这个dockerfile移动到服务器中
4. 切换到dockerfile和.jar文件目录下,执行docker build -t 镜像名 .
创建自定义镜像,docker run -d --name 容器名 -p 端口映射 容器名
运行容器即可
5. 打开阿里云实例,将暴露的端口放开
6. docker ps
查看服务运行状态,如果有问题可以docker logs 容器名
查看Java服务的异常信息,再进行修改
总结
项目部署起来感觉也不是特别困难,基本上和在虚拟机部署一致(可能只是密码设复杂点…)
对于其他的中间件(redis,es,mq)通过docker也能快速安装,将nginx,java服务,mysql同时运行后,直接打开IP就能访问感觉还是成就感满满捏