2
0

deploy-cn.md 8.8 KB

English

部署方式有两种, 可以采用Docker进行部署, 比较快速. 也可以所有步骤都手动部署.

这里默认是使用密码登录, 如果要使用LDAP方式登录, 请参考这里.

A.Docker环境部署

1.必要环境

  • docker
  • docker-compose
  • node 12+
  • npm

2.构建docker镜像

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

3.使用docker-compose启动docker镜像

参考这里

B.手动部署

1.初始化数据库

PostgreSQLMySQL数据库二选一, 推荐使用PostgreSQL.

PostgreSQL
  • 安装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)
MySQL
  • 安装MySQL

请自行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)

2.服务器配置项

  • 服务器主要配置参数有以下几个:

    • RBAC_ROOT_PASSWORD root账号及admin账号的默认密码. 默认为123456
    • RBAC_TOKEN_KEY 加密用户token使用的KEY, 强烈建议设置该值.
    • WOLF_CRYPT_KEY 加密应用Secret及OAuth2登陆用户ID使用的Key.
    • RBAC_TOKEN_EXPIRE_TIME Agent 登录接口返回的token的有效期, 默认为30天. 单位为秒.
    • CONSOLE_TOKEN_EXPIRE_TIME Console 登录接口返回的token的有效期, 默认为30天. 单位为秒.
    • CONSOLE_LOGIN_WITH_CAPTCHA 控制 Console 登录是否使用 Captcha 验证码。如果控制台部署在公网上,建议开启该功能以提高安全性。该环境变量的取值为 yes 或 no,默认为 no。
    • RBAC_SQL_URL 连接数据库的数据库链接. 默认为: postgres://wolfroot:123456@127.0.0.1:5432/wolf
    • RBAC_REDIS_URL redis缓存的链接. 默认为: redis://127.0.0.1:6379/0
    • MEM_CACHE_BY_REDIS 使用redis作为对象缓存. 默认为no. 当要部署多节点的wolf服务时,可使用redis作为对象缓存,解决缓存不一致问题.
    • RBAC_USE_RADIX_TREE_ROUTING 设置为yes时使用radixtree进行RBAC访问路由匹配. 默认为no. radixtree是一种更复杂的路由匹配方式, 支持各种复杂的通配符匹配.

3.启动服务器

请自行安装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!

后面是一些初始化系统账号的输出信息

4.启动Console

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变量指定的.

Console的使用, 请参考这里

5.配置Agent

注意: 如果你在使用 apisix 网关, 可以直接使用 apisixwolf-rbac 插件. 该插件也相当于Agent的角色.

  • 安装OpenResty

请自行google安装方法.

  • 在Console创建项目, 及相应的用户,角色, 权限, 资源等.

参考这里

  • 在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;
    }
    }
    

6.启动Agent(Nginx)

# 测试.
path/to/nginx/sbin/nginx -t
# 启动
path/to/nginx/sbin/nginx 

启动成功后, 可以通过地址: http://127.0.0.1:12182 访问应用. 这时应该是需要输入用户名及密码才能正常访问.