centos7.6.1810最小安装(无附加项)部署redash-8.0.0

centos7.6.1810最小安装(无附加项)部署redash-8.0.0

[2020.05.07]

一、基础环境

网络配置

虚拟网卡配置
	1)使用NAT模式
	2)选中VMnet8,关闭“使用本地DHCP服务将IP地址分配给虚拟机”
	3)修改子网IP210.38.240.0、子网掩码255.255.255.0
	4)NAT设置,网关IP210.38.240.2
	5)修改物理机网络适配器VMnet8,IPv4配置IP210.38.240.1、子网掩码255.255.255.0
系统网卡配置
	vi /etc/sysconfig/network-scripts/ifcfg-ens33
	Modify:
		BOOTPROTO=dhcp => static
		ONBOOT=no => yes
	Add:
		IPADDR=210.38.240.5
		NETMASK=255.255.255.0
		GATEWAY=210.38.240.2
		DNS1=8.8.8.8
		DNS2=112.29.29.29
	systemctl restart network
	ping 210.38.240.2
	ping www.baidu.com
【至此可进行ping测试物理机和虚拟机的网络是否通,不通在确认上面服务后进行下面防火墙配置】

安装lrzsz

# yum安装lrzsz工具
yum -y install lrzsz
# 查看是否完成安装
rpm -qa|grep lrzsz
# 上传
rz
rz [-y 覆盖原文件]
# 下载
sz {file}
# xshell:Alt+P打开属性框,打开【文件传输】,这里可以调整传输的一些属性。下载文件,可以执行下载目录,下载文件时就不会再询问。上传文件,可以直接拖动文件到xshell上传

安装net-tools

# 安装后才可用ifconfig命令
yum install net-tools

安装wget

yum install wget

安装gcc

yum -y install gcc
yum -y install gcc-c++
# 安装gcc和gcc-c++后续才可make(使用源码编译部署需要)

二、主要环境

安装nodejs

# 此处选用node v12.4.0,低版本编译会导致npm自身报错npm ERR! cb()never called!
# 下载、解压、移动/重命名解压出的nodejs文件夹
wget https://npm.taobao.org/mirrors/node/v12.4.0/node-v12.4.0-linux-x64.tar.xz
tar -xvf node-v12.4.0-linux-x64.tar.xz
mv node-v12.4.0 /usr/local/nodejs

# 创建NODE_HOME环境变量,修改PATH环境变量加入NODE_HOME/bin部分
export NODE_HOME=/usr/local/nodejs
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile

# 创建node、npm命令的软连接到/usr/bin目录
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm
#此项可不操作 ln -s /usr/local/nodejs/bin/npx /usr/bin/npx

# 设置npm使用淘宝镜像
npm config set registry https://registry.npm.taobao.org

# 安装webpack、wenpack-cli并创建软连接到/usr/bin
npm install webpack -g
npm install webpack-cli -g
ln -s /usr/local/nodejs/bin/webpack /usr/bin/webpack

# redash的前端环境编译需要nodejs

安装python环境

# 安装pip前先安装epel扩展源:(EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。)
yum -y install epel-release

# 安装python-pip
yum install python-pip

# 安装python虚拟环境
yum install python-virtualenv

安装postgres

# redash官方要求postgresql-9.5及以上,此处使用了9.5版本(测试使用过9.3版本导致user功能无法使用)

# 访问https://www.postgresql.org/download/linux/redhat/,选择9.5,centos7(根据实际情况选择),后安装提示命令复制到centos中执行,如下:
# 安装仓库RPM
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装客户端&服务端
yum install postgresql95
yum install postgresql95-server
# 初始化
/usr/pgsql-9.5/bin/postgresql95-setup initdb
systemctl enable postgresql-9.5
systemctl start postgresql-9.5

# 用刚安装的客户端测试刚安装的服务端(安装默认向系统增加用户postgres)
su - postgres
#进入客户端并自动连接本地服务端,从psql退出Ctrl+D
psql 

# 配置远程访问、初始密码
# 找到并修改postgresql.conf,不修改则导致远程连接被拒绝
find / -name postgresql.conf
vi postgresql.conf
# 修改内容:listen_address="localhost" --->>> listen_address="*"
# 修改后需要重启pg服务
systemctl restart postgresql-9.5

# 找到并修改pg_hba.conf,增加 
find / -name pg_hba.conf
vi pg_hba.conf
# 增加如下内容
host	all		all		0.0.0.0/0	trust
# 或:host	all		all		0.0.0.0/0	md5

# 修改默认密码(pg9.5版本无需操作此项,pg11需要)
su - postgres
psql
alter user postgres password 'xxxxxx' 

