Redash部署指南(Windows docker部署)

Redash 本身不是一个单容器应用,它至少需要:

  • Redash Server
  • Redash Scheduler
  • Redash Worker
  • PostgreSQL:存 Redash 自己的配置、用户、查询等元数据
  • Redis:任务队列
  • Nginx:可选,但官方 Compose 带了

官方当前 Compose 也特意把 PostgreSQL 固定到了 17,避免 PostgreSQL 18 的数据目录变化带来兼容问题。


一、先确认 Docker Desktop

如果你之前已经在 Windows 上用过 Docker,先在 PowerShell 执行:

powershell 复制代码
docker --version
docker compose version

正常应该类似:

text 复制代码
Docker version 28.x.x
Docker Compose version v2.x.x

再测试:

powershell 复制代码
docker run --rm hello-world

如果 hello-world 可以正常运行,就可以直接部署,如果不行,先装docker desktop。


二、创建 Redash 目录

建议不要乱放,直接:

powershell 复制代码
mkdir D:\redash
cd D:\redash

目录结构会是:

text 复制代码
D:\redash
│
├── compose.yaml
├── .env
│
└── postgres-data

创建 PostgreSQL 数据目录:

powershell 复制代码
mkdir postgres-data

三、生成 Redash 密钥

Redash 官方要求你自己设置:

text 复制代码
REDASH_SECRET_KEY
REDASH_COOKIE_SECRET

(Redash)

Windows PowerShell 可以直接生成随机值:

powershell 复制代码
$secret = -join ((48..57)+(65..90)+(97..122) | Get-Random -Count 64 | ForEach-Object {[char]$_})
$cookie = -join ((48..57)+(65..90)+(97..122) | Get-Random -Count 64 | ForEach-Object {[char]$_})

$secret
$cookie

你会得到两串类似:

text 复制代码
Xsdf83jsdfk...
W9dkd83ksld...

先记下来。

powershell 复制代码
PS C:\Users\20201> docker --version
Docker version 29.6.1, build 8900f1d
PS C:\Users\20201> docker compose version
Docker Compose version v5.2.0
PS C:\Users\20201> d:
PS D:\> mkdir redash


    目录: D:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2026/8/27     11:42                redash


PS D:\> cd redash
PS D:\redash> mkdir postgres-data


    目录: D:\redash


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2026/8/27     11:42                postgres-data


PS D:\redash> $secret = -join ((48..57)+(65..90)+(97..122) | Get-Random -Count 64 | ForEach-Object {[char]$_})
PS D:\redash> $cookie = -join ((48..57)+(65..90)+(97..122) | Get-Random -Count 64 | ForEach-Object {[char]$_})
PS D:\redash> $secret
AT80gp9BLIdlqwerxckRUwVoEmszqKftj6eJSWnaGObiNPCQuH5D213yrh4FvM
PS D:\redash> $cookie
qYLGTRh5aXOlab32wJ8IfgV1dU9DbE06NQvxPetSKmCBrsMpyik4zjAFZnHW7u

四、创建 .env

在:

text 复制代码
D:\redash\.env

写入:

env 复制代码
PYTHONUNBUFFERED=0

REDASH_LOG_LEVEL=INFO

REDASH_REDIS_URL=redis://redis:6379/0

REDASH_SECRET_KEY=这里换成你刚生成的第一串密钥
REDASH_COOKIE_SECRET=这里换成你刚生成的第二串密钥

POSTGRES_PASSWORD=qwerty  #设置postgresql密码

REDASH_DATABASE_URL=postgresql://postgres:qwerty@postgres/postgres

REDASH_ENFORCE_CSRF=true
REDASH_GUNICORN_TIMEOUT=60

例如:

env 复制代码
REDASH_SECRET_KEY=APj3K8asjDD82ksla...
REDASH_COOKIE_SECRET=kdj92JSkd8DKs...

这里的 PostgreSQL 密码你也可以自己修改。


五、创建 compose.yaml

在:

text 复制代码
D:\redash\compose.yaml

写下面这份。

这是按照 Redash 当前官方 Compose 结构改成适合 Windows Docker Desktop 使用的版本。官方目前也是 Server + Scheduler + 三类 Worker + Redis + PostgreSQL + Nginx 这样的结构。

yaml 复制代码
name: redash

x-redash-service: &redash-service
  image: redash/redash:26.3.0
  env_file:
    - .env
  depends_on:
    - postgres
    - redis
  restart: unless-stopped

