网上很容易找到如何将前后端分离项目部署到服务器的方法介绍,为了顺便学习下Docker,在这里记录下如何在Docker上快速部署前后端分离项目。 以RuoYi-Vue为例。
前端部署
1.前端打包
# 打包正式环境
npm run build:prod
# 打包预发布环境
npm run build:stage
构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 .js 、.css、index.html 等静态文件。 将打包好的dist文件夹放入之前映射好的服务器本地文件路径/mydockerdata/nginx/www/下。 注1:如果需要自定义构建,比如指定 dist 目录等,则需要通过 config (opens new window)的 outputDir 进行配置; 注2:部署时改变页面js 和 css 静态引入路径 ,只需修改 vue.config.js 文件资源路径即可。
2.Nginx配置
修改nginx.conf,并重启容器。
server {
listen 80; # 监听的端口号
server_name 47.100.189.194; # 服务器的IP地址
location / {
root /usr/share/nginx/html/dist;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://47.100.189.194:8080/;
} #映射访问路径
}
后端部署
1.数据库迁移
迁移方法: 采用MySQL Workbench提供的“Migration Wizard”方法可以将本地的数据库完整迁移到服务器的MySQL容器中,比网上找的各种备份-还原的方法简介好用多了。并且还支持将其他非MySQL关系型数据库迁移到目标MySQL数据库中。
++数据库这里遇到了一个坑,就是按照官网的说法,Mysql8.0一旦你在初始化的时候没有给与相应的值,则默认lower_case_table_names=0。后续如果你想要在my.cnf中修改此项,Mysql8.0是不允许两者不一致的情况发生(5.7的版本是可以的,所以5.7的版本依然可以直接修改my.cnf)。所以事后修改这个配置是不允许的,我进行修改后,MySQL容器直接运行不了。所有只能之前在MySQL容器初始化的时候就指定,即在最后加上-d mysql:8.0 --lower-case-table-names=1++
2.后端必要的修改
编辑resources目录下的yml配置文件。
# application-druid.yml
url: jdbc:mysql://47.100.189.194:3307/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: yourpassword
# application.yml
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 8080
# redis 配置
redis:
# IP地址
host:
# 端口,默认为6379
port:
# 密码
password:
# logback.xml,可修改日志存放路径,在每个${log.pattern}下面加上UTF-8。
<!-- 日志存放路径 -->
<property name="log.path" value="/home/lym/logs" />
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
因为Spring Boot内置了Tomcat,如果是打算用war包部署,则还需要在lym-framework的pom.xml中移除Tomcat的依赖,jar包则不需要。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
之后在bin目录下依次运行clean.bat、package.bat。会在项目下生成 target文件夹包含war或jar。
并将打包好的war包放入tomcat服务器webapps内。
由于Tomcat默认是访问的Root根目录,所以需要修改Tomcat下的server.xml,将根目录映射到网页实际存放的目录,通过修改Context的path属性来指定url最终访问的是哪个应用,而docBase指明该应用的具体物理地址。
<Context docBase="/usr/local/tomcat/webapps/lym-admin" path="/" reloadable="true" source=""/>
之后访问8080端口,发现不再显示Tomcat官网主页,而是显示一串json:{"msg":"请求访问:/,认证失败,无法访问系统资源","code":401},说明成功访问到项目的地址。