# 配置防火墙允许pg端口5432
firewall-cmd --zone=public --add-port=5432/tcp --permanent  
firewall-cmd --reload

# 创建目的数据库
su - postgres
createdb redash

安装redis

方式1:yum安装redis,找不到包则使用epel源

yum install -y redis
systemctl enable redis
systemctl start redis
# --------------------------------------------------
# 后续需要先执行【redis统一修改部分】
# --------------------------------------------------

方式2:编译安装redis

# 下载、解压、移动/重命名redis解压文件夹
cd /usr/local
wget http://download.redis.io/redis-stable.tar.gz
tar -xvf redis-stable.tar.gz 
mv redis-stable /redis
# 创建目录(必须先建目录,不建它不会自动建立目录导致后续make报错)
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
# 切换至redis根目录redis
make
# 进入redis\src
make install Prefix=/usr/local/redis  
# 复制redis.conf
cp redis/redis.conf /usr/local/redis/etc

# --------------------------------------------------
# 此处需要先执行【redis统一修改部分】
# --------------------------------------------------

# 手动启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 

# 添加到服务,使用systemctl启动
#	方法1: ×失败 
    vi /etc/rc.local
        添加内容/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf      
#   方法2: √成功 
    vi /etc/systemd/system/redis.service
        # 添加以下内容
        [Unit]
        Description=Redis
        After=network.target
        [Service]
        Type=forking
        ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
        ExecStop=/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
        [Install]
        WantedBy=multi-user.target
    # 创建软连接到/etc/systemd/system/multi-user.target.wants
    ln -s /lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service
    # 重新加载服务配置文件,后即可将redis用systemctl启动
    systemctl daemon-reload
    systemctl start redis
    systemctl enable redis 
    # systemctl enable redis时如提示File exists先: systemctl disable redis,原因是已启用,其实已可不用disable
    # systemctl服务配置参考:
    https://my.oschina.net/yun7/blog/2872176
    https://blog.csdn.net/changqing1234/article/details/82882765
    https://www.cnblogs.com/wangxu01/articles/11015822.html
    https://blog.csdn.net/chwshuang/article/details/68489968

redis统一修改部分(上面两种方式安装完后均需要修改下列文件)

# redis统一修改部分(上面两种方式安装完后均需要修改下列文件)
vi redis.conf
# 设置任意地址可访问连接redis
# 修改内容:bind localhost --->>> bind 0.0.0.0 
# 设置后台启动
# 修改:daemonize no --->>> daemonize yes
# 配置防火墙开放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

安装supervisor(部署到系统时需要)

yum install supervisor
# 下面2行不操作,但在报相关错误时可以找到这两项做如下操作,目录位置不一定一致
chmod 777 /var/run/supervisor/supervisor.sock
chmod 777 /var/log/supervisor/supervisor.log

# supervisor常用命令
	# 指定配置文件启动
    supervisord -c /etc/supervisord.conf
    # 重启supervisor
    supervisorctl reload
    # 启动名字为django的program 
    supervisorctl start django
    # 停止名字为django的program 
    supervisorctl stop django
    # 查看名字为django的program 状态
    supervisorctl status django
    # 查看所有program的状态
    supervisorctl status all
    # 停止所有program
    supervisorctl stop all

安装docker(部署到docker时需要)

# 国外镜像一般很难访问,建议配置阿里云镜像。yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装必要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker ce(此处默认选择最新的,也可查看yum list docker-ce --showduplicates | sort -r指定版本yum install docker-ce-17.12.0.ce)
yum install docker-ce
# 启动docker
systemctl start docker
# 设置自启动
systemctl enable docker

# 安装docker-compose
#    方式一: (官网方式)
    curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
#    创建软链接,在其他目录也能使用docker-compose命令
    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#    方式二:
    pip install docker-compose
#    查看默认安装的最新版本信息
    docker-compose version

docker常用命令
    docker version 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
    docker ps 查看当前正在运行的容器
    docker ps -a 查看所有容器的状态
    docker start/stop id/name 启动/停止某个容器
    docker attach id 进入某个容器(使用exit退出后容器也跟着停止运行)
    docker exec -ti id 启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)
    docker images 查看本地镜像
    docker rm id/name 删除某个容器
    docker rmi id/name 删除某个镜像
    docker run --name test -ti ubuntu /bin/bash  复制ubuntu容器并且重命名为test且运行,然后以伪终端交互式方式进入容器,运行bash
    docker build -t soar/centos:7.1 .  通过当前目录下的Dockerfile创建一个名为soar/centos:7.1的镜像
    docker run -d -p 2222:22 --name test soar/centos:7.1  以镜像soar/centos:7.1创建名为test的容器,并以后台模式运行,并做端口映射到宿主机2222端口,P参数重启容器宿主机端口会发生改变