services:

  server:
    <<: *redash-service
    command: server
    ports:
      - "5000:5000"
    environment:
      REDASH_WEB_WORKERS: 4

  scheduler:
    <<: *redash-service
    command: scheduler
    depends_on:
      - server

  scheduled_worker:
    <<: *redash-service
    command: worker
    depends_on:
      - server
    environment:
      QUEUES: "scheduled_queries,schemas"
      WORKERS_COUNT: 1

  adhoc_worker:
    <<: *redash-service
    command: worker
    depends_on:
      - server
    environment:
      QUEUES: "queries"
      WORKERS_COUNT: 2

  worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "periodic,emails,default"
      WORKERS_COUNT: 1

  redis:
    image: redis:7-alpine
    restart: unless-stopped

  postgres:
    image: pgautoupgrade/pgautoupgrade:17-alpine
    env_file:
      - .env
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  nginx:
    image: redash/nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - server
    links:
      - server:redash
    restart: unless-stopped

这里做了一个和官方略有区别的处理:

yaml 复制代码
ports:
  - "8080:80"

也就是说我们最终访问:

text 复制代码
http://localhost:8080

而不是抢占 Windows 的 80 端口。

这能避免 IIS、Nginx、Apache 或其他开发工具占用 80。


六、检查 Compose

进入目录:

powershell 复制代码
cd D:\redash

执行:

powershell 复制代码
docker compose config

如果没有报错,说明 YAML 和 .env 基本没问题。


七、拉取镜像

执行:

powershell 复制代码
docker compose pull

这一步会下载:

text 复制代码
redash/redash:26.3.0
redis:7-alpine
pgautoupgrade/pgautoupgrade:17-alpine
redash/nginx:latest

Redash 镜像本身比较大,当前 26.3.0 的 amd64 镜像压缩后大约 1 GB。(Docker Hub)


八、先启动 PostgreSQL 和 Redis

不要一上来全部启动。

先:

powershell 复制代码
docker compose up -d postgres redis

查看:

powershell 复制代码
docker compose ps

应该看到:

text 复制代码
redash-postgres-1
redash-redis-1

状态:

text 复制代码
Up

九、初始化 Redash 数据库

这是第一次部署最关键的一步。

执行:

powershell 复制代码
docker compose run --rm server create_db

官方安装脚本第一次部署时做的就是这个操作。(GitHub)

成功时一般会看到数据库表创建、migration 等日志。

最后不应该有 traceback。


十、启动 Redash

现在执行:

powershell 复制代码
docker compose up -d

然后:

powershell 复制代码
docker compose ps

理想状态大概是:

text 复制代码
NAME                         STATUS
redash-server-1              Up
redash-scheduler-1           Up
redash-scheduled_worker-1    Up
redash-adhoc_worker-1        Up
redash-worker-1              Up
redash-postgres-1            Up
redash-redis-1               Up
redash-nginx-1               Up

十一、访问 Redash

浏览器打开:

text 复制代码
http://localhost:8080

第一次启动可能会稍微慢一点,官方也特别说明第一次 Web 页面加载时 Python 后台代码需要初始化,后续启动会快很多。(GitHub)

正常的话,你会看到:

Create your Redash Admin Account

然后设置:

text 复制代码
Name
Email
Password
Organization Name

创建管理员。

到这里 Redash 就部署成功了。


十二、如果打不开,先看这三个日志

Redash Server

powershell 复制代码
docker compose logs server

持续查看:

powershell 复制代码
docker compose logs -f server

PostgreSQL

powershell 复制代码
docker compose logs postgres

Nginx

powershell 复制代码
docker compose logs nginx

也可以一次:

powershell 复制代码
docker compose logs --tail=100

十三、你还可以直接绕过 Nginx 测试(可以跳,如果你并不在意,建议跳)

我们的 Server 本身暴露了:

yaml 复制代码
5000:5000

所以还可以直接打开:

text 复制代码
http://localhost:5000

如果:

text 复制代码
localhost:5000

能开,而:

text 复制代码
localhost:8080

不能开,

那么 Redash 本身没问题,只是 Nginx 有问题。

这是以后排查非常好用的方法。


十四、你的架构其实是这样的

