> ## Documentation Index
> Fetch the complete documentation index at: https://help.teable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker 部署

> 使用 Docker Compose 部署 Teable，并配置常用部署选项。

<Callout type="info">
  **Docker Compose 适合小团队和评估测试**（50 人以内）。
  生产环境部署请先阅读 [概览](/zh/deploy/production-overview)，然后选择 [Kubernetes](/zh/deploy/k8s) 或云服务部署方案。
</Callout>

## Docker Compose 部署

**适用规模**：推荐 0-50 人

| 优点    | 缺点        |
| ----- | --------- |
| 部署简单  | 单机部署，扩容繁琐 |
| 自主可控  |           |
| 灵活可配置 |           |

**服务器环境**

确保您的服务器满足以下基本要求：

* 操作系统：建议使用Linux发行版，如Ubuntu 20.04 LTS。
* 内存：至少4GB RAM。
* CPU：至少2核。
* 磁盘空间：至少40GB的可用空间。
* 网络：具有稳定的互联网连接，并允许必要的端口访问。

#### 先决条件

在开始之前，请确保您具备以下条件：

* 理解Docker和容器化原理的基本知识。
* 在您的机器上安装了Docker和Docker Compose。访问官方Docker文档了解安装指南。

### **安装 Docker**

```bash theme={null}
# 下载最新版本的 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun


# 验证安装是否正确
docker --version
docker-compose --version
```

### 安装应用

#### 创建 docker-compose 文件

进入服务器, 创建并进入 teable 文件夹

```bash theme={null}
mkdir teable

cd teable
```

创建一个 `docker-compose.yaml`  以及一个 `.env` 文件，并粘贴下面内容，已使用国内镜像源以保证顺畅安装

```sh theme={null}
vim docker-compose.yaml
```

#### **最小化部署：**

```yaml docker-compose.yaml theme={null}
services:
  teable:
    image: registry.cn-shenzhen.aliyuncs.com/teable/teable:latest
    restart: always
    ports:
      - '3000:3000'
    volumes:
      - teable-data:/app/.assets:rw
    env_file:
      - .env
    environment:
      - NEXT_ENV_IMAGES_ALL_REMOTE=true
    networks:
      - teable
    depends_on:
      teable-db:
        condition: service_healthy
      teable-cache:
        condition: service_healthy
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
      start_period: 5s
      interval: 5s
      timeout: 3s
      retries: 3

  teable-db:
    image: registry.cn-shenzhen.aliyuncs.com/teable/postgres:15.4
    restart: always
    ports:
      - '42345:5432'
    volumes:
      - teable-db:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    networks:
      - teable
    healthcheck:
      test: ['CMD-SHELL', "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
      interval: 10s
      timeout: 3s
      retries: 3

  teable-cache:
    image: registry.cn-shenzhen.aliyuncs.com/teable/redis:7.2.4
    restart: always
    expose:
      - '6379'
    volumes:
      - teable-cache:/data:rw
    networks:
      - teable
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 3s
      retries: 3

networks:
  teable:
    name: teable-network

volumes:
  teable-db: {}
  teable-data: {}
  teable-cache: {}

```

```bash .env theme={null}
# 替换下面默认密码, 推荐使用 8 位以上的强密码。
POSTGRES_PASSWORD=replace_this_password
REDIS_PASSWORD=replace_this_password
SECRET_KEY=replace_this_secret_key

# 请将下面替换为可公开访问的地址
PUBLIC_ORIGIN=http://127.0.0.1:3000

# ---------------------

# Postgres
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable

# Redis
REDIS_HOST=teable-cache
REDIS_PORT=6379
REDIS_DB=0

# App
PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
BACKEND_CACHE_PROVIDER=redis
BACKEND_CACHE_REDIS_URI=redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
```

#### **增加存储服务（可选）：**

生产环境请使用 **S3-compatible 对象存储**（如 S3、MinIO、兼容 S3 的 OSS/OBS/COS 等），以获得更好的可靠性与扩展能力。

详见：[对象存储（S3-compatible）](/zh/deploy/storage)

