2.3配置Superset

为了配置应用,你需要创建一个文件superset_config.py并把它添加到你的PYTHONPATH。下面是一些你可以在这个文件中配置的参数:

# Superset specific config
ROW_LIMIT = 5000

SUPERSET_WEBSERVER_PORT = 8088

# Flask App Builder configuration
# Your App secret key
SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
SQLALCHEMY_DATABASE_URI = 'sqlite:path/to/superset.db'

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = []
# A CSRF token that expires in 1 year
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''

所有的定义在https://github.com/apache/superset/blob/master/superset/config.py中的参数和默认值都可以在你定义的superset_config.py中修改。通过阅读该文件,管理员可以理解包括默认值在内的参数那些可以在本地配置。

由于superset_config.py是一个Flask配置模块,它可以用来改变Flask自身的设置和Falsk扩展,比如flask-wtfflask-cacheflask-migrateflask-appbuilder。Flask App Builder是Superset使用的网页框架,它提供许多配置项。想要了解更多配置信息,您可以查询Flask App Builder文档。
务必改变以下两点:
SQLALCHEMY_DATABASE_URI: 默认存储在 ~/.superset/superset.db
SECRET_KEY: 改成长的随机字符串

如果你需要从CSRF中解除一个端点(endpoint)(例如:你正在运行自定义授权回传终点),你可以把端点添加到

WTF_CSRF_EXEMPT_LIST:
WTF_CSRF_EXEMPT_LIST = [‘’]

在WSGI HTTP服务器上运行

当你在Apache或者Nginx上运行Suerpset时,我们推荐使用Gunicorn的异步模式。它可以实现优秀的高并发,并且相当容易安装和配置。请参考您最喜爱的技术的文档按照你的环境设置Flask WSGI应用。
这是一个众所周知的在生产环境很好用异步设置:

  -w 10 \
  -k gevent \
  --timeout 120 \
  -b  0.0.0.0:6666 \
  --limit-request-line 0 \
  --limit-request-field_size 0 \
  --statsd-host localhost:8125 \
  "superset.app:create_app()"

参考Gunicorn文档查看更多信息。需要注意的是,开发环境的网页服务器(superset run或者flask run)并不是为生产环境设计的。
如果你用的不是Gunicorn,你可能想要通过设置config.py中的COMPRESS_REGISTER = False来禁用flask-compress
负载均衡器后面的配置
如果你在负载均衡器或者反向代理后面运行superset(例如:AWS上的Nginx或者ELB),你可能需要使用一个健康检测的终点来告诉负载均衡器你的superset实例是否在运行。这个功能包含在/health目录中,如果网页服务器启动了的话,它会返回一个200,其中包含一个“OK”。
如果负载均衡器插入了X-Forwarded-For/X-Forwarded-Proto首部,你应该在superset配置文件superset_config.py中设置ENABLE_PROXY_FIX = True来提取和使用这个首部。
如果反向代理用于提供SSL加密的话,需要一个X-Forward-Proto的明确定义。Apache网络服务器可以通过以下命令完成设置:

RequestHeader set X-Forwarded-Proto "https"

自定义OAuth2配置

除了FAB支持的提供商(Github、Twitter、LinkedIn、Google、Azure等),通过其他支持“代码”授权的OAuth2授权服务器实现连接Superset也很容易。
首先,在Superset的superset_config.py配置授权。

AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [
    {   'name':'egaSSO',
        'token_key':'access_token', # Name of the token in the response of access_token_url
        'icon':'fa-address-card',   # Icon for the provider
        'remote_app': {
            'client_id':'myClientId',  # Client Id (Identify Superset application)
            'client_secret':'MySecret', # Secret for this Client Id (Identify Superset application)
            'client_kwargs':{
                'scope': 'read'               # Scope for the Authorization
            },
            'access_token_method':'POST',    # HTTP Method to call access_token_url
            'access_token_params':{        # Additional parameters for calls to access_token_url
                'client_id':'myClientId'
            },
            'access_token_headers':{    # Additional headers for calls to access_token_url
                'Authorization': 'Basic Base64EncodedClientIdAndSecret'
            },
            'base_url':'https://myAuthorizationServer/oauth2AuthorizationServer/',
            'access_token_url':'https://myAuthorizationServer/oauth2AuthorizationServer/token',
            'authorize_url':'https://myAuthorizationServer/oauth2AuthorizationServer/authorize'
        }
    }
]

