konga的安装及运维

2022-10-20  本文已影响0人  天草二十六_简村人

一、安装

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

二、配置文件

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

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

2.2、密钥

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

三、启动

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

3.2、自定义命令

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

四、源码调试

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

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

4.1、 安全类的问题

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

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

'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,统一身份认证。(详见另外一篇文章)

上一篇下一篇

猜你喜欢

热点阅读