准备基础环境,后续通过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
输入npm version 有版本输出,即可
cd superset-frontend
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
# 创建管理员用户
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:xxxxx]
command=/home/xxx/venv/bin/gunicorn ?-w 10 -k gevent -b 0.0.0.0:8085 --access-logfile=success.log --error-logfile=error.log superset.app:create_app()
directory=/home/xxxx
autostart=true
autorestart=true
stderr_logfile=/home/xxx/log/stderr.log
stdout_logfile=/home/xxx/log/stdout.log
user=root
7. 其他
支持Oracle数据库连接:当前编译的是1.4分支的代码,所以只需要安装一下cx_oracle 这个库就可以了。
页面支持在线编写CSS样式,并直接使用。
|