Установка Chatwoot в Docker на Ubuntu
Шаг 1: Клонирование репозитория Chatwoot
# Создание директории для 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
Шаг 2: Настройка переменных окружения
# Убедитесь, что находитесь в корневой директории Chatwoot cd /opt/chatwoot # Копирование примера конфигурации из репозитория cp repo/.env.example .env # Редактирование файла конфигурации nano .env
Основные параметры в файле .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
Шаг 3: Генерация секретного ключа
# Генерация SECRET_KEY_BASE openssl rand -hex 64
ВАЖНО: Скопируйте сгенерированный ключ в файл .env как значение для SECRET_KEY_BASE.
Шаг 4: Создание Docker Compose файла
Создайте файл 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
- Все данные хранятся в локальных папках
Шаг 5: Создание папок для данных и сборка контейнеров
# Убедитесь, что находитесь в корневой директории 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 свободного места).
Шаг 6: Инициализация базы данных
# Убедитесь, что находитесь в корневой директории Chatwoot cd /opt/chatwoot # Выполнение миграций базы данных и заполнение начальными данными docker-compose run --rm rails bundle exec rails db:chatwoot_prepare
Шаг 7: Создание администратора
# Убедитесь, что находитесь в корневой директории 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) '
Шаг 8: Проверка установки
- Настройте Nginx для проксирования запросов к контейнеру
- Откройте браузер и перейдите на ваш домен
- Войдите используя созданные учетные данные администратора
- Настройте свою первую учетную запись
СОВЕТ: Поскольку порты не проброшены наружу, доступ к Chatwoot возможен только через настроенный Nginx proxy.
Дополнительные настройки
Настройка SSL (опционально)
Для продакшн использования рекомендуется настроить 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/ # Файлы загрузок пользователей
Преимущества такой структуры:
- Все данные хранятся локально и легко доступны для резервного копирования
- Простое управление файлами и конфигурацией
- Репозиторий изолирован в отдельной папке
- Легко переносить данные между серверами
Устранение неполадок
- Проблемы с подключением к базе данных: Проверьте, что контейнер postgres запущен
- Проблемы с памятью: Убедитесь, что у вас достаточно RAM (минимум 2GB)
- Порт 3000 занят: Измените порт в docker-compose.yml на свободный
ИТОГ: После успешной установки Chatwoot будет доступен через настроенный домен с Nginx proxy.
Дополнительные настройки для продакшн
Настройка Nginx (обязательно)
Создайте файл конфигурации 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 для продакшн среды