Как подключить Superset к Redis с паролем? - PullRequest
2 голосов
/ 05 мая 2020

Я пытаюсь установить Apache Superset в производственном режиме, и все прошло хорошо до подключения Redis. Я установил superset и redis и сделал конфигурацию подключения в superset_config.py. Когда я запускаю сервер Redis без пароля, Superset подключается и работает нормально, но когда я запускаю Redis с паролем, все, что я пытаюсь сделать на веб-сервере Superset (например, изменить что-то в базах данных), выдает ошибку: «Требуется аутентификация»

Как я установил (я использую Centos 6 и Python 3.6):

sudo yum -y install redis
sudo sed -i 's/ENABLE_TIME_ROTATE = False/ENABLE_TIME_ROTATE = True/g' redis.conf
sudo sed -i '/# maxmemory <bytes>/a maxmemory 10gb\nmaxmemory-policy allkeys-lru' redis.conf
sudo sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' redis.conf
sudo sed -i '/# requirepass foobared/a requirepass redis_pass' redis.conf

sudo /path/to/my/pip3.6 install --upgrade setuptools pip
sudo /path/to/my/pip3.6 install apache-superset
sudo /path/to/my/pip3.6 install wheel
sudo /usr/local/bin/pip3.6 install impyla
sudo /usr/local/bin/pip3.6 install psycopg2-binary    
sudo /path/to/my/pip3.6 install gevent
sudo /path/to/my/pip3.6 install redis
sudo /path/to/my/pip3.6 install werkzeug==0.16.0
sudo /path/to/my/pip3.6 install cachelib

sudo sed -i 's/null/redis/g' /usr/local/lib/python3.6/site-packages/superset/config.py
superset db upgrade
export FLASK_APP=superset && flask fab create-admin  --username admin --firstname admin --lastname admin --email admin@admin.com --password admin
superset init

My superset_config.py:

import os

from werkzeug.middleware.proxy_fix import ProxyFix from cachelib.file import FileSystemCache from werkzeug.contrib.cache import RedisCache

MAPBOX_API_KEY = os.getenv('MAPBOX_API_KEY', '') 
REDIS_SERVER_IP ='redis_ip' 
REDIS_PASSWORD = 'redis_pass' 
POSTGRES_SERVER_IP = 'psql_ip' 
POSTGRES_USER = 'user' 
POSTGRES_PASSWORD = 'psql_pass'

SUPERSET_CACHE_REDIS_URL = "".join(['redis://:', REDIS_PASSWORD, '@', REDIS_SERVER_IP, ':6379/1']) SUPERSET_BROKER_URL = "".join(['redis://:', REDIS_PASSWORD, '@', REDIS_SERVER_IP, ':6379/0']) SUPERSET_CELERY_RESULT_BACKEND = "".join(['redis://:', REDIS_PASSWORD, '@', REDIS_SERVER_IP, ':6379/0'])

CACHE_CONFIG = {
    'CACHE_TYPE': 'redis',
    'CACHE_DEFAULT_TIMEOUT': 300,
    'CACHE_KEY_PREFIX': 'superset_',
    'CACHE_REDIS_HOST': 'redis',
    'CACHE_REDIS_PORT': 6379,
    'CACHE_REDIS_DB': 1,
    'CACHE_REDIS_URL': SUPERSET_CACHE_REDIS_URL }

SQLALCHEMY_DATABASE_URI = SUPERSET_SQLALCHEMY_DATABASE_URI SQLALCHEMY_TRACK_MODIFICATIONS = True
SECRET_KEY = 'secret_key'

class CeleryConfig(object):
    BROKER_URL = SUPERSET_BROKER_URL
    CELERY_IMPORTS = ('superset.sql_lab', )
    CELERY_RESULT_BACKEND = SUPERSET_CELERY_RESULT_BACKEND
    CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_CONFIG = CeleryConfig RESULTS_BACKEND = RedisCache(
    host=REDIS_SERVER_IP,
    port=6379,
    key_prefix='superset_results',
    password=REDIS_PASSWORD
)

Используемые версии: Superset 0.36.0 (Используется Gunicorn для настройки веб-сервера), Redis 3.2.12, Flask 1.1.2

Кто-нибудь может помочь мне исправить эту ошибку? Я думаю, это происходит из-за того, что суперсет пытается использовать redis без пароля, но в моей конфигурации суперсета я поставил пароль redis.

...