vm:chatwoot:01-install

Установка Chatwoot в Docker на Ubuntu

# Создание директории для Chatwoot в /opt
sudo mkdir -p /opt/chatwoot
 
# Изменение владельца папки на текущего пользователя
sudo chown $USER:$USER /opt/chatwoot
 
# Переход в созданную директорию
cd /opt/chatwoot
 
# Клонирование репозитория в подпапку repo
git clone https://github.com/chatwoot/chatwoot.git repo
 
# Переход в репозиторий
cd repo
 
# Переход на стабильную версию (опционально)
git checkout main
# Убедитесь, что находитесь в корневой директории Chatwoot
cd /opt/chatwoot
 
# Копирование примера конфигурации из репозитория
cp repo/.env.example .env
 
# Редактирование файла конфигурации
nano .env
# Redis URL
REDIS_URL=redis://redis:6379
REDIS_PASSWORD=your_redis_password

# База данных
POSTGRES_HOST=postgres
POSTGRES_USERNAME=postgres
POSTGRES_PASSWORD=your_postgres_password
POSTGRES_DATABASE=chatwoot

# Secret key (сгенерируйте уникальный)
SECRET_KEY_BASE=your_secret_key_here

# Rails environment
RAILS_ENV=production

# Frontend URL
FRONTEND_URL=http://your-domain.com

# Настройки почты (опционально)
MAILER_SENDER_EMAIL=chatwoot@yourdomain.com
SMTP_ADDRESS=smtp.gmail.com
SMTP_PORT=587
SMTP_EMAIL=your_email@gmail.com
SMTP_PASSWORD=your_app_password
# Генерация SECRET_KEY_BASE
openssl rand -hex 64

ВАЖНО: Скопируйте сгенерированный ключ в файл .env как значение для SECRET_KEY_BASE.

Создайте файл docker-compose.yml в корневой директории /opt/chatwoot:

# Убедитесь, что находитесь в корневой директории Chatwoot
cd /opt/chatwoot
 
# Создайте файл docker-compose.yml
nano docker-compose.yml

Содержимое файла:

docker-compose.yml
services:
  base: &base
    build:
      context: ./repo
      dockerfile: docker/Dockerfile
    image: chatwoot/chatwoot:custom
    pull_policy: never
    env_file: .env
    volumes:
      - ./storage:/app/storage
  rails:
    <<: *base
    depends_on:
      - postgres
      - redis
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    entrypoint: docker/entrypoints/rails.sh
    command: ['bundle', 'exec', 'rails', 's', '-p', '3000', '-b', '0.0.0.0']
    restart: always
  sidekiq:
    <<: *base
    depends_on:
      - postgres
      - redis
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml']
    restart: always
  postgres:
    image: pgvector/pgvector:pg16
    restart: always
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=chatwoot
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=your_postgres_password
  redis:
    image: redis:alpine
    restart: always
    command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""]
    env_file: .env
    volumes:
      - ./redis_data:/data

Особенности конфигурации:

  • Используется сборка из исходного кода (build) вместо готового образа
  • PostgreSQL с поддержкой pgvector для AI функций
  • Redis защищен паролем из переменной окружения
  • Нет проброшенных портов - доступ только через Nginx
  • Все данные хранятся в локальных папках
# Убедитесь, что находитесь в корневой директории Chatwoot
cd /opt/chatwoot
 
# Создание папок для данных баз данных и файлов
mkdir -p postgres_data redis_data storage
 
# Установка правильных прав доступа
sudo chown -R $USER:$USER postgres_data redis_data storage
 
# Сборка образа из исходного кода (может занять несколько минут)
docker-compose build
 
# Инициализация базы данных
docker-compose run --rm rails bundle exec rails db:chatwoot_prepare
 
# Создание и запуск контейнеров
docker-compose up -d
 
# Проверка статуса контейнеров
docker-compose ps
 
# Просмотр логов сборки и запуска (опционально)
docker-compose logs -f

ВНИМАНИЕ: Первая сборка может занять 10-15 минут, так как Docker компилирует приложение из исходного кода. Убедитесь, что у вас достаточно места на диске (минимум 5GB свободного места).

# Убедитесь, что находитесь в корневой директории Chatwoot
cd /opt/chatwoot
 
# Выполнение миграций базы данных и заполнение начальными данными
docker-compose run --rm rails bundle exec rails db:chatwoot_prepare
# Убедитесь, что находитесь в корневой директории Chatwoot
cd /opt/chatwoot
 
# Создание первого пользователя-администратора
docker-compose exec rails bundle exec rails runner '
u = User.new(
  email: "admin@example.com",
  password: "password123",
  password_confirmation: "password123",
  name: "Admin User"
)
u.skip_confirmation!
u.save!
 
account = u.accounts.create!(name: "My Company")
AccountUser.create!(user: u, account: account, role: :administrator)
'
  1. Настройте Nginx для проксирования запросов к контейнеру
  2. Откройте браузер и перейдите на ваш домен
  3. Войдите используя созданные учетные данные администратора
  4. Настройте свою первую учетную запись

СОВЕТ: Поскольку порты не проброшены наружу, доступ к Chatwoot возможен только через настроенный Nginx proxy.