# Will allow user self registration, allowing to create Flask users from Authorized User
AUTH_USER_REGISTRATION = True

# The default user self registration role
AUTH_USER_REGISTRATION_ROLE = "Public"

然后,创建一个继承SupersetSecurityManagerCustomSsoSecurityManager,重写oauth_user_info:

from superset.security import SupersetSecurityManager

class CustomSsoSecurityManager(SupersetSecurityManager):

    def oauth_user_info(self, provider, response=None):
        logging.debug("Oauth2 provider: {0}.".format(provider))
        if provider == 'egaSSO':
            # As example, this line request a GET to base_url + '/' + userDetails with Bearer  Authentication,
    # and expects that authorization server checks the token, and response with user details
            me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data
            logging.debug("user_data: {0}".format(me))
            return { 'name' : me['name'], 'email' : me['email'], 'id' : me['user_name'], 'username' : me['user_name'], 'first_name':'', 'last_name':''}

这个文件必须和名叫 custom_sso_security_manager.pysuperset_config.py放在同一目录下。最后,把下面这两行加到superset_config.py中:

from custom_sso_security_manager import CustomSsoSecurityManager
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager

功能标志

为了支持不同的用户组,Superset有一些默认不启用的功能。例如,一些用户有更加强的安全约束,另一些用户可能没有。所以Superset允许用户通过配置去启用或禁用某些设置。如果你拥有某个功能,你可以在Superset中添加可选功能,但是只会有一部分用户受到影响。
你可以通过superset_config.py中的flag启用或禁用功能:

DEFAULT_FEATURE_FLAGS = {
    'CLIENT_CACHE': False,
    'ENABLE_EXPLORE_JSON_CSRF_PROTECTION': False,
    'PRESTO_EXPAND_DATA': False,
}

这里是一些标志(flags)和描述:
ENABLE_EXPLORE_JSON_CSRF_PROTECTION:出于一些安全的考虑,你可能需要对所有针对explore_json端点的查询请求强制执行CSRF保护。当ENABLE_EXPLORE_JSON_CSRF_PROTECTION设置为true时,你的用户不可以发送GET请求到explore_json。这个功能的默认值是False的时候,explore_json将会接收GET和POST请求。更多细节查看PR 7935
PRESTO_EXPAND_DATA:当这个特性启用之后,Presto的嵌套类型将会被扩展成新加的列或者数组。这是实验性质的,并不对所有的嵌套类型生效。

SIP 15

Superset改进提案15致力于保证对Druid和SQLAlchemy连接采用一致和透明的方式的处理时间间隔。
在SIP-15 之前SQLAlchemy使用范围广泛的终点,然而,如果没有定义格式或字段格式不符合ISO 8601日期,这些对字符串字段表现得像是独占的(由于按照字典排序)(更多细节查阅SIP)。
为了解决这个问题,而不必为每一个非ISO 8601的date-time列定义时间/日期格式,通过额外的参数一次就可以在每一次数据库级别上定义一个默认的列映射:

{
    "python_date_format_by_column_name": {
        "ds": "%Y-%m-%d"
    }
}

新部署

所有新的部署应该通过在superset_config.py设置这个值启用SIP-15:

SIP_15_ENABLED = True

存在的部署

鉴于图表创建者是否意识到时间范围不一致(并相应地调整了端点)尚不清楚,因此更改所有图表的行为过于激进。相反,SIP-15提供了一种软过渡,允许生产者(图表所有者)查看提议的更改的影响并相应地调整其图表。

在启用SIP-15,现有部署应向用户传达更改的影响,并定义宽限期结束日期(当然是独占的),在此日期之后所有图表都将符合[开始,结束]间隔。

from dateime import date

SIP_15_ENABLED = True
SIP_15_GRACE_PERIOD_END = date(<YYYY>, <MM>, <DD>)

为了提高透明度,在图表时间范围内明确指出了当前的端点行为(在SIP-15之后,对于所有连接器和数据库,这将是[start,end)。 可以通过extra参数在每个数据库级别覆盖默认值

{
    "time_range_endpoints": ["inclusive", "inclusive"]
}

请注意,在将来的发行版中,将通过代码更改和Alembic迁移来删除临时SIP-15逻辑(包括time_grain_endpoints表单数据字段)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值