RBAC全流程部署介绍

前言

用了几学习了尚硅谷的通用权限系统,考虑到和我毕设契合度非常高。于是为了测试部署的可行性,对该项目进行了线上部署,之前阿里云ECS的活动领取了几个月的服务器,正好可以进行本线的部署,阿里云活动的地址。如果部署了后面的服务,但无法访问,需要在服务器控制台开启相应的端口

高校计划-免费学生云服务器

安装Docker

项目部署使用的是docker工具进行操作,我们需要安装的是docker本体和docker-compose工具。在不同平台有不同的安装方法,这里提供了最方便的安装方法,我们采用的是安装脚本进行安装。如果需要网页显示docker可以安装之前文章提到的Portainer

Docekr安装

1
2
3
4
curl -sSL https://get.daocloud.io/docker | sh

其他脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Docekr-compose安装
之前我写过安装教程,可以参考下面的文章来进行相关的操作

安装数据库环境

特别注意,在线上环境需要设置复杂密码以及设置只能内网访问等,相关的操作可以自行查阅
mysql环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# docker 中下载 mysql
docker pull mysql

#启动
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Lzslov123! -d mysql

#进入容器
docker exec -it mysql bash

#登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lzslov123!';

#添加远程登录用户
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

redis环境

1
docker run -itd --name redis-test -p 6379:6379 redis

nginx环境

这个项目nginx并没有安装到docker里,如果需要安装到docker中可以自行查阅相关的资料。这里我用的是debian系统,如果是用的centos系统需要将命令进行替换

1
2
3
4
5
sudo apt update

sudo apt install nginx

sudo systemctl status nginx

配置文件
docker的默认配置文件在/etc/nginx/nginx.conf文件中,本项目的配置可以参考如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 768;
# multi_accept on;
}

http {

sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

# 其他代码(原来就存在的代码)
server {
listen 8080; # 端口 需要服务器开放端口
# 域名绑定需要将域名解析A记录到改服务器ip
server_name localhost; # 你的域名 如果需要ip访问请注释该行并改变端口

location / { # 监听的路径
root /home/www/; # /www 就是刚刚创建的目录
index index.html index.htm; # 默认入口
}

location /prod-api/ {
# 这里替换成你的后台地址
proxy_pass http://example.com/;

# 把host头传过去,后端服务程序将收到your.domain.name, 否则收到的是localhost:18080
proxy_set_header Host $http_host;

# 把cookie中的path部分从/api替换成/service
proxy_cookie_path /prod-api /;

# 把cookie的path部分从localhost:18080替换成your.domain.name
proxy_cookie_domain localhost:18080 localhost;
}
}


include /etc/nginx/mime.types;
default_type application/octet-stream;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

gzip on;

javascript;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

nginx常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 启动Nginx服务:
sudo systemctl start nginx

// 停止Nginx服务:
sudo systemctl stop nginx

// 重新启动Nginx服务:
sudo systemctl restart nginx

// 重新加载Nginx服务:
sudo systemctl reload nginx

//启用Nginx服务以在启动时启动:
sudo systemctl enable nginx

//禁用Nginx服务,使其无法在启动时启动:
# sudo systemctl disable nginx

后端打包

后端打包需要在maven中设置打包方式并且需要配置打包插件,打包之前需要设置相关的数据库、端口设置。打包之后将jar文件复制到服务器中,在jar文件的同级目录需要创建Dockerfile文件。

打包maven配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<packaging>jar</packaging>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

Dockerfile文件

1
2
3
4
5
6
7
FROM ascdc/jdk8:latest
VOLUME /tmp
ADD app.jar /app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-Xmx512M -Xms256M -Xss256k -Duser.timezone=Asia/Shanghai"
ENV APP_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]

运行后端

1
2
3
4
5
// 这里注意不要少了“.”
docker build -t hello .

// 第一个端口是对外端口,第二个端口是对内端口,hello是镜像的名字
docker run -p 8800:8800 -t hello

时区问题

如果项目的yml文件没有配置时区,在提交记录的时候,可能会出现时区的问题。这里有两种解决方法,可以在yml中指定mysql时区,可以在mysql中进行修改

mysql修改

1
2
3
4
5
6
7
8
// 修改mysql全局时区为北京时间,即我们所在的东8区
set global time_zone = '+8:00';

// 修改当前会话时区
set time_zone = '+8:00';

// 立即生效
flush privileges;

yml修改

1
2
3
4
5
6
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db-demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
username:
password:

前端修改

前端跨域相关的配置在vue.config.js文件中,需要指定后端的路径,是否跨域等配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
module.exports = {
devServer: {
port: port,
open: true,
overlay: {
warnings: false,
errors: true
},
// before: require('./mock/mock-server.js')
proxy: {
'/dev-api': { // 匹配所有以 '/dev-api'开头的请求路径
target: 'http://localhost:8800/',
changeOrigin: true, // 支持跨域
pathRewrite: { // 重写路径: 去掉路径中开头的'/dev-api'
'^/dev-api': ''
}
},
'/prod-api': {
// 这里写你的后端地址
target: 'http://example.com',
changeOrigin: true, // 支持跨域
pathRewrite: { // 重写路径: 去掉路径中开头的'/dev-api'
'^/prod-api': ''
}
}
}
}
}

vecel修改

首先需要本地安装vercel,执行“vercel -v”有结果就说明安装成功,并且登录自己的账号,创建一个后缀为json的配置文件。文件中填写如下内容。最后进行推送即可完成相关设置

1
2
3
4
5
6
{   
"version": 2,
"routes": [
{"src": "/(.*)","dest": "http://example.com/$1"}
]
}

安装vercel

1
npm i -g vercel

登录

1
vercel login

推送

1
vercel -A <name>.json --prod

RBAC全流程部署介绍
https://www.eldpepar.com/deploy/16372/
作者
EldPepar
发布于
2023年3月10日
许可协议