为了配置应用,你需要创建一个文件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-wtf
、flask-cache
、flask-migrate
、flask-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"
然后,创建一个继承SupersetSecurityManager
的CustomSsoSecurityManager
,重写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.py
的superset_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
表单数据字段)。