美文网首页
konga的安装及运维

konga的安装及运维

作者: 天草二十六_简村人 | 来源:发表于2022-10-20 14:59 被阅读0次

    一、安装

    $ git clone https://github.com/pantsel/konga.git
    $ cd konga
    $ npm i
    

    二、配置文件

    将默认的配置文件重命名,".env_example" --> ".env"

    • .env_example
    PORT=1337
    NODE_ENV=production
    KONGA_HOOK_TIMEOUT=120000
    DB_ADAPTER=postgres
    DB_URI=postgresql://localhost:5432/konga
    KONGA_LOG_LEVEL=warn
    TOKEN_SECRET=some_secret_token
    

    2.1、环境

    指定环境为production,默认是Development

    • NODE_ENV=production

    2.2、密钥

    定期更新你的密钥,因为konga在给登录用户颁发token的时候,没有对token设置有效期,所以用户可以一直使用该token,对安全有一定的隐患。

    • TOKEN_SECRET=123456

    三、启动

    3.1、start.sh

    这是konga开源项目中自带的启动命令,但是它非是后台运行的,一旦你退出命令行窗口,Konga进程就挂了。

    #!/bin/bash
    
    #bash start.sh -c prepare -a postgres -u postgresql://postgres:postgres@localhost:5432/konga
    
    if [ $# -eq 0 ]
      then
        # If no args are set, start the app as usual
        node --harmony app.js 
      else
        while getopts "c:a:u:" option
        do
            case "${option}"
                in
                c) COMMAND=${OPTARG};;
                a) ADAPTER=${OPTARG};;
                u) URI=${OPTARG};;
            esac
        done
    
    #    echo $COMMAND
    #    echo $ADAPTER
    #    echo $URI
    #    echo $PORT
    
        if [ "$COMMAND" == "prepare" ]
            then
                node ./bin/konga.js $COMMAND --adapter $ADAPTER --uri $URI
            else
                echo "Invalid command: $COMMAND"
                exit
        fi
    fi
    
    • 总结:核心的命令是“node --harmony app.js”,下面将编写一个自定义的命令。

    3.2、自定义命令

    nohup node --harmony app.js > nohup.log &
    

    四、源码调试

    执行命令npm start即可,因为它默认的环境就是开发模式。

    围绕着问题去看它的源码,带着问题看源码,有重点。下面将遇到的疑问点梳理出来。

    4.1、 安全类的问题

    • 用户的账户和密码,是存储在哪?
    • 用户在首次登录成功之后,token多久失效,换句话说,下次输入用户名和密码进行授权是在什么时候?(离职用户对系统的安全性很关键)
    • 禁用用户或修改密码,会要求用户重新进行授权认证么?

    4.2、token的颁发与验证

    见类Token.js, 密钥依赖于环境变量env.TOKEN_SECRET,而且它不会保存在redis中,也没有其他关于过期时间之说。

    /**
     * Service method to generate a new token based on payload we want to put on it.
     *
     * @param   {String}    payload
     *
     * @returns {*}
     */
    module.exports.issue = function issue(payload) {
        sails.log.verbose(__filename + ':' + __line + ' [Service.Token.issue() called]');
    
        return jwt.sign(
            payload, // This is the payload we want to put inside the token
            process.env.TOKEN_SECRET || "oursecret" // Secret string which will be used to sign the token
        );
    };
    
    /**
     * Service method to verify that the token we received on a request hasn't be tampered with.
     *
     * @param   {String}    token   Token to validate
     * @param   {Function}  next    Callback function
     *
     * @returns {*}
     */
    module.exports.verify = function verify(token, next) {
        sails.log.verbose(__filename + ':' + __line + ' [Service.Token.verify() called]');
    
        return jwt.verify(
            token, // The token to be verified
            process.env.TOKEN_SECRET || "oursecret", // The secret we used to sign it.
            {}, // Options, none in this case
            next // The callback to be call when the verification is done.
        );
    };
    

    4.3、环境

    环境取之于process.env.NODE_ENV, 如果未指定,则默认为development。同理,数据存储默认为localDiskDb。

    module.exports = {
    
      /**
       * The default fallback URL to Kong's admin API.
       */
      // kong_admin_url : process.env.KONG_ADMIN_URL || 'http://127.0.0.1:8001',
    
    
      connections: {
    
      },
    
      models: {
        connection: process.env.DB_ADAPTER || 'localDiskDb',
      },
    
      session: {
        secret: '' // Add your own SECRET string here
      },
      port: process.env.PORT || 1338,
      environment: process.env.NODE_ENV || 'development',
      log: {
        level: 'info'
      }
    };
    

    4.4、创建数据库

    image.png
    • index.js

    如果没有定义数据库类型,则默认使用本地数据库。

    'use strict'
    
    
    module.exports = function (next) {
    
        if(process.env.NODE_ENV == 'production') return next();
    
        switch (process.env.DB_ADAPTER) {
            case("postgres"):
                return require("./dbs/pg").run(next);
            case("mysql"):
                return require("./dbs/mysql").run(next);
            case("mongo"):
                return next();
            case("sqlserver"):
                return next();
            default:
                console.log("No DB Adapter defined. Using localDB...");
                return next();
    
        }
    }
    

    五、总结

    1、不定期地更新.env中的TOKEN_SECRET值,强制将用户踢出,让用户必须进行认证。
    2、使用mysql或者postgres等数据库存储,不建议使用localDB。
    3、指定自己的环境NODE_ENV,如果是在生产环境,一定是production。
    4、建议你对接LDAP,统一身份认证。(详见另外一篇文章)

    相关文章

      网友评论

          本文标题:konga的安装及运维

          本文链接:https://www.haomeiwen.com/subject/esquzrtx.html