tips:

# 查询需要的命令xxx【例:mysql_config】由哪个安装包提供,pip安装时或其他安装时的依赖缺少可通过这个查询
yum provides xxx
yum search xxx

# 文件内容搜索
grep -rn "MatchChar" filename

# 检查进程是否启动
ps -ef|grep xxx

# 防火墙配置
# 查看防火墙状态
systemctl status firewalld
# 开启xxx端口
firefirewall-cmd --zone=public --add-port=xxx/tcp --permanent
# 重启防火墙:
firewall-cmd --reload

三、部署redash

方式1、部署到系统中

前端编译+后端python环境、依赖python库安装

# 下载、解压、移动/重命名redash
wget https://github.com/getredash/redash/archive/v8.0.0.tar.gz 
tar -xvf v8.0.0.tar.gz 
mv redash-8.0.0 /opt/redash
cd /opt/redash

# 前端
npm install 
# install提示npm自身问题报错的,可更新npm或重新安装node和npm
npm run build
# build生成的文件在client/dist,8.0.0的版本是生成在该位置

# 后端
# 修改redash/settings/__init__.py的postgresql、redis的连接和默认发件配置,其他配置可参考官网说明。另附示例文件
# 创建虚拟环境
mkdir /usr/local/virtualenvs  #预先建立文件夹,后续的虚拟环境都创建在这里面,可自行建在其他路径
python -m virtualenv /usr/loacl/virtualenvs/redash 
# 或:virtualenv -p /usr/bin/python2.7 /usr/local/virtualenvs/redash

# 进入上面创建的虚拟环境,并安装redash依赖的python库
source ./usr/local/virtualenvs/redash
pip install -r requirements.txt #需要在虚拟环境中
    #    运行前可以先yum安装的依赖的库:
    #        psycopg2==2.8.3 --->>> yum install -y postgresql-devel
pip install -r requirements_all_ds.txt #需要在虚拟环境中
    #    运行前可以先yum安装的依赖的库:
    #        mysqlclient==1.3.14 --->>> yum install -y mariadb-devel
    #    可跳过部分,如安装时有部份库超时或其他原因无法下载:
    #        td-client==1.0.0
    #        atsd_client==3.0.5
    #        pymapd==0.19.0
    #        pyexasol==0.12.0
    #        python-rapidjson==0.8.0
    #    安装后续可能出现的问题:
    #        pyodbc sql.h文件不存在的报错 --->>> yum install unixODBC-devel
    #        sasl/saslwrapper.h:22:23: fatal error: sasl/sasl.h: No such file or directory
    #            -- 解决办法:
    #            yum search sasl
    #            -- 安装:
    #            yum -y install cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib
    #	 其他文件缺失的问题也可以参照处理,版本不对的可以暂时注释掉,报错的查看是否缺失yum安装的环境,超时的可以暂时注释掉后续再在虚拟环境中手动单独安装

# 切换到redash目录
cd /usr/local/redash
# 验证测试
python ./manage.py check_settings  #需要在虚拟环境中
# 初始化数据库,创建数据库
python ./manage.py database create_tables #需要在虚拟环境中

# debug/run启动服务,可不执行的部分 #需要在虚拟环境中
# python ./manage.py runserver --debugger –reload –host=0.0.0.0  --->>> python ./manage.py runserver --debugger –reload –h 0.0.0.0
# python ./manage.py runserver –h 0.0.0.0 -p 5000
# python ./manage.py run –h 0.0.0.0 -p 5000

supervirsor配置

# 增加environemnt,python虚拟环境
# echo_supervisord_conf生成supervisord.conf模板
echo_supervisord_conf > /etc/supervisord.conf
vi /etc/supervisor.conf
; >>> supervisor.conf 内容如下,此项配置好后可以通过9001端口查看进程状态和实时日志,帐密在下列配置中有写
; Sample supervisor config file.

[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file)
;chmod=0700                 ; sockef file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))

