部署方式有两种, 可以采用Docker进行部署, 比较快速. 也可以所有步骤都手动部署.
这里默认是使用密码登录, 如果要使用LDAP方式登录, 请参考这里.
cd path/to/wolf
bash bin/build-all.sh 0.1.10
构建成功后, 可以使用如下命令查看镜像:
docker images |grep wolf
输出大概如下:
igeeky/wolf-agent 0.1.10 c8013cdbc95d 1 hours ago 101MB
igeeky/wolf-agent latest c8013cdbc95d 7 hours ago 101MB
igeeky/wolf-server 0.1.10 25ee3cb46296 7 hours ago 143MB
igeeky/wolf-server latest 25ee3cb46296 7 hours ago 143MB
PostgreSQL
与MySQL
数据库二选一, 推荐使用PostgreSQL
.
请自行google安装方法.
以postgres账号登陆postgres数据库, 执行以下脚本, 创建wolfroot
用户及wolf
数据库(请根据需要修改用户名及密码):
CREATE USER wolfroot WITH PASSWORD '123456';
CREATE DATABASE wolf with owner=wolfroot ENCODING='UTF8';
GRANT ALL PRIVILEGES ON DATABASE wolf to wolfroot;
使用脚本创建数据库表
\i path/to/wolf/server/script/db-psql.sql;
查看创建的表:
\d
输出类似下面的结果, 表示数据库表创建成功:
List of relations
Schema | Name | Type | Owner
--------+-------------------+----------+----------
public | access_log | table | wolfroot
public | access_log_id_seq | sequence | wolfroot
public | application | table | wolfroot
public | category | table | wolfroot
public | category_id_seq | sequence | wolfroot
public | permission | table | wolfroot
public | resource | table | wolfroot
public | resource_id_seq | sequence | wolfroot
public | role | table | wolfroot
public | user | table | wolfroot
public | user_id_seq | sequence | wolfroot
public | user_role | table | wolfroot
(12 rows)
请自行google安装方法.
以mysql账号登陆mysql数据库, 执行以下脚本, 创建wolfroot
用户及wolf
数据库(请根据需要修改用户名及密码):
create database `wolf` CHARACTER SET utf8mb4;
grant DELETE,EXECUTE,INSERT,SELECT,UPDATE
on wolf.* to wolfroot@'127.0.0.1' IDENTIFIED BY '123456';
grant DELETE,EXECUTE,INSERT,SELECT,UPDATE
on wolf.* to wolfroot@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
use wolf;
使用脚本创建数据库表
source path/to/wolf/server/script/db-mysql.sql;
查看创建的表:
show tables;
输出类似下面的结果, 表示数据库表创建成功:
+----------------+
| Tables_in_wolf |
+----------------+
| access_log |
| application |
| category |
| oauth_code |
| oauth_token |
| permission |
| resource |
| role |
| user |
| user_role |
+----------------+
10 rows in set (0.01 sec)
服务器主要配置参数有以下几个:
123456
Agent
登录接口返回的token的有效期, 默认为30天. 单位为秒.Console
登录接口返回的token的有效期, 默认为30天. 单位为秒.Console
登录是否使用 Captcha 验证码。如果控制台部署在公网上,建议开启该功能以提高安全性。该环境变量的取值为 yes 或 no,默认为 no。postgres://wolfroot:123456@127.0.0.1:5432/wolf
redis://127.0.0.1:6379/0
no
. 当要部署多节点的wolf
服务时,可使用redis作为对象缓存,解决缓存不一致问题.yes
时使用radixtree进行RBAC访问路由匹配. 默认为no
. radixtree
是一种更复杂的路由匹配方式, 支持各种复杂的通配符匹配.请自行安装node及npm, 并设置合适的npm库镜像.
启动服务.
# 设置wolf的root及admin账号的初始密码.
export RBAC_ROOT_PASSWORD=123456
# 设置Token加密key, 为了系统安全, 强烈建议你设置该值.
export RBAC_TOKEN_KEY=THE-NEW-TOKEN-KEY
# 设置Secret加密key, 为了系统安全, 强烈建议你设置该值.
export WOLF_CRYPT_KEY=THE-NEW-CRYPT-KEY
# 请根据你创建用户及数据库的实际情况进行修改.
export RBAC_SQL_URL=postgres://wolfroot:123456@127.0.0.1:5432/wolf
# 请根据redis的实际配置进行修改.
export RBAC_REDIS_URL=redis://127.0.0.1:6379/0
cd path/to/wolf/server
# 安装依赖项(首次启动时执行)
npm install
# 启动服务程序.
npm run start
如果启动成功, 应该能看到类似输出:
listen at 0.0.0.0:12180 success!
后面是一些初始化系统账号的输出信息
cd path/to/wolf/console
# 安装依赖项(首次启动时执行)
npm install
# 启动控制台程序.
cnpm run dev
编译, 启动成功后, 应该能看到类似输出:
DONE Compiled successfully in 1000ms
App running at:
- Local: http://localhost:12188/
- Network: http://192.168.x.x:12188/
Console启动成功后, 可使用root账号进行访问了. 密码是123456
或你在启动服务器时通过RBAC_ROOT_PASSWORD
变量指定的.
注意: 如果你在使用 apisix
网关, 可以直接使用 apisix
的 wolf-rbac 插件. 该插件也相当于Agent
的角色.
请自行google安装方法.
在nginx.conf(或是它包含的子配置)中添加Agent代理配置(下面配置假定wolf的代码在/opt
目录下)
# 以下配置在http节点内.
lua_code_cache on;
client_max_body_size 5m;
client_body_buffer_size 256k;
lua_package_path "/opt/wolf/agent/lua/?.lua;;";
server {
# 应用对外地址,端口. 如果需要配置域名, 也需要在这儿配置好.
listen 12182;
server_name localhost;
# 如果是restful接口, 需要定制配置没有权限时, 返回的json格式. 这里需要跟前端协调好.
location = /wolf/rbac/no_permission {
content_by_lua_block {
ngx.status = 200;
ngx.header["Content-Type"] = "application/json; charset=utf-8";
local args, err = ngx.req.get_uri_args()
local reason = args.reason or "unknown reason"
ngx.say(string.format([[ {"ok": false, "reason": "%s"} ]], reason))
}
}
location /wolf/rbac {
proxy_set_header Host $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;
# rbac server地址. 如果服务器不在本机, 请修改IP地址为实际地址.
proxy_pass http://127.0.0.1:12180;
}
# Clear the content-length of response
header_filter_by_lua_file /opt/wolf/agent/lua/header_filter.lua;
# filter, add infobar to the page
body_filter_by_lua_file /opt/wolf/agent/lua/body_filter.lua;
# proxy for application
location / {
# $appID,需要设置一个在Wolf-Server中已经配置的应用ID.
set $appID appIDInWolfServer;
# access check
access_by_lua_file /opt/wolf/agent/lua/access_check.lua;
#proxy_set_header Host $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;
# 需要进行权限访问控制的APP的真实地址及端口
proxy_pass http://127.0.0.1:12184;
}
}
# 测试.
path/to/nginx/sbin/nginx -t
# 启动
path/to/nginx/sbin/nginx
启动成功后, 可以通过地址: http://127.0.0.1:12182
访问应用. 这时应该是需要输入用户名及密码才能正常访问.