<Tabs>
  <Tab title="docker-compose 增加 minio">
    minio 提供了额外的存储管理界面（9001 端口）以及更强大的稳定的文件服务

    ```yaml docker-compose.yaml theme={null}
    services:
      # ...前面的内容
      teable-storage:
        image: registry.cn-shenzhen.aliyuncs.com/teable/minio:RELEASE.2024-02-17T01-15-57Z
        ports:
          - "9000:9000"
          - "9001:9001"
        environment:
          - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
          - MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
        volumes:
          - teable-storage:/data:rw
        networks:
          - teable
        command: server /data --console-address ":9001"
      createbuckets:
        image: registry.cn-shenzhen.aliyuncs.com/teable/mc
        networks:
          - teable
        entrypoint: >
          /bin/sh -c "
          /usr/bin/mc alias set teable-storage http://teable-storage:9000 ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY};
          /usr/bin/mc mb teable-storage/public;
          /usr/bin/mc anonymous set public teable-storage/public;
          /usr/bin/mc mb teable-storage/private;
          exit 0;
          "
        depends_on:
          teable-storage:
            condition: service_started

    networks:
      teable:
        name: teable-network

    volumes:
      teable-db: {}
      teable-cache: {}
      # 增加一个卷
      teable-storage: {}

    ```

    ```bash .env theme={null}
    # 替换下面默认密码, 推荐使用 8 位以上的强密码。
    POSTGRES_PASSWORD=replace_this_password
    REDIS_PASSWORD=replace_this_password
    SECRET_KEY=replace_this_secret_key

    # 如果启用 https，请将 PROTOCOL 设置为 https。
    PROTOCOL=http
    # 请将 PUBLIC_HOST 设置为当前部署的主机的 IP 或者域名。无法使用 localhost 或 127.0.0.1。
    PUBLIC_HOST=192.168.x.x
    # 请将最后端口修改为正式访问地址的端口，如 为 80 或 443 可去掉:和端口号。
    PUBLIC_ORIGIN=${PROTOCOL}://${PUBLIC_HOST}:3000

    # ---------------------

    # Postgres
    POSTGRES_HOST=teable-db
    POSTGRES_PORT=5432
    POSTGRES_DB=teable
    POSTGRES_USER=teable

    # Redis
    REDIS_HOST=teable-cache
    REDIS_PORT=6379
    REDIS_DB=0

    # Minio
    MINIO_ACCESS_KEY=teable_minio_access
    MINIO_SECRET_KEY=${SECRET_KEY}

    # App
    PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
    BACKEND_CACHE_PROVIDER=redis
    BACKEND_CACHE_REDIS_URI=redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
    BACKEND_STORAGE_PROVIDER=minio
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    BACKEND_STORAGE_MINIO_USE_SSL=false # 如果启用 https 请修改该值为 true
    BACKEND_STORAGE_MINIO_ENDPOINT=${PUBLIC_HOST}
    BACKEND_STORAGE_MINIO_PORT=9000
    BACKEND_STORAGE_MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
    BACKEND_STORAGE_MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
    STORAGE_PREFIX=${PROTOCOL}://${PUBLIC_HOST}:${BACKEND_STORAGE_MINIO_PORT}
    ```
  </Tab>

  <Tab title="连接外部 minio">
    开始之前，你需要在 minio 上创建两个桶。一个公开桶存储头像和表单头图，一个私有桶用来存储附件内容。

    ```sh .env theme={null}
    # ...前面的内容
    # 使用 minio provider
    BACKEND_STORAGE_PROVIDER=minio
    # 公共桶名称
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    # 私有桶名称
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    # minio 服务 endpoint ip 或域名
    BACKEND_STORAGE_MINIO_ENDPOINT=minio.example.com
    # minio 端口
    BACKEND_STORAGE_MINIO_PORT=443
    # 是否启用了 https
    BACKEND_STORAGE_MINIO_USE_SSL=true
    # minio access key
    BACKEND_STORAGE_MINIO_ACCESS_KEY=_minio_access_key_
    # minio secret key
    BACKEND_STORAGE_MINIO_SECRET_KEY=_minio_secret_key_
    # 完整的访问地址
    STORAGE_PREFIX=https://minio.example.com

    # ---内网配置（可选）---
    # 内网 minio 服务 endpoint ip 或域名 (暂不支持 https)
    BACKEND_STORAGE_MINIO_INTERNAL_ENDPOINT=teable-storage.internal
    # 内网 minio 端口
    BACKEND_STORAGE_MINIO_INTERNAL_PORT=9000
    # ---region 配置（可选）---
    # 可用区名称
    BACKEND_STORAGE_MINIO_REGION=us-east-1

    ```
  </Tab>

  <Tab title="连接阿里云 oss">
    <Note>
      注意：请配置 **public/private 双桶**。其中 **public bucket 必须 public-read**，并配置 **允许任意跨域（CORS）**，否则浏览器访问可能失败。
    </Note>

    开始之前，你需要在阿里云上创建两个桶。一个公开桶存储头像和表单头图，一个私有桶用来存储附件内容。

    ```sh .env theme={null}
    # ...前面的内容
    # 使用 s3 标准 provider
    BACKEND_STORAGE_PROVIDER=s3
    # 可用区名称
    BACKEND_STORAGE_S3_REGION=oss-cn-shenzhen
    # 端点，注意要带上协议，一般是 https
    BACKEND_STORAGE_S3_ENDPOINT=https://oss-cn-shenzhen.aliyuncs.com
    # access key
    BACKEND_STORAGE_S3_ACCESS_KEY=access_key
    # secret key
    BACKEND_STORAGE_S3_SECRET_KEY=secret_key
    # 公共桶
    BACKEND_STORAGE_PUBLIC_BUCKET=your-public-bucket
    # 私有桶
    BACKEND_STORAGE_PRIVATE_BUCKET=your-private-bucket
    # 完整的访问地址，你的公共桶的访问地址
    STORAGE_PREFIX=https://your-public-bucket.oss-cn-shenzhen.aliyuncs.com

    ```

    上述过程可适用于大部分云厂商，不仅限于阿里云
  </Tab>
