关于docker:记录-Superset-的部署

10次阅读

共计 3632 个字符,预计需要花费 10 分钟才能阅读完成。

应用 Docker 装置 Superset

  1. 第一步须要装置 Docker Engine 和 Docker Compose,在 Mac 上,能够应用 Docker Desktop,其中包含了 Docker Engine 和 Docker Compose。装置好 Docker 后,须要进入 Docker 设置将默认的内存设置为 6 GB
  2. 克隆 Superset 的仓库到本地:
$ git clone https://github.com/apache/superset.git
  1. 将仓库拷贝到本地后,执行上面两条语句:
docker-compose -f docker-compose-non-dev.yml pull
docker-compose -f docker-compose-non-dev.yml up

对于 docker compose 的 CLI 命令参数与相干的解释,参考 Overview of docker-compose CLI.

如果须要指定版本的 superset,须要在这一步指定,办法是在后面加上 tag 参数:

git checkout 1.4.0
TAG=1.4.0 docker-compose -f docker-compose-non-dev.yml pull
TAG=1.4.0 docker-compose -f docker-compose-non-dev.yml up

在启动日志中,可能会看到检测到默认的 secret string,提醒咱们应用本人生成的字符,还贴心的给了咱们生成示例。

openssl rand -base64 42

其次,superset_worker 提醒咱们在应用超级用户启动 worker, 并提醒:

You're running the worker with superuser privileges: 
this is absolutely not recommended!"

Please specify a different user using the --uid option.
User information: uid=0 euid=0 gid=0 egid=0

咱们之后再来看这个问题。

同时在 superset_init 中,咱们还看到它的初始化配置文件地址:

/app/docker/pythonpath_dev/superset_config.py

此时,咱们其实曾经能够关上 http://0.0.0.0:8088 拜访 superset 的服务了, 默认的用户名和明码都是 admin

Windows 应用 WSL 装置

# 装置依赖
sudo apt-get install build-essential libssl-dev libffi-dev python-dev python-pip libsasl2-dev libldap2-dev

# 配置 python 和 pip 后,装置虚拟环境
pip install virtualenv
python3 -m venv venv
. venv/bin/activate

# 装置 superset
pip install apache-superset
# 初始化 db
superset db upgrade

# 设置管理员账号
export FLASK_APP=superset
superset fab create-admin

# 加载例子,可选
superset load_examples

# 初始化
superset init

# 启动
superset run -p 8088 --with-threads --reload --debugger

# 应用 wsgi 服务
# 装置相干服务
pip install gunicorn
pip install gevent

# 启动
gunicorn  -w 10 -k gevent --timeout 120 -b 0.0.0.0:7668 --limit-request-line 0 --limit-request-field_size 0 "superset.app:create_app()"

# 连贯 Oracle,可参考后续章节的内容 

配置 Superset

配置 superset 须要应用一个配置文件,即下面咱们日志中看到过的那个文件,它须要被增加到你的 PYTHONPATH 中。

看一下这个文件中的内容:

# in superset_config.py

# 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 = ''

你能够在这里找到所有可选的配置增加到配置文件中。

连贯数据库

因为我须要测试的数据库是 Oracle,而 superset 装置后外部并不会带有数据库驱动,咱们须要手动装置,办法是在仓库外部的 docker 目录上面,新建 requirements-local.txt 文件,并填入包的名字,如对于 oracle 是:

cx_Oracle

而后关掉 superset 服务,从新生成镜像再启动:

docker-compose build --force-rm
docker-compose up

连贯 oracle,只装置 cx_Oracle 是不够的,可能还须要有 instantclient 客户端。

在 web 界面增加数据库可能会看到这个谬误:

Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
(Background on this error at: http://sqlalche.me/e/13/4xp6)

起因是没有配置 Oracle 的 instant client,须要在环境中装置才能够连贯 Oracle。

# 胜利启动后,还须要装置 cx_Oracle 和 instant client 才能够连贯 oracle
# 首先须要下载 instant client, 这里不再赘述,去 Oracle 官网下载对应版本即可,我下载的版本是 instantclient-basic-linux.x64-12.2.0.1.0.zip

apt-get update && apt-get install -y libaio1       # 装依赖
Unzip instantclient-basic-linux.x64-12.2.0.1.0.zip # 解压

# 删除不须要的文件
cd /opt/oracle/instantclient* \
rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci \
echo /instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf \

# 配置 tnsnames
&& ldconfig \
&& mkdir -p instantclient_12_2/network/admin \
&& cp tnsnames.ora instantclient_12_2/network/admin/ \
&& cp /sqlnet.ora instantclient_12_2/network/admin/

另外,如果应用 tnsnames, tnsnames.ora 文件中的数据库地址配置可能在 wsl 中无奈连贯,这里折腾了一会,在宿主机上 ping 该地址失去了一个 domain.org 模式的地址,从新填入解决了。

正文完
 0