text 复制代码
                        浏览器
                           │
                           ▼
                 localhost:8080
                           │
                           ▼
                        Nginx
                           │
                           ▼
                    Redash Server
                    localhost:5000
                      │         │
             ┌────────┘         └─────────┐
             ▼                            ▼
        PostgreSQL                      Redis
      Redash 元数据库                   任务队列
                                          │
                          ┌───────────────┼───────────────┐
                          ▼               ▼               ▼
                       Worker        Adhoc Worker      Scheduler
                                                           │
                                                           ▼
                                                    Scheduled Worker

所以要注意一个概念:

这个 PostgreSQL 并不是你将来拿来分析业务数据的 PostgreSQL。

它主要是:

text 复制代码
Redash 自己的数据库

里面存:

text 复制代码
用户
Dashboard
Query
Data Source 配置
Visualization
Alert
查询历史

以后你要分析 MySQL / PostgreSQL / SQL Server / ClickHouse 等数据库,是进去:

text 复制代码
Settings
→ Data Sources
→ New Data Source

再连接你的业务数据库。


十五、一个非常常见的 Docker 坑

例如你的业务 MySQL / PostgreSQL 也是 Docker 容器。

很多人会在 Redash 里填:

text 复制代码
localhost

这是错的。

因为:

text 复制代码
Redash container 的 localhost

表示:

text 复制代码
Redash container 自己

不是你的 Windows。

如果数据库运行在 Windows 主机,例如:

text 复制代码
Windows PostgreSQL
localhost:5432

Redash 里面应该写:

text 复制代码
host.docker.internal

比如:

text 复制代码
Host:
host.docker.internal

Port:
5432

这个对 Windows Docker Desktop 非常重要。

十六、打开测试

最开始会让你设置用户名和密码,名字自己起就行

你可以点击settings,创建新的数据源

十七、 关于连接的一点疑惑

Redash 跑在 Docker 容器里,所以它不能用 127.0.0.1 去访问你 Windows 本机的数据库。

对 Redash 容器来说:

text 复制代码
127.0.0.1
localhost

都代表 Redash 容器自己

你要让 Redash 访问 Windows 本机上的数据库,通常应该把 Host 填成:

text 复制代码
host.docker.internal

这个地址在 Docker Desktop for Windows 里就是"宿主机"。

比如你本机安装了 PostgreSQL:

text 复制代码
Host: host.docker.internal
Port: 5432
User: postgres
Password: 你的密码
Database: 你的数据库名

如果是 MySQL:

text 复制代码
Host: host.docker.internal
Port: 3306
User: root
Password: 你的密码
Database: your_db

如果是 SQL Server:

text 复制代码
Host: host.docker.internal
Port: 1433
User: sa
Password: 你的密码
Database: your_db

但这里还有一个关键点:你的本机数据库必须允许"非 localhost"连接。

比如 PostgreSQL 如果只监听:

text 复制代码
127.0.0.1

那 Redash 容器依然连不上。

PostgreSQL 里通常要检查 postgresql.conf

conf 复制代码
listen_addresses = '*'

然后 pg_hba.conf 里允许 Docker 网段访问,例如测试环境可以先写:

conf 复制代码
host    all    all    172.16.0.0/12    scram-sha-256

或者更宽泛一点用于本机测试:

conf 复制代码
host    all    all    0.0.0.0/0    scram-sha-256

不过第二种范围太大,不建议长期使用。

MySQL 也是类似,需要确保:

text 复制代码
bind-address

不是只绑定:

text 复制代码
127.0.0.1

通常可以改成:

text 复制代码
0.0.0.0

同时用户权限也要允许非 localhost 登录。

你可以先用一个很简单的判断方式。

如果你的数据库在 Windows 本机:

text 复制代码
Redash Host = host.docker.internal

如果数据库在另一个 Docker 容器:

text 复制代码
Redash Host = 那个容器名/Compose 服务名

如果数据库在远程服务器:

text 复制代码
Redash Host = 对方服务器 IP 或域名

例如:

text 复制代码
192.168.1.100
db.company.local

你现在这个场景其实可以记成:

text 复制代码
Redash 容器
   |
   | 访问 Windows
   v
host.docker.internal
   |
   +--> PostgreSQL :5432
   +--> MySQL      :3306
   +--> SQL Server :1433

**所以,想连接本机其它数据库就需要注意,如果用的是docker中运行的数据库容器就需要如下操作 **

现在是:

text 复制代码
Redash 容器
+
PostgreSQL 容器

最推荐的方式不是 host.docker.internal,而是让这两个容器加入同一个 Docker 网络 ,然后 Redash 直接用 PostgreSQL 的容器名Compose service 名访问。