</Tabs>

#### 启动应用

在当前目录下执行启动应用，等待启动完毕访问 127.0.0.1:3000 即可进入应用

<Note>
  在进行大规模数据复制时，需要启用 HTTPS 环境，否则无法进行异步剪切板访问
</Note>

```bash theme={null}
docker-compose pull

docker-compose up -d
```

#### 使用托管的数据库（可选）

如果希望使用托管的数据库和，则可以进一步精简部署过程。

1. 删除 services.teable-db
2. 删除 volumes.teable-db
3. 更新 .env 替换为托管数据库的配置

**完整示例**

```yaml docker-compose.yaml theme={null}
services:
  teable:
    image: registry.cn-shenzhen.aliyuncs.com/teable/teable:latest
    restart: always
    ports:
      - '3000:3000'
    env_file:
      - .env
    environment:
      - NEXT_ENV_IMAGES_ALL_REMOTE=true
    networks:
      - teable
    depends_on:
      teable-db:
        condition: service_healthy
      teable-cache:
        condition: service_healthy
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
      start_period: 5s
      interval: 5s
      timeout: 3s
      retries: 3
  teable-cache:
    image: registry.cn-shenzhen.aliyuncs.com/teable/redis:7.2.4
    restart: always
    expose:
      - '6379'
    volumes:
      - teable-cache:/data:rw
    networks:
      - teable
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 3s
      retries: 3
networks:
  teable:
    name: teable-network
    driver: bridge

volumes:
  teable-cache: {}

```

填写数据库参数为托管数据库的连接参数即可

```sh .env theme={null}
POSTGRES_HOST=your-database.com
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable
```

<Note>
  注意`127.0.0.1` 为容器内网，如果你想连接本机部署的数据库 `POSTGRES_HOST` 请不要使用 `127.0.0.1` 而要是用 `host.docker.internal` 作为本机地址，否则将无法连接
</Note>

**如果使用外部托管 redis 则同理**

* 删除 service.teable-cache
* 删除 service.teable.depends\_on.teable-cache
* 删除 volumes.teable-cache
* 更新 .env 替换为托管redis的配置

### 下一步

[配置邮件服务](/zh/deploy/email)

[配置外部数据库连接](/zh/deploy/database-connection)

## 支持与反馈

