Appearance
部署
接下来我们想把这个简单的 rbac 应用部署一下,可以选择提供免费应用的 PAAS 平台 heroku 和 vercel
在 heroku 创建应用和数据库
首先去 heroku(https://dashboard.heroku.com/) 进行注册,然后在管理面板可以创建应用,创建之后进入刚才创建的应用
- 点击 Resources 打开资源面板
- 点击 Find more add-ons 打开 选择页
- 找到 JawsDB MySQL 添加到我们的应用
- 打开 Settings ,找到 Config Vars ,点击 Reveal Config Vars 找到 MysqlUrl
这时候我们需要给这个数据库初始化一下,使用 Navicat 这种数据库工具尝试链接下上面提供的数据库 url
// 举例
mysql://67f6rq9wojcuv8x:1zs6r1lle45yp4h8j@acw2033ndw0at1t7.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/kbisf557lqvl80vy
mysql://username:password@host:part/database
格式提取出来之后就是:
host:acw2033ndw0at1t7.cbetxkdyhwsb.us-east-1.rds.amazonaws.com port:3306 username:67f6rq9wojcuv8x password:1zs6r1lle45yp4h8j
连接后可以使用下面的 sql 进行初始化,创建了一个具有 管理员角色的用户,一会要用这个用户进行登录~
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80029
Source Host : localhost:3306
Source Schema : rbac
Target Server Type : MySQL
Target Server Version : 80029
File Encoding : 65001
Date: 01/07/2022 13:52:28
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for permission
-- ----------------------------
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_time` datetime(6) DEFAULT NULL,
`description` text COLLATE utf8mb4_general_ci,
`key_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`updated_time` datetime(6) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_msdul8rtcx152o541yv5gjik3` (`key_name`),
UNIQUE KEY `UK_2ojme20jpga3r4r79tdso17gi` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of permission
-- ----------------------------
BEGIN;
INSERT INTO `permission` (`id`, `created_time`, `description`, `key_name`, `name`, `updated_time`) VALUES (1, '2022-06-16 13:56:21.500000', '管理的权限,属于这个系统的管理员才可以具有的权限', 'admin', '管理权限', '2022-06-16 13:56:21.500000');
COMMIT;
-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_time` datetime(6) DEFAULT NULL,
`description` text COLLATE utf8mb4_general_ci,
`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`updated_time` datetime(6) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_8sewwnpamngi6b1dwaa88askk` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of role
-- ----------------------------
BEGIN;
INSERT INTO `role` (`id`, `created_time`, `description`, `name`, `updated_time`) VALUES (1, '2022-06-16 13:56:21.537000', '管理员角色,可以管理所有权限', '超级管理', '2022-06-16 13:56:21.537000');
COMMIT;
-- ----------------------------
-- Table structure for role_permissions
-- ----------------------------
DROP TABLE IF EXISTS `role_permissions`;
CREATE TABLE `role_permissions` (
`roles_id` bigint NOT NULL,
`permissions_id` bigint NOT NULL,
PRIMARY KEY (`roles_id`,`permissions_id`),
KEY `FKclluu29apreb6osx6ogt4qe16` (`permissions_id`),
CONSTRAINT `FKclluu29apreb6osx6ogt4qe16` FOREIGN KEY (`permissions_id`) REFERENCES `permission` (`id`),
CONSTRAINT `FKib3eov0359c5o9s0a913mtyvv` FOREIGN KEY (`roles_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of role_permissions
-- ----------------------------
BEGIN;
INSERT INTO `role_permissions` (`roles_id`, `permissions_id`) VALUES (1, 1);
COMMIT;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_time` datetime(6) DEFAULT NULL,
`description` text COLLATE utf8mb4_general_ci,
`nickname` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`password` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`updated_time` datetime(6) DEFAULT NULL,
`username` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_sb8bbouer5wak8vyiiy4pf2bx` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` (`id`, `created_time`, `description`, `nickname`, `password`, `updated_time`, `username`) VALUES (1, '2022-06-16 13:56:21.662000', '管理员帐户,可以管理其他用户u、角色和权限', '管理员', '$2a$10$Cyr6MGBq52qwBBmwoFHDp.67lM53sv05kUHFE7pUfGdZBrnUk.K5u', '2022-06-16 13:56:21.662000', 'admin');
COMMIT;
-- ----------------------------
-- Table structure for user_roles
-- ----------------------------
DROP TABLE IF EXISTS `user_roles`;
CREATE TABLE `user_roles` (
`users_id` bigint NOT NULL,
`roles_id` bigint NOT NULL,
PRIMARY KEY (`users_id`,`roles_id`),
KEY `FKj9553ass9uctjrmh0gkqsmv0d` (`roles_id`),
CONSTRAINT `FK7ecyobaa59vxkxckg6t355l86` FOREIGN KEY (`users_id`) REFERENCES `user` (`id`),
CONSTRAINT `FKj9553ass9uctjrmh0gkqsmv0d` FOREIGN KEY (`roles_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of user_roles
-- ----------------------------
BEGIN;
INSERT INTO `user_roles` (`users_id`, `roles_id`) VALUES (1, 1);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
下一步需要准备我们项目中可以使用的 jdbc mysql url,在 Config Vars 添加下我们的参数: url:jdbc:mysql://23dw0at1t7.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/bbisf557lqvl80vy?reconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8 username:67f6rq9wojcuv8x password:1zs6r1lle45yp4h8j SPRING_PROFILES_ACTIVE:pro
在项目目录 src/main/resources
新建 application-pro.yml
文件,把数据库相关信息填上:
spring:
datasource:
url: ${url} # 这里的值存在heroku的环境变量中,可以通过环境变量获取
username: ${username}
password: ${password}
driver-class-name: com.mysql.cj.jdbc.Driver # 数据库驱动
上面写的参数就是我们设置到 Config Vars 的参数
部署应用
下面开始部署应用,首先在项目的根目录新建俩文件:system.properties
和 Procfile
,这俩文件是 heroku 需要的配置:
// system.properties 这里声明我的运行时环境
java.runtime.version=11
// Procfile
web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/rbac-0.0.1-SNAPSHOT.jar
然后安装下 Heroku Cli,按照说明安装和登录
下一步是把整个项目推送到 heroku 我们建的应用下,在应用的 Settings 里面可以找到 Heroku git URL,我们登录成功后就可以添加我们的 git 远程仓库了git remote add origin https://git.heroku.com/boot-rbac.git
,之后推送就行了
推送成功并且 build 成功后,尝试访问你的应用主页,在应用里面点击Open app
就行,这时候应该是会返回 503 错误,这时候打开应用的 Resources ,找到 Free Dynos ,点击右侧的编辑按钮,把应用打开后保存,如下图:
这时候再访问应用主页返回 {"code":201,"message":"未登录,请先登录","data":null}
就代表应用正常跑起来了
在 vercel 部署前端
根据需要整了个前端项目,可以自行查看,对用来管理用户和测试权限相关
在vercel注册和新建 project ,我直接使用我的 github 项目创建的,设置相关如图:
这里需要注意的就是,需要在前端项目新建个 vercel.json
:
{
"rewrites": [
{
"source": "/api/:match*",
"destination": "https://boot-rbac.herokuapp.com/api/:match*"
},
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}
在线访问
部署成功后就可以访问了https://rbac-front.vercel.app
,这属于前后端分离的方式部署的,自己有云服务的话,也可以利用 nginx 做反向代理
登录需要初始化的用户:
用户 | 帐户 | 密码 |
---|---|---|
管理员 | admin | password |
普通用户 | normal | password |