假设你的 PostgreSQL 容器叫:

text 复制代码
pg-web

先看它现在在哪个网络:

powershell 复制代码
docker inspect pg-web

或者简洁一点:

powershell 复制代码
docker inspect pg-web --format "{{json .NetworkSettings.Networks}}"

你的 Redash 现在在这个网络:

text 复制代码
redash_default

因为之前 docker compose up 时自动创建了它。

所以最简单的做法就是把 pg-web 加进 Redash 的网络:

powershell 复制代码
docker network connect redash_default pg-web

然后检查:

powershell 复制代码
docker inspect pg-web --format "{{json .NetworkSettings.Networks}}"

正常应该能同时看到它原来的网络,以及:

text 复制代码
redash_default
powershell 复制代码
PS C:\Users\20201> docker inspect my_db --format "{{json .NetworkSettings.Networks}}"
{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"DriverOpts":null,"GwPriority":0,"NetworkID":"78b9bb0bcf0ef352a60ec1c9b999c03ae78247431fd7c5e07855b373406e521f","EndpointID":"e5ffbbf55cfdfbc78359ceb5abc9a44222cb1e4aafe329192d2fd1757852a5a4","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","MacAddress":"56:22:81:5f:d9:5a","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"DNSNames":null},"redash_default":{"IPAMConfig":{},"Links":null,"Aliases":[],"DriverOpts":{},"GwPriority":0,"NetworkID":"44ed159fb3e354205df5f4a1b0957a030be98dd03da7b42453d082dc9412ba5c","EndpointID":"82b3907ef94908143039cb111680fbef5228f9b69669d8bb1c993f97001c83a3","Gateway":"172.18.0.1","IPAddress":"172.18.0.10","MacAddress":"82:f8:54:35:64:1c","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"DNSNames":["my_db","9ab70de6e6d2"]}}

接下来在 Redash 的 PostgreSQL Data Source 页面里填:

text 复制代码
Name:
demo2

Host:
my_db

Port:
5432

User:
postgres

Password:
123456

Database Name:
my_db

这里最关键的是:

text 复制代码
Host = pg-web

不是:

text 复制代码
127.0.0.1

也不是:

text 复制代码
localhost

因为 Docker 同一网络中的容器可以通过容器名互相解析。

整体就是:

text 复制代码
redash-server-1
      |
      | Docker network: redash_default
      |
      v
    pg-web
      |
      v
 PostgreSQL :5432

你甚至不一定需要给 PostgreSQL 暴露:

text 复制代码
-p 5432:5432

如果它只是给 Redash 和其他 Docker 容器访问的话,同网络内部直接走:

text 复制代码
pg-web:5432

就够了。

不过你如果还想让 Beekeeper Studio、DBeaver 之类 Windows 本机软件访问,就保留:

powershell 复制代码
-p 5432:5432

这样两种访问方式同时存在:

text 复制代码
Redash 容器
→ pg-web:5432

Windows 软件
→ localhost:5432

你现在可以直接执行这两条:

powershell 复制代码
docker network connect redash_default pg-web
docker inspect pg-web --format "{{json .NetworkSettings.Networks}}"

然后 Redash 里把 Host 改成:

text 复制代码
pg-web

再点 Test Connection

如果还是失败,看两个输出:

powershell 复制代码
docker ps
docker inspect pg-web --format "{{json .NetworkSettings.Networks}}"

就可以直接判断网络和容器名有没有接对。

