> ## 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

<Callout type="info">
  **Docker Compose рекомендуется для небольших команд и оценки** (\< 50 пользователей).
  Не уверены, что это подходящий путь? Начните с [развёртывания](/ru/deploy/choose). Нужны функции ИИ или Конструктор приложений? Если вы начинаете с нуля, разверните [полнофункциональную платформу](/ru/deploy/architecture); если эта автономная настройка уже запущена, следуйте [руководству по миграции](https://github.com/teableio/teable-deployment/blob/main/migration/2026-07-basic-to-full-featured.md) — ваши данные останутся на месте.
</Callout>

## Развёртывание с Docker Compose

**Рекомендуемый масштаб**: 0–50 пользователей

| Преимущества          | Недостатки                                             |
| --------------------- | ------------------------------------------------------ |
| Простое развёртывание | Развёртывание на одной машине, сложное масштабирование |
| Полный контроль       |                                                        |
| Гибкая конфигурация   |                                                        |

**Требования к серверу**

Убедитесь, что ваш сервер соответствует этим базовым требованиям:

* Операционная система: рекомендуется дистрибутив Linux, например Ubuntu 20.04 LTS
* Память: минимум 4 ГБ ОЗУ
* ЦП: не менее 2 ядер
* Дисковое пространство: минимум 40 ГБ свободного места
* Сеть: стабильное подключение к интернету с доступом к необходимым портам

#### Предварительные требования

Перед началом убедитесь, что у вас есть:

* Базовое понимание принципов Docker и контейнеризации
* Docker и Docker Compose, установленные на вашей машине. Инструкции по установке см. в официальной документации Docker.

### **Установка Docker**

```bash theme={null}
# Загрузите последнюю версию Docker
curl -fsSL https://get.docker.com | bash -s docker

# Проверьте установку
docker --version
docker-compose --version
```

### Установка приложения

#### Создание файла docker-compose.yaml

Подключитесь к серверу, создайте и откройте папку teable:

```bash theme={null}
mkdir teable

cd teable
```

Создайте файлы `docker-compose.yaml` и `.env`, затем вставьте следующее содержимое:

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

#### **Минимальное развёртывание:**

```yaml docker-compose.yaml theme={null}
services:
  teable:
    image: ghcr.io/teableio/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: 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: 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}
# Замените указанный ниже пароль по умолчанию надёжным паролем (ASCII) длиной не менее 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

# Приложение
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-совместимое объектное хранилище** (например, S3, MinIO, OSS/OBS/COS с S3-совместимыми эндпоинтами или другую S3-совместимую службу) для лучшей надёжности и масштабирования.

<Tabs>
  <Tab title="Добавить MinIO в docker-compose">
    MinIO предоставляет дополнительный интерфейс управления хранилищем (порт 9001) и более мощную, стабильную файловую службу.

    ```yaml docker-compose.yaml theme={null}
    services:
      # ...предыдущее содержимое
      teable-storage:
        image: minio/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: minio/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}
    # Замените указанные ниже пароли по умолчанию надёжными паролями (ASCII) длиной не менее 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
    # Измените последний порт в соответствии с портом доступа или удалите :port при использовании стандартных портов (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}

    # Приложение
    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
    BACKEND_STORAGE_PROVIDER=minio
    # Имя общедоступного бакета
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    # Имя приватного бакета
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    # IP-адрес или доменное имя конечной точки сервиса MinIO
    BACKEND_STORAGE_MINIO_ENDPOINT=minio.example.com
    # Порт MinIO
    BACKEND_STORAGE_MINIO_PORT=443
    # Включён ли HTTPS
    BACKEND_STORAGE_MINIO_USE_SSL=true
    # Ключ доступа MinIO
    BACKEND_STORAGE_MINIO_ACCESS_KEY=_minio_access_key_
    # Секретный ключ MinIO
    BACKEND_STORAGE_MINIO_SECRET_KEY=_minio_secret_key_
    # Полный адрес доступа
    STORAGE_PREFIX=https://minio.example.com

    # ---Внутренняя сетевая конфигурация (необязательно)---
    # Внутренний IP-адрес или доменное имя конечной точки сервиса MinIO (не поддерживается для HTTPS)
    BACKEND_STORAGE_MINIO_INTERNAL_ENDPOINT=teable-storage.internal
    # Внутренний порт MinIO
    BACKEND_STORAGE_MINIO_INTERNAL_PORT=9000
    # ---Конфигурация региона (необязательно)---
    # Имя региона
    BACKEND_STORAGE_MINIO_REGION=us-east-1

    ```
  </Tab>

  <Tab title="Подключение к AWS S3">
    <Note>
      Примечание: необходимо настроить **два бакета** (публичный/частный). **Публичный бакет** должен иметь доступ **public-read** и разрешать **CORS для любого источника**, иначе доступ из браузера может завершиться ошибкой.
    </Note>

    Перед началом необходимо создать в AWS S3 два бакета. Один публичный бакет предназначен для хранения аватаров и заголовков форм, а один частный бакет — для хранения содержимого вложений.

    ```sh .env theme={null}
    # ...предыдущее содержимое
    # Используйте стандартный провайдер S3
    BACKEND_STORAGE_PROVIDER=s3
    # Имя региона
    BACKEND_STORAGE_S3_REGION=us-west-2
    # Конечная точка должна включать протокол (обычно https)
    BACKEND_STORAGE_S3_ENDPOINT=https://s3.us-west-2.amazonaws.com
    # Ключ доступа
    BACKEND_STORAGE_S3_ACCESS_KEY=access_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.s3.us-west-2.amazonaws.com

    ```

    Этот процесс применим к большинству облачных провайдеров, а не только к AWS S3.
  </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, указав конфигурацию управляемой базы данных

Заполните параметры базы данных параметрами подключения к вашей управляемой базе данных:

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

<Note>
  Обратите внимание: `127.0.0.1` — это внутренняя сеть контейнера. Если вы хотите подключиться к локально развёрнутой базе данных, используйте в качестве адреса хоста `host.docker.internal` вместо `127.0.0.1`, иначе подключение завершится ошибкой.
</Note>

**Аналогично для внешнего управляемого Redis:**

* Удалите service.teable-cache
* Удалите service.teable.depends\_on.teable-cache
* Удалите volumes.teable-cache
* Обновите .env, указав конфигурацию управляемого Redis

### Следующие шаги

[Настройка службы электронной почты](/ru/deploy/email)

## Поддержка и обратная связь

Если во время развёртывания возникнут проблемы, свяжитесь с нашей службой поддержки по адресу [support@teable.ai](mailto:support@teable.ai) или [создайте issue](https://github.com/teableio/teable/issues).

## Лицензия

Teable включает функции Community с открытым исходным кодом по лицензии AGPL-3.0. Чтобы разблокировать платные функции при самостоятельном размещении, оформите подписку на нашей [странице цен](https://app.teable.ai/public/pricing?host=self-hosted\&billing=year).

<Note>
  Образ `ghcr.io/teableio/teable:latest` включает полный набор функций. Для активации платных функций требуется действующая лицензия подписки.

  Если вам нужен только набор функций Community с открытым исходным кодом, можно выбрать образ `ghcr.io/teableio/teable-community:latest`.
</Note>

## Распространённые проблемы

<Accordion title="Как войти после первого развёртывания?">
  После запуска экземпляра откройте URL своего экземпляра и создайте там учётную запись. Teable не поставляется с предустановленной учётной записью администратора, а ваш экземпляр при самостоятельном размещении не использует учётную запись облака teable.ai.

  Первый пользователь, зарегистрировавшийся в экземпляре, становится администратором экземпляра.
</Accordion>

<Accordion title="Почему после установки не удаётся импортировать CSV/xlsx или загружать изображения">
  Проблемы с импортом файлов обычно вызваны неправильной настройкой переменной окружения 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-сертификат
  * Установите `PROTOCOL=https` (или `PUBLIC_ORIGIN=https://teable.example.com` в зависимости от вашей настройки)
  * При использовании MinIO установите `BACKEND_STORAGE_MINIO_USE_SSL=true`

  <Tip>
    Рекомендуется использовать обратный прокси (например, Nginx или Traefik) для завершения SSL.
  </Tip>

  <Tip>
    Если вы не уверены, как настроить Nginx (HTTPS/сертификаты, WebSocket, сети Docker, Nginx Proxy Manager и т. д.), см.: [Nginx (обратный прокси)](/ru/deploy/nginx).
  </Tip>
</Accordion>

<Accordion title="Как создать резервную копию данных?">
  Для развёртываний Docker Compose доступны несколько вариантов резервного копирования:

  **Вариант 1: полная резервная копия виртуальной машины** (рекомендуется для простоты)

  * Регулярно создавайте резервные копии всей виртуальной машины, на которой размещён Teable
  * Обеспечивает возможность полного восстановления системы

  **Вариант 2: резервное копирование томов Docker**

  * Создавайте резервные копии всех томов Docker, определённых в `docker-compose.yaml`
  * Список томов: `docker volume ls`
  * Резервное копирование тома:
    ```bash theme={null}
    docker run --rm -v <volume_name>:/data -v $(pwd):/backup alpine tar czf /backup/<volume_name>.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>
