准备基础环境,后续通过Linux部署,且为了方便移植,这里先在虚拟环境中部署,后续制作成镜像使用。
1. 准备虚拟环境
# superset最低支持Python3.7
python3.7 -m venv superset
进入到虚拟环境中,下载源码:
git clone https://github.com/apache/superset.git
git checkout -b 1.4 origin/1.4
2. 准备环境依赖
系统环境:
yum install gcc libffi-devel python-devel python-pippython-wheel openssl-devel libsasl2-devel openldap-devel
编译环境:
pip install -r requirements/local.txt
3. 自定义源码
vi superset/config.py
1. 汉化:
BABEL_DEFAULT_LOCALE = "zh"
LANGUAGES = {
"zh": {"flag": "cn", "name": "Chinese"},
}
其他不需要的预言,可以直接删除,为了美观也可以把下面的一行代码注释掉:
#LANGUAGES = {}
修改161行,superset启动时,指定外部数据库:
SQLALCHEMY_DATABASE_URI = 'mysql://user:password@ip:port/database?charset=utf8'
修改其他:
2. 修改缓存:
THUMBNAIL_CACHE_CONFIG: CacheConfig = {
"CACHE_TYPE": "filesystem",
"CACHE_NO_NULL_WARNING": True,
}
CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "filesystem"}
DATA_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "filesystem"}
CACHE_DEFAULT_TIMEOUT = 14400
同时还需要修改以下内容:
lib/python3.7/site-packages/flask_caching/__init__.py
有些服务使用的flask_cache,用anaconda安装的superset自带flask_caching
//配置缓存时间
config.setdefault("CACHE_DEFAULT_TIMEOUT", 3600*8)
//配置缓存的文件地址
config.setdefault("CACHE_DIR", '/home/superset/cache/')
//配置缓存的数据类型
config.setdefault("CACHE_TYPE", "filesystem")
3. 日志级别:
LOG_LEVEL = "INFO"
4. 修改
APP_NAME = "我的Superset"
其他需求可以根据注释自行修改内容,保存退出。
4. 编译
cd superset
删除其他不需要的语言文件,当前我只保留了translations下的zh文件夹
执行:pybabel compile -d translations
完成后在translations/zh/LC_MESSAGES/下多了一个messages.mo文件
cd ..
# 编译刚修改后的文件
python setup.py build
# 完成后会更新路径lib/python3.7/site-packages/apache_superset-1.4.0-py3.7.egg/superset下的所有文件
python setup.py install
此时后端代码编译完成,接下来编译前端代码:
此处需要安装nodejs:
解压到/usr/local下,然后建立软连接:
ln -s /usr/local/nodejs/bin/node /usr/local/bin
ln -s /usr/local/nodejs/bin/npm /usr/local/bin
ln -s /usr/local/nodejs/bin/yarn /usr/local/bin
输入npm version 有版本输出,即可
cd superset-frontend
npm install -g yarn
yarn
npm install
# 上述命令没有问题后,执行:
npm run build
# 下面的命令执行完成后,Ctrl+C 即可
npm run dev
重点,重点
前端都编译完成后,在superset/static会有一个assets文件夹生成,需要将该文件夹下的所有文件夹及文件复制到
${PYTHON_HOME}/lib/site-packages/apache_superset-1.4.0-py3.7.egg/superset/static
否则就会报静态资源找不到错误。
5. 数据库准备
# 初始化数据库
superset db upgrade
# 创建管理员用户
export FLASK_APP=superset
flask fab create-admin
# 会以当前登录用户,登录MySQL。需要对root用户授权:
GRANT ALL PRIVILEGES ON *.* to user@host IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
# 载入案例数据
superset load_examples
如果一直超时,可以尝试下载数据到本地,从本地源中导入数据:
编辑46行 /home/jxrtest/superset12/lib/python3.8/site-packages/apache_superset-1.2.0-py3.8.egg/superset/examples/birth_names.py 将这里的admin替换为create-admin时填写的用户。
编辑29行 /superset/lib/python3.8/site-packages/apache_superset-1.4.0-py3.8.egg/superset/examples/helpers.py 修改示例数据下载地址
# 初始化角色和权限
superset init
6. 启动服务
1)在线调试可以通过以下命令来启动:
superset run --with-threads --reload --debugger -p 18080 -h 0.0.0.0
2)生产环境,可以通过supervisor来监控
[program:superset]
command=/usr/local/python3.7/bin/gunicorn -w 3 -t 120 -b 0.0.0.0:18080 'superset.app:create_app()'
priority=1
user=root
autostart=true
startsecs=10
autorestart=true
startretries=10
exitcodes=0
stopasgroup=true
killasgroup=true
stopsignal=KILL
stopwaitsecs=10
redirect_stderr=true
stdout_logfile=/etc/supervisor/logs/superset.log
loglevel=info
7. 集成LADP
部署LADP统一认证服务
sudo yum install openldap-servers openldap-clients
(superset14-python37) [superset app]$ sudo systemctl start slapd.service
(superset14-python37) [superset app]$ sudo systemctl status slapd.service
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-12-27 10:48:32 CST; 5s ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Process: 21847 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
Process: 21832 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
Main PID: 21853 (slapd)
Memory: 3.7M
CGroup: /system.slice/slapd.service
└─21853 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
Dec 27 10:48:32 BigAI-31 systemd[1]: Starting OpenLDAP Server Daemon...
Dec 27 10:48:32 BigAI-31 runuser[21835]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Dec 27 10:48:32 BigAI-31 runuser[21835]: pam_unix(runuser:session): session closed for user ldap
Dec 27 10:48:32 BigAI-31 slapcat[21839]: DIGEST-MD5 common mech free
Dec 27 10:48:32 BigAI-31 slapd[21847]: @(#) $OpenLDAP: slapd 2.4.44 (Jun 6 2017 18:04:02) $
mockbuild@x86-019.build.eng.bos.redhat.com:/builddir/build/BUILD/openldap...s/slapd
Dec 27 10:48:32 BigAI-31 slapd[21847]: daemon: IPv6 socket() failed errno=97 (Address family not supported by protocol)
Dec 27 10:48:32 BigAI-31 slapd[21853]: hdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).
Expect poor performance for suffix "dc=my-domain,dc=com".
Dec 27 10:48:32 BigAI-31 slapd[21853]: slapd starting
Dec 27 10:48:32 BigAI-31 systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
(superset14-python37) [superset app]$ sudo netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 21853/slapd
ldap默认端口为389,如果加密(CA +LDAP)了用端口636,这里默认端口389已经开启了。
对于ldap服务命令需要注意的:
一般以slapxxxx形式出现的命令为服务端命令,而以ldapxxxx形式出现的命令为客户端命令,比如下两个:
slappasswd 服务端命令
ldappasswd 客户端命令
LDAP服务安装好之后,我们接下来给ldap服务设置密码,在OpenLDAP server上执行如下操作:
[root@ldapserver01 ~]# slappasswd New password: jxrt Re-enter new password: {SSHA}bKGvsvA8GohdJWXSFydtwI6irI57bIpr
ldap服务的全局配置文件存放路径为"/etc/openldap/slapd.d/",具体如下所示:
[root@ldapserver01 ~]# cd /etc/openldap/slapd.d/ [root@ldapserver01 slapd.d]# ls cn=config cn=config.ldif [root@ldapserver01 slapd.d]# cd cn\=config [root@ldapserver01 cn=config]# ls cn=schema cn=schema.ldif olcDatabase={0}config.ldif olcDatabase={-1}frontend.ldif olcDatabase={1}monitor.ldif olcDatabase={2}hdb.ldif [root@ldapserver01 cn=config]# pwd /etc/openldap/slapd.d/cn=config [root@ldapserver01 cn=config]#
添加密码命令和内容,添加密码其实是对文件olcDatabase={0}config.ldif进行修改
cat << EOF |ldapadd -Y EXTERNAL -H ldapi:/// dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}bKGvsvA8GohdJWXSFydtwI6irI57bIpr EOF
未完,待续....【参考链接:统一用户登录管理认证LDAP 服务端部署_weixin_33704591的博客-CSDN博客】
8. 其他
支持Oracle数据库连接:当前编译的是1.4分支的代码,所以只需要安装一下cx_oracle 这个库就可以了。
页面支持在线编写CSS样式,并直接使用。
当前对于Excel导入不支持