[supervisord]
logfile=/var/log/supervisor/supervisord.log  ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)
;umask=022                  ; (process file creation umask;default 022)
;user=chrism                 ; (default is current user, required if root)
;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
;directory=/tmp              ; (default is not to cd during start)
;nocleanup=true              ; (don't clean up tempfiles at start;default false)
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
;environment=KEY=value       ; (key value pairs to add to environment)
;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://0.0.0.0:9001 ; use an http:// url to specify an inet socket
username=user              ; should be same as http_username if set
password=123                ; should be same as http_password if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.

;[program:theprogramname]
;command=/bin/cat              ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=999                  ; the relative start priority (default 999)
;autostart=true                ; start at supervisord start (default: true)
;autorestart=true              ; retstart at unexpected quit (default: true)
;startsecs=10                  ; number of secs prog must stay running (def. 1)
;startretries=3                ; max # of serial start failures (default 3)
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A=1,B=2           ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample eventlistener section shows all possible
; eventlistener subsection values, create one or more 'real'
; eventlistener: sections to be able to handle event notifications
; sent by supervisor.

;[eventlistener:theeventlistenername]
;command=/bin/eventlistener    ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;events=EVENT                  ; event notif. types to subscribe to (req'd)
;buffer_size=10                ; event buffer queue size (default 10)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=-1                   ; the relative start priority (default -1)
;autostart=true                ; start at supervisord start (default: true)
;autorestart=unexpected        ; restart at unexpected quit (default: unexpected)
;startsecs=10                  ; number of secs prog must stay running (def. 1)
;startretries=3                ; max # of serial start failures (default 3)
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;user=chrism                   ; setuid to this UNIX account to run the program
;environment=PATH="/usr/local/virtualenvs/redash-8.0.0/bin:/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/X11R6/bin"
#environment=PYTHONPATH=/usr/local/virtualenvs/redash-8.0.0/bin:%(ENV_PYTHONPATH)s,PATH=/usr/local/virtualenvs/redash-8.0.0/bin:%(ENV_PATH)s
#redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups        ; # of stderr logfile backups (default 10)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A=1,B=2           ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample group section shows all possible group values,
; create one or more 'real' group: sections to create "heterogeneous"
; process groups.

;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = supervisord.d/*.ini
# 创建redash.ini文件
vi /etc/supervisor.d/redash.ini
# >>> redash.ini 内容如下
[group:redash]
programs=redash_server,redash_celery,redash_celery_scheduled

[program:redash_server]
environment=PYTHONPATH=/usr/local/virtualenvs/redash/bin,PATH=/usr/local/virtualenvs/redash/bin:%(ENV_PATH)s
command=/opt/redash/bin/run gunicorn -b 0.0.0.0:5000 --name redash -w 4 --max-requests 1000 redash.wsgi:app
directory=/opt/redash
process_name=redash_server
user=root
numprocs=1
autostart=true
autorestart=true
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /opt/redash/logs/redash_server_stdout.log

# There are two queue types here: one for ad-hoc queries, and one for the refresh of scheduled queries
# (note that "scheduled_queries" appears only in the queue list of "redash_celery_scheduled").
# The default concurrency level for each is 2 (-c2), you can increase based on your machine's resources.

[program:redash_celery]
environment=PYTHONPATH=/usr/local/virtualenvs/redash/bin,PATH=/usr/local/virtualenvs/redash/bin:%(ENV_PATH)s
command=/opt/redash/bin/run celery worker --app=redash.worker --beat -c2 -Qqueries,celery --maxtasksperchild=10 -Ofair
directory=/opt/redash
process_name=redash_celery
user=root
numprocs=1
autostart=true
autorestart=true
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /opt/redash/logs/redash_celery_stdout.log

[program:redash_celery_scheduled]
environment=PYTHONPATH=/usr/local/virtualenvs/redash/bin,PATH=/usr/local/virtualenvs/redash/bin:%(ENV_PATH)s
command=/opt/redash/bin/run celery worker --app=redash.worker -c2 -Qscheduled_queries --maxtasksperchild=10 -Ofair
directory=/opt/redash
process_name=redash_celery_scheduled
user=root
numprocs=1
autostart=true
autorestart=true
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /opt/redash/logs/redash_celery_scheduled_stdout.log
# 启动,如启动有问题可systemctl status supervisord\supervisorctl status all\tail -f /opt/redash/中的日志文件查看原因
systemctl start supervisord
# 开机自启
systemctl enable supervisord

方式2、部署到docker中

前端编译

# 下载、解压、移动/重命名redash
wget https://github.com/getredash/redash/archive/v8.0.0.tar.gz 
tar -xvf v8.0.0.tar.gz 
mv redash-8.0.0 /opt/redash
cd /opt/redash

# 前端
npm install 
# install提示npm自身问题报错的,可更新npm或重新安装node和npm
npm run build
# build生成的文件在client/dist,8.0.0的版本是生成在该位置

在redash根目录下创建env文件

>>> env 文件内容,其中的内容在部署时会作用替换redash/settings/__init__.py的对应参数的内容
REDASH_REDIS_URL=redis://210.38.240.6:6379/0
REDASH_DATABASE_URL=postgresql://postgres:postgres@210.38.240.6/redash
REDASH_MAIL_SERVER=smtp.163.com
REDASH_MAIL_PORT=465
REDASH_MAIL_USE_TLS=FALSE
REDASH_MAIL_USE_SSL=TRUE
REDASH_MAIL_USERNAME=gss@163.com
REDASH_MAIL_PASSWORD=mailpasswd
REDASH_MAIL_DEFAULT_SENDER=gss@163.com
REDASH_MAIL_MAX_EMAILS=None
REDASH_MAIL_ASCII_ATTACHMENTS=FALSE

修改redash/setup/docker-compose.yml文件

# >>> redash/setup/docker-compose.yml 文件内容,由于需要采用外部数据库,所以注释了postgres的依赖和镜像安装(redis、nginx可以不注释,此处因当时不太会用docker和nginx,先注释了)
version: '2'
x-redash-service: &redash-service
  image: redash/redash:7.0.0.b18042
  # depends_on:
  #   - postgres
  #   - redis
  env_file: /opt/redash/env
  restart: always
services:
  server:
    <<: *redash-service
    command: server
    ports:
      - "5000:5000"
    environment:
      REDASH_WEB_WORKERS: 4
  scheduler:
    <<: *redash-service
    command: scheduler
    environment:
      QUEUES: "celery"
      WORKERS_COUNT: 1
  scheduled_worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "scheduled_queries,schemas"
      WORKERS_COUNT: 1
  adhoc_worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "queries"
      WORKERS_COUNT: 2
  # redis:
  #   image: redis:5.0-alpine
  #   restart: always
  # postgres:
  #   image: postgres:9.5-alpine
  #   env_file: /opt/redash/env
  #   volumes:
  #     - /opt/redash/postgres-data:/var/lib/postgresql/data
  #   restart: always
  # nginx:
  #   image: redash/nginx:latest
  #   ports:
  #     - "80:80"
  #   depends_on:
  #     - server
  #   links:
  #     - server:redash
  #   restart: always
# 在目录 /opt/redash/setup 
# 初始化系统数据
docker-compose run --rm server create_db
# 安装镜像
docker-compose up
# 或docker-compose up > imageInstall.log 2>&1,将输出记录到日志。再通过另一终端tail -f /opt/redash/setup/imageInstall.log实时查看

# 测试邮件发送
docker exec -it redash_server_1 python manage.py send_test_mail

其他

# 使用/opt/redash/docker-compose.yml也可部署测试环境,且不需要配env文件,env的内容可以写在yml文件中
server:
    environment:
下添加以下内容:
		REDASH_MAIL_SERVER: "smtp.xxx.com"
		REDASH_MAIL_PORT: xx
		REDASH_MAIL_USE_TLS: "false"
		REDASH_MAIL_USE_SSL: "false"
		REDASH_MAIL_USERNAME: "xxx@xx.com"
		REDASH_MAIL_PASSWORD: "xx"
		REDASH_MAIL_DEFAULT_SENDER: "xxx@xx.com"	
		server:
    image: redash/redash:latest
    environment:
      ...
      #邮箱 
      REDASH_MAIL_SERVER: "smtp.exmail.qq.com"
      REDASH_MAIL_PORT: 465
      REDASH_MAIL_USE_TLS: "false"
      REDASH_MAIL_USE_SSL: "false"
      REDASH_MAIL_USERNAME: "gss@qq.com"
      REDASH_MAIL_PASSWORD: "gss"
      REDASH_MAIL_DEFAULT_SENDER: "gss@qq.com"
  
	  REDASH_MAIL_SERVER: "smtp.163.com"
      REDASH_MAIL_PORT: 465
      REDASH_MAIL_USE_TLS: "false"
      REDASH_MAIL_USE_SSL: "true"
      REDASH_MAIL_USERNAME: "gss@163.com"
      REDASH_MAIL_PASSWORD: "mailpasswd"
      REDASH_MAIL_DEFAULT_SENDER: "gss@163.com"
测试是否配置成功:
docker exec -it redash_server_1 python manage.py send_test_mail

附:问题

1、德龙centos7.7 npm install 报npm自身的cb()错误,且重装也无效

docker
1、docker安装了容器后再手动修改配置使用外部数据库
2、当前使用docker进行生产部署无法进入查询创建页面

调试
1、vscode远程调试服务器上的python程序

nginx
1、反向代理需要关闭selinux才起作用的问题

统一认证
1、LDAP统一认证
上一篇:TIA博途V17中如何创建和使用VoT应用程序_Web功能


下一篇:java-EasyMock / PowerMock导入问题