如果您在部署过程中遇到任何问题，请联系我们的支持团队 [support@teable.ai](mailto:support@teable.ai) 或[提交 issue](https://github.com/teableio/teable/issues)。

## 许可证

Teable 社区版本在 AGPL-3.0 协议下开源。企业版本请[联系我们](https://app.teable.cn/share/shrg1ljiQXm4goJ7Cu9/view)获取商业许可。

<Note>
  `registry.cn-shenzhen.aliyuncs.com/teable/teable:latest` 镜像包含企业版和社区版所有功能，并可免费使用。

  如果需要单独使用社区版，可选择 `registry.cn-shenzhen.aliyuncs.com/teable/teable-community:latest` 镜像。
</Note>

## 常见问题

<Accordion title="首次部署后如何登录？">
  实例启动后，打开您的实例访问地址，并在该实例上注册一个账号。Teable 不提供预设管理员账号，您的自托管实例也不会使用 teable.ai 云端账号登录。

  在该实例上第一个注册的用户会自动成为实例管理员。
</Accordion>

<Accordion title="为什么我安装过后无法导入文件/无法上传图片">
  无法导入文件通常是因为没有正确配置PUBLIC\_ORIGIN环境变量。您需要将PUBLIC\_ORIGIN设置为当前可访问的地址：

  ```bash theme={null}
  # 本地开发环境
  PUBLIC_ORIGIN=http://127.0.0.1:3000

  # 局域网访问
  PUBLIC_ORIGIN=http://192.168.1.100:3000

  # 域名访问
  PUBLIC_ORIGIN=https://teable.example.com
  ```

  <Callout type="warning">
    重要提示：URL末尾不要包含斜杠("/")。
  </Callout>

  更改此配置后，您需要重启Teable实例以使更改生效。
</Accordion>

<Accordion title="如何启用HTTPS">
  启用 HTTPS 需要以下步骤：

  * 获取有效的 SSL 证书
  * 设置好 `PUBLIC_ORIGIN=https://teable.example.com`
  * 如果使用 MinIO，请确保 MinIO 服务也启用了 HTTPS，并将 `BACKEND_STORAGE_MINIO_USE_SSL` 设置为 `true`

  <Tip>
    推荐使用反向代理（如Nginx或Traefik）来处理SSL。
  </Tip>

  <Tip>
    如果你不确定 Nginx 该怎么配（HTTPS/证书、WebSocket、Docker 网络、Nginx Proxy Manager 等），可以直接看这篇配置指南：[Nginx 配置](/zh/deploy/nginx)。
  </Tip>
</Accordion>

<Accordion title="如何获取实例 ID">
  使用管理员账号（默认为第一个注册的用户）打开管理面板，进入 **私有化部署许可证** 页面，复制 **实例 ID**。
</Accordion>

<Accordion title="我如何进行数据备份？">
  对于 Docker Compose 部署，您有以下几种备份选项：

  **方案 1：完整虚拟机备份**（推荐，最简单）

  * 定期备份托管 Teable 的整个虚拟机
  * 提供完整的系统恢复能力

  **方案 2：Docker 卷备份**

  * 备份 `docker-compose.yaml` 中定义的所有 Docker 卷
  * 列出所有卷：`docker volume ls`
  * 备份单个卷：
    ```bash theme={null}
    docker run --rm -v <卷名称>:/data -v $(pwd):/backup alpine tar czf /backup/<卷名称>.tar.gz /data
    ```

  **方案 3：组件级备份**（推荐，便于精细控制）

  * **PostgreSQL 数据库**：包含所有表格数据
    ```bash theme={null}
    docker exec teable-db pg_dump -U teable teable > backup.sql
    ```
  * **Redis 数据库**：包含自动化队列数据
    ```bash theme={null}
    docker exec teable-cache redis-cli --rdb /data/dump.rdb
    ```
  * **数据目录**：备份 `teable-data` 卷（包含所有附件文件）
    ```bash theme={null}
    docker run --rm -v teable-data:/data -v $(pwd):/backup alpine tar czf /backup/teable-data.tar.gz /data
    ```

  对于生产环境，我们建议设置自动化的每日备份并制定保留策略。
</Accordion>
