Superset汉化、支持Oracle连接及自定义CSS样式

准备基础环境,后续通过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导入不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值