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統一認證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM