> ## 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 користувачів).
  Не впевнені, що цей варіант вам підходить? Почніть зі сторінки [Розгортання](/uk/deploy/choose). Потрібні функції ШІ або App Builder? Для нового розгортання скористайтеся [повнофункціональною платформою](/uk/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 кінцевими точками або інший сумісний сервіс), щоб підвищити надійність і спростити масштабування.

<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

### Подальші кроки

[Налаштуйте поштовий сервіс](/uk/deploy/email)

## Підтримка та зворотний зв’язок

Якщо під час розгортання виникнуть проблеми, зверніться до нашої служби підтримки за адресою [support@teable.ai](mailto:support@teable.ai) або [створіть повідомлення про проблему](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>
    Для завершення SSL-з’єднання рекомендуємо використовувати зворотний проксі-сервер (наприклад, Nginx або Traefik).
  </Tip>

  <Tip>
    Якщо ви не впевнені, як налаштувати Nginx (HTTPS/сертифікати, WebSocket, мережі Docker, Nginx Proxy Manager тощо), див. [Nginx (зворотний проксі-сервер)](/uk/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>
