1. 在服务器上下载 Mysql 数据库
MySql 数据库默认是不允许远程登录的,需要手动开启
1. 开启 root 用户的远程登录权限
- 登录 mysql 数据库;
mysql -u root -p
- 切换数据库
use mysql;
- 开启 root 用户远程连接的权限
update user set Host='%' where User='root';
- 刷新权限
flush privileges;
- 退出
exit;
参考文章:blog.csdn.net/LLL31898606…
2. 修改配置文件
- 使用 cd 命令切换到对应的目录下,使用 vi 命令进入 my.cnf 文件进行查看编辑
cd /etc
vi my.cnf
- 将 bind-adress 的值从 127.0.0.1 改成 0.0.0.0
- 重启 mysql 服务
service mysql restart
-
如何找到 MySQL 的配置文件
- 找到 linux 系统上的数据库配置文件
- 在宝塔面板上修改配置文件
-
记得数据库用到的端口不仅要在宝塔面板开启,同时在服务器上也要开启。不然就无法访问
- 开启宝塔面板的端口号
- 开启服务器的端口号
- 连接的 URL 错误:
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
如果抛出这个异常,只需要在数据库的 url 路径上加上 useSSL=false 即可。
-
SpringBoot 项目切换线上数据库
- SpringBoot 项目通过
application.yml文件添加不同的后缀区分不同的环境
生产环境的配置文件:application-prod.yml。在这个文件中设置线上数据库、redis...的地址
spring:
datasource:
password: password
username: username
url: jdbc:mysql://ip:3306/myapp?useUnicode=true&characterEncoding=utf-8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
session:
timeout: 86400
server:
address: 0.0.0.0
- 使用 package 的命令打包项目,在本机以生产环境启动测试
启动命令:
java -jar .\user-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
如果测试成功,插入数据成功,则说明切换数据库成功。
2. 在宝塔面板上上线前端项目
前端项目使用生产环境启动
- 开发环境和生产环境可以在配置文件后添加对应的环境名称后缀来区分不同的环境
- 在生产环境的配置文件中指定请求服务器上后端项目的地址。
在网站的页面上,点击添加站点
- 填写 域名:端口。可以填写服务器的 ip 地址,默认的端口是 80 端口。
- 完成后就可以通过 域名:端口 访问前端的页面
- 在指定的目录上面上传前端的 dist 文件
4. 在宝塔面板上上线 java 项目
在添加 java 项目中,增加要上线的项目
- 将后端项目的 jar 包上传到指定的目录上,然后在添加的项目中选定上传的目录
- 指定项目的端口
- 填写项目执行的命令(默认会帮你写的,记得添加切换环境的配置)
- 记得项目用到的端口除了在宝塔 linux 开放后,还要在 华为云的服务器上放开。
/usr/bin/java -jar -Xmx1024M -Xms256M /www/wwwroot/user-center-backed/user-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
要修改
-
依赖的环境地址:
-
数据库地址
-
缓存地址
-
消息队列地址
-
项目端口号
-
-
服务器配置
5. 解决跨域问题
添加跨域头:让服务器告诉浏览器:允许跨域(返回 cross-orgin-allow 响应头 )
使用 nignx 网关解决跨域问题。
- 在 nginx 的配置文件中增加这段配置就解决了跨域问题
location /api/ {
proxy_pass http://127.0.0.1:8080/api/;
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
add_header Access-Control-Allow-Headers '*';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Max-Age' 86400;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'reqid, nid, host, x-real-ip, x-forwarded-ip, event-type, event-id, accept, content-type';
add_header 'Content-Length' 0;
add_header 'Content-Type' 'text/plain, charset=utf-8';
return 204;
}
}
修改后端服务,在后端项目中增加跨域的配置
- SpringBoot 项目增加这样的配置类就可以解决跨域问题
/**
* 全局跨域配置
*
* @author yupi
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路径:
registry.addMapping("/**")
//是否发送Cookie
.allowCredentials(true)
//放行哪些原始域
// 当 Credentials 为 true 时,Origin 不能为星号,需要是具体的 ip 地址
// 如果接口不带 cookie ,Ip 无需要设置成具体 ip
.allowedOrigins("http://localhost:3000","http://ip:80")
.allowedMethods("*")
// 设置允许的方法
.allowedHeaders("*")
// 跨域允许时间
.maxAge(3600);
}
}