Для продакшн использования рекомендуется настроить SSL через Nginx или Traefik.

# Переход в корневую директорию Chatwoot
cd /opt/chatwoot
 
# Создание бэкапа базы данных
docker-compose exec postgres pg_dump -U postgres chatwoot > chatwoot_backup_$(date +%Y%m%d_%H%M%S).sql
 
# Бэкап всех данных (база данных, redis, файлы загрузок)
tar -czf chatwoot_full_backup_$(date +%Y%m%d_%H%M%S).tar.gz postgres_data redis_data storage
 
# Бэкап только файлов загрузок
tar -czf storage_backup_$(date +%Y%m%d_%H%M%S).tar.gz storage
 
# Бэкап конфигурационных файлов
tar -czf config_backup_$(date +%Y%m%d_%H%M%S).tar.gz .env docker-compose.yml
# Переход в корневую директорию Chatwoot
cd /opt/chatwoot
 
# Обновление репозитория
cd repo
git pull origin main
cd ..
 
# Остановка сервисов
docker-compose down
 
# Пересборка образа с новыми изменениями
docker-compose build --no-cache
 
# Запуск обновленных контейнеров
docker-compose up -d
 
# Выполнение миграций (если необходимо)
docker-compose exec rails bundle exec rails db:migrate
# Переход в корневую директорию Chatwoot (выполнять перед командами ниже)
cd /opt/chatwoot
 
# Просмотр логов конкретного сервиса
docker-compose logs -f rails
docker-compose logs -f sidekiq
 
# Перезапуск всех сервисов
docker-compose restart
 
# Перезапуск конкретного сервиса
docker-compose restart rails
 
# Остановка всех сервисов
docker-compose down
 
# Пересборка образа
docker-compose build --no-cache
 
# Подключение к Rails консоли
docker-compose exec rails bundle exec rails console
 
# ОСТОРОЖНО! Полное удаление всех данных
# docker-compose down && sudo rm -rf postgres_data redis_data storage

После установки структура папок будет следующая:

/opt/chatwoot/
├── docker-compose.yml          # Конфигурация Docker Compose
├── .env                       # Переменные окружения
├── repo/                      # Репозиторий Chatwoot (клон с GitHub)
│   ├── .env.example
│   ├── Gemfile
│   └── ... (остальные файлы репозитория)
├── postgres_data/             # Данные PostgreSQL
├── redis_data/                # Данные Redis
└── storage/                   # Файлы загрузок пользователей

Преимущества такой структуры:

  • Все данные хранятся локально и легко доступны для резервного копирования
  • Простое управление файлами и конфигурацией
  • Репозиторий изолирован в отдельной папке
  • Легко переносить данные между серверами
  1. Проблемы с подключением к базе данных: Проверьте, что контейнер postgres запущен
  2. Проблемы с памятью: Убедитесь, что у вас достаточно RAM (минимум 2GB)
  3. Порт 3000 занят: Измените порт в docker-compose.yml на свободный

ИТОГ: После успешной установки Chatwoot будет доступен через настроенный домен с Nginx proxy.

Создайте файл конфигурации Nginx:

sudo nano /etc/nginx/sites-available/chatwoot
upstream chatwoot {
    server rails:3000;
}
 
server {
    listen 80;
    server_name your-domain.com;
    client_max_body_size 50M;
 
    location / {
        proxy_pass http://chatwoot;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
 
        # WebSocket support для real-time функций
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
 
        # Увеличение таймаутов
        proxy_connect_timeout       300;
        proxy_send_timeout          300;
        proxy_read_timeout          300;
        send_timeout                300;
    }
 
    # Обработка статических файлов
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        proxy_pass http://chatwoot;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

ВНИМАНИЕ: Поскольку контейнеры работают без проброшенных портов, Nginx должен находиться в той же Docker сети или использовать внутренние имена контейнеров.

# Активация конфигурации
sudo ln -s /etc/nginx/sites-available/chatwoot /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Создайте systemd service:

sudo nano /etc/systemd/system/chatwoot.service
[Unit]
Description=Chatwoot
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/chatwoot
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
# Активация сервиса
sudo systemctl enable chatwoot.service
sudo systemctl start chatwoot.service
 
# Проверка статуса сервиса
sudo systemctl status chatwoot.service
# Просмотр системных логов Chatwoot
sudo journalctl -u chatwoot.service -f
 
# Мониторинг ресурсов контейнеров
docker stats
 
# Проверка здоровья контейнеров
docker-compose ps
 
# Просмотр логов Rails приложения
docker-compose logs -f rails
 
# Просмотр логов Sidekiq (фоновые задачи)
docker-compose logs -f sidekiq

ВАЖНЫЕ МОМЕНТЫ БЕЗОПАСНОСТИ:

  • Измените пароли по умолчанию в .env файле
  • Используйте сильные пароли для базы данных
  • Настройте firewall (ufw) для ограничения доступа к портам
  • Регулярно обновляйте Docker образы
  • Настройте SSL/TLS для продакшн среды
  • vm/chatwoot/01-install.txt
  • Последнее изменение: 2025/08/28 11:58
  • admin