shell 复制代码
PS C:\Users\20201> docker inspect my_db --format "{{json .NetworkSettings.Networks}}"
{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"DriverOpts":null,"GwPriority":0,"NetworkID":"78b9bb0bcf0ef352a60ec1c9b999c03ae78247431fd7c5e07855b373406e521f","EndpointID":"e5ffbbf55cfdfbc78359ceb5abc9a44222cb1e4aafe329192d2fd1757852a5a4","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","MacAddress":"56:22:81:5f:d9:5a","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"DNSNames":null}}

很好,这个输出说明你的 PostgreSQL 容器 my_db 现在只在 Docker 默认的:

text 复制代码
bridge

网络里。

而你的 Redash 容器在:

text 复制代码
redash_default

所以它们现在不在同一个 Docker 网络 ,Redash 不能直接用 my_db:5432 访问它。

你现在只需要执行:

powershell 复制代码
docker network connect redash_default my_db

然后再检查一次:

powershell 复制代码
docker inspect my_db --format "{{json .NetworkSettings.Networks}}"

正常应该能同时看到:

text 复制代码
bridge
redash_default

类似这样:

json 复制代码
{
  "bridge": {
    ...
  },
  "redash_default": {
    ...
  }
}

然后回 Redash 的 Data Source 配置页,把 PostgreSQL 参数填成:

text 复制代码
Host: my_db
Port: 5432
User: postgres
Password: 你的 PostgreSQL 密码
Database Name: 你的数据库名

注意:

text 复制代码
Host = my_db

这里的 my_db 是你的容器名

你可以先确认容器真正叫什么:

powershell 复制代码
docker ps

NAMES 那一列。

另外还有一个容易混淆的点:你的容器名叫 my_db,但数据库名不一定也叫 my_db

可以执行:

powershell 复制代码
docker exec -it my_db psql -U postgres -l

它会列出数据库,例如:

text 复制代码
Name
--------
postgres
my_db
test_db

Redash 的:

text 复制代码
Database Name

要填这里真正存在的数据库名。

如果你想进一步确认 PostgreSQL 用户,也可以:

powershell 复制代码
docker exec -it my_db psql -U postgres

进去以后执行:

sql 复制代码
\du

查看用户。

你现在的网络关系改完后就是:

text 复制代码
redash-server-1
      |
      | redash_default
      |
      +-------------------+
                          |
                          v
                        my_db
                    PostgreSQL:5432

这时 Redash 就可以直接通过 Docker 内部 DNS 找到 my_db

可以尝试一些查询操作了

这里选我自己的数据库,下面就直接出数据表了

为了展示制图功能,选择内置的demo1测试

query栏输入

sql 复制代码
SELECT
    1 AS id,
    'Apple' AS product,
    12.5 AS price,
    20 AS quantity
UNION ALL
SELECT
    2,
    'Banana',
    6.8,
    35
UNION ALL
SELECT
    3,
    'Orange',
    9.9,
    18;

可以看到上方测试数据已经生成,下面点击table右侧的add visualization按钮

然后就会进入到此页面,可以设置可视化类型,名称,以及通用设置

点击dashboard,创建新看板

因为要看图所以选择刚才NewQuery发布的图

十八、退出

powershell 复制代码
PS D:\redash> docker compose down
[+] down 9/9
 ✔ Container redash-scheduler-1        Removed                                                                                                                                                               3.0s
 ✔ Container redash-adhoc_worker-1     Removed                                                                                                                                                               5.8s
 ✔ Container redash-scheduled_worker-1 Removed                                                                                                                                                               7.2s
 ✔ Container redash-nginx-1            Removed                                                                                                                                                               0.4s
 ✔ Container redash-worker-1           Removed                                                                                                                                                               8.0s
 ✔ Container redash-server-1           Removed                                                                                                                                                               3.8s
 ✔ Container redash-redis-1            Removed                                                                                                                                                               0.3s
 ✔ Container redash-postgres-1         Removed                                                                                                                                                               0.4s
 ! Network redash_default              Resource is still in use                                                                                                                                              0.0s
PS D:\redash>
相关推荐
乐迪信息18 分钟前
防爆AI摄像机实时监测船舶异常姿态
大数据·人工智能·算法·安全·目标跟踪
. . . . .19 分钟前
现代大数据技术栈核心知识总结
大数据
2401_834636991 小时前
Docker 容器化技术全解:从镜像构建到容器编排的完整教案2
运维·docker·容器
hangzhouhuanyu1 小时前
从培训到创业:AI工具在数字经济中的落地路径与避坑指南
大数据·人工智能
Lalolander1 小时前
WorkBuddy App 怎么发起任务?输入栏与发送全流程
大数据·人工智能·金蝶erp·workbuddy
玄魂1 小时前
VisActor 全新图可视化开源项目:VGraph
前端·数据可视化
2501_912784082 小时前
跨境建站避坑:为什么通用电商架构不适配反向代购业务
大数据·人工智能·架构·taoify
数智启示录2 小时前
实时数据湖 flink CDC + Kafka +Doris 【企业级实战】Checkpoint、Offset、事务与幂等如何闭环 06
大数据·flink·kafka
智慧大脑搬运工2 小时前
环保装备制造业高质量发展政策框架解析:揭榜挂帅机制与专精特新培育路径
大数据