Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| vm:chatwoot:01-install [2025/08/28 10:07] – admin | vm:chatwoot:01-install [2025/08/28 11:58] (текущий) – [Шаг 6: Инициализация базы данных] admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Установка Chatwoot в Docker на Ubuntu | + | ====== Установка Chatwoot в Docker на Ubuntu ====== |
| - | ===== Шаг | + | ===== Шаг |
| <code bash> | <code bash> | ||
| Строка 13: | Строка 13: | ||
| cd / | cd / | ||
| - | # Клонирование репозитория | + | # Клонирование репозитория |
| - | git clone https:// | + | git clone https:// |
| + | |||
| + | # Переход в репозиторий | ||
| + | cd repo | ||
| # Переход на стабильную версию (опционально) | # Переход на стабильную версию (опционально) | ||
| Строка 20: | Строка 23: | ||
| </ | </ | ||
| - | ===== Шаг | + | ===== Шаг |
| <code bash> | <code bash> | ||
| - | # Убедитесь, | + | # Убедитесь, |
| cd / | cd / | ||
| - | # Копирование примера конфигурации | + | # Копирование примера конфигурации |
| - | cp .env.example .env | + | cp repo/.env.example .env |
| # Редактирование файла конфигурации | # Редактирование файла конфигурации | ||
| Строка 38: | Строка 41: | ||
| # Redis URL | # Redis URL | ||
| REDIS_URL=redis:// | REDIS_URL=redis:// | ||
| + | REDIS_PASSWORD=your_redis_password | ||
| # База данных | # База данных | ||
| POSTGRES_HOST=postgres | POSTGRES_HOST=postgres | ||
| POSTGRES_USERNAME=postgres | POSTGRES_USERNAME=postgres | ||
| - | POSTGRES_PASSWORD=your_strong_password | + | POSTGRES_PASSWORD=your_postgres_password |
| POSTGRES_DATABASE=chatwoot | POSTGRES_DATABASE=chatwoot | ||
| Строка 52: | Строка 56: | ||
| # Frontend URL | # Frontend URL | ||
| - | FRONTEND_URL=http:// | + | FRONTEND_URL=http:// |
| # Настройки почты (опционально) | # Настройки почты (опционально) | ||
| Строка 62: | Строка 66: | ||
| </ | </ | ||
| - | ===== Шаг | + | ===== Шаг |
| <code bash> | <code bash> | ||
| Строка 69: | Строка 73: | ||
| </ | </ | ||
| - | <note important> | + | **ВАЖНО: |
| - | ===== Шаг | + | ===== Шаг |
| - | Создайте файл '' | + | Создайте файл '' |
| <code bash> | <code bash> | ||
| - | # Убедитесь, | + | # Убедитесь, |
| cd / | cd / | ||
| Строка 86: | Строка 90: | ||
| <file yaml docker-compose.yml> | <file yaml docker-compose.yml> | ||
| - | version: ' | ||
| - | |||
| services: | services: | ||
| - | | + | |
| - | | + | |
| - | environment: | + | |
| - | | + | |
| - | | + | image: |
| - | POSTGRES_PASSWORD: | + | |
| - | volumes: | + | |
| - | - postgres_data:/ | + | |
| - | restart: unless-stopped | + | |
| - | + | ||
| - | redis: | + | |
| - | image: | + | |
| - | volumes: | + | |
| - | - redis_data:/data | + | |
| - | restart: unless-stopped | + | |
| - | + | ||
| - | | + | |
| - | | + | |
| env_file: .env | env_file: .env | ||
| - | | + | |
| - | - POSTGRES_HOST=postgres | + | - ./storage:/app/storage |
| - | - REDIS_URL=redis://redis:6379 | + | rails: |
| + | <<: *base | ||
| depends_on: | depends_on: | ||
| - postgres | - postgres | ||
| - redis | - redis | ||
| - | ports: | ||
| - | - " | ||
| - | volumes: | ||
| - | - ./ | ||
| - | restart: unless-stopped | ||
| - | |||
| - | chatwoot-worker: | ||
| - | image: chatwoot/ | ||
| - | env_file: .env | ||
| environment: | environment: | ||
| - | - POSTGRES_HOST=postgres | + | - NODE_ENV=production |
| - | - REDIS_URL=redis://redis:6379 | + | - RAILS_ENV=production |
| + | - INSTALLATION_ENV=docker | ||
| + | entrypoint: docker/entrypoints/rails.sh | ||
| + | command: [' | ||
| + | restart: always | ||
| + | sidekiq: | ||
| + | <<: *base | ||
| depends_on: | depends_on: | ||
| - postgres | - postgres | ||
| - redis | - redis | ||
| - | command: bundle exec sidekiq | + | |
| + | - NODE_ENV=production | ||
| + | - RAILS_ENV=production | ||
| + | - INSTALLATION_ENV=docker | ||
| + | | ||
| + | restart: always | ||
| + | postgres: | ||
| + | image: pgvector/ | ||
| + | restart: always | ||
| volumes: | volumes: | ||
| - | - ./storage:/app/storage | + | - ./postgres_data:/var/lib/ |
| - | | + | |
| - | + | | |
| - | volumes: | + | - POSTGRES_USER=postgres |
| - | | + | - POSTGRES_PASSWORD=your_postgres_password |
| - | redis_data: | + | |
| + | | ||
| + | restart: always | ||
| + | command: [" | ||
| + | env_file: .env | ||
| + | volumes: | ||
| + | - ./redis_data:/data | ||
| </ | </ | ||
| - | ===== Шаг | + | **Особенности конфигурации: |
| + | * Используется сборка из исходного кода (build) вместо готового образа | ||
| + | * PostgreSQL с поддержкой pgvector для AI функций | ||
| + | * Redis защищен паролем из переменной окружения | ||
| + | * Нет проброшенных портов - доступ только через Nginx | ||
| + | * Все данные хранятся в локальных папках | ||
| + | |||
| + | ===== Шаг | ||
| <code bash> | <code bash> | ||
| - | # Убедитесь, | + | # Убедитесь, |
| cd / | cd / | ||
| + | |||
| + | # Создание папок для данных баз данных и файлов | ||
| + | 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: | ||
| # Создание и запуск контейнеров | # Создание и запуск контейнеров | ||
| Строка 151: | Строка 172: | ||
| docker-compose ps | docker-compose ps | ||
| - | # Просмотр логов (опционально) | + | # Просмотр логов |
| docker-compose logs -f | docker-compose logs -f | ||
| </ | </ | ||
| - | ===== Шаг | + | **ВНИМАНИЕ: |
| + | |||
| + | ===== Шаг | ||
| <code bash> | <code bash> | ||
| - | # Убедитесь, | + | # Убедитесь, |
| cd / | cd / | ||
| - | # Выполнение миграций базы данных | + | # Выполнение миграций базы данных |
| - | docker-compose exec chatwoot-app bundle exec rails db:create | + | docker-compose |
| - | docker-compose exec chatwoot-app bundle exec rails db: | + | |
| - | + | ||
| - | # Заполнение начальными данными | + | |
| - | docker-compose | + | |
| </ | </ | ||
| - | ===== Шаг | + | ===== Шаг |
| <code bash> | <code bash> | ||
| - | # Убедитесь, | + | # Убедитесь, |
| cd / | cd / | ||
| # Создание первого пользователя-администратора | # Создание первого пользователя-администратора | ||
| - | docker-compose exec chatwoot-app | + | docker-compose exec rails bundle exec rails runner ' |
| u = User.new( | u = User.new( | ||
| email: " | email: " | ||
| Строка 191: | Строка 210: | ||
| </ | </ | ||
| - | ===== Шаг | + | ===== Шаг |
| - | - Откройте браузер и перейдите на '' | + | |
| + | | ||
| - Войдите используя созданные учетные данные администратора | - Войдите используя созданные учетные данные администратора | ||
| - Настройте свою первую учетную запись | - Настройте свою первую учетную запись | ||
| + | |||
| + | **СОВЕТ: | ||
| ===== Дополнительные настройки ===== | ===== Дополнительные настройки ===== | ||
| Строка 206: | Строка 228: | ||
| <code bash> | <code bash> | ||
| - | # Переход в директорию Chatwoot | + | # Переход в корневую |
| cd / | cd / | ||
| # Создание бэкапа базы данных | # Создание бэкапа базы данных | ||
| - | docker-compose exec postgres pg_dump -U postgres chatwoot > chatwoot_backup.sql | + | docker-compose exec postgres pg_dump -U postgres chatwoot > chatwoot_backup_$(date +%Y%m%d_%H%M%S).sql |
| - | # Бэкап файлов загрузок | + | # Бэкап |
| - | tar -czf storage_backup.tar.gz | + | 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 | ||
| </ | </ | ||
| Строка 219: | Строка 247: | ||
| <code bash> | <code bash> | ||
| - | # Переход в директорию Chatwoot | + | # Переход в корневую |
| cd / | cd / | ||
| + | |||
| + | # Обновление репозитория | ||
| + | cd repo | ||
| + | git pull origin main | ||
| + | cd .. | ||
| # Остановка сервисов | # Остановка сервисов | ||
| docker-compose down | docker-compose down | ||
| - | # Обновление образов | + | # Пересборка |
| - | docker-compose | + | docker-compose |
| # Запуск обновленных контейнеров | # Запуск обновленных контейнеров | ||
| Строка 232: | Строка 265: | ||
| # Выполнение миграций (если необходимо) | # Выполнение миграций (если необходимо) | ||
| - | docker-compose exec chatwoot-app | + | docker-compose exec rails bundle exec rails db:migrate |
| </ | </ | ||
| Строка 238: | Строка 271: | ||
| <code bash> | <code bash> | ||
| - | # Переход в директорию Chatwoot (выполнять перед командами ниже) | + | # Переход в корневую |
| cd / | cd / | ||
| # Просмотр логов конкретного сервиса | # Просмотр логов конкретного сервиса | ||
| - | docker-compose logs -f chatwoot-app | + | docker-compose logs -f rails |
| + | docker-compose logs -f sidekiq | ||
| # Перезапуск всех сервисов | # Перезапуск всех сервисов | ||
| docker-compose restart | docker-compose restart | ||
| + | |||
| + | # Перезапуск конкретного сервиса | ||
| + | docker-compose restart rails | ||
| # Остановка всех сервисов | # Остановка всех сервисов | ||
| docker-compose down | docker-compose down | ||
| - | # Удаление контейнеров и томов (осторожно!) | + | # Пересборка образа |
| - | docker-compose down -v | + | docker-compose build --no-cache |
| + | |||
| + | # Подключение | ||
| + | docker-compose exec rails bundle exec rails console | ||
| + | |||
| + | # ОСТОРОЖНО! Полное удаление | ||
| + | # docker-compose down && sudo rm -rf postgres_data redis_data storage | ||
| </ | </ | ||
| + | |||
| + | ===== Структура папок ===== | ||
| + | |||
| + | После установки структура папок будет следующая: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | ├── docker-compose.yml | ||
| + | ├── .env # Переменные окружения | ||
| + | ├── repo/ # Репозиторий Chatwoot (клон с GitHub) | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | ├── postgres_data/ | ||
| + | ├── redis_data/ | ||
| + | └── storage/ | ||
| + | </ | ||
| + | |||
| + | **Преимущества такой структуры: | ||
| + | * Все данные хранятся локально и легко доступны для резервного копирования | ||
| + | * Простое управление файлами и конфигурацией | ||
| + | * Репозиторий изолирован в отдельной папке | ||
| + | * Легко переносить данные между серверами | ||
| ===== Устранение неполадок ===== | ===== Устранение неполадок ===== | ||
| Строка 260: | Строка 326: | ||
| - **Порт 3000 занят**: | - **Порт 3000 занят**: | ||
| - | <note tip>После успешной установки Chatwoot будет доступен | + | **ИТОГ: |
| ===== Дополнительные настройки для продакшн ===== | ===== Дополнительные настройки для продакшн ===== | ||
| - | ==== Настройка Nginx (рекомендуется) ==== | + | ==== Настройка Nginx (обязательно) ==== |
| Создайте файл конфигурации Nginx: | Создайте файл конфигурации Nginx: | ||
| Строка 273: | Строка 339: | ||
| <file nginx> | <file nginx> | ||
| + | upstream chatwoot { | ||
| + | server rails:3000; | ||
| + | } | ||
| + | |||
| server { | server { | ||
| listen 80; | listen 80; | ||
| server_name your-domain.com; | server_name your-domain.com; | ||
| + | client_max_body_size 50M; | ||
| location / { | location / { | ||
| - | proxy_pass http://localhost: | + | proxy_pass http://chatwoot; |
| proxy_set_header Host $host; | proxy_set_header Host $host; | ||
| proxy_set_header X-Real-IP $remote_addr; | proxy_set_header X-Real-IP $remote_addr; | ||
| Строка 284: | Строка 355: | ||
| proxy_set_header X-Forwarded-Proto $scheme; | proxy_set_header X-Forwarded-Proto $scheme; | ||
| | | ||
| - | # WebSocket support | + | # WebSocket support |
| proxy_http_version 1.1; | proxy_http_version 1.1; | ||
| proxy_set_header Upgrade $http_upgrade; | proxy_set_header Upgrade $http_upgrade; | ||
| proxy_set_header Connection " | proxy_set_header Connection " | ||
| + | | ||
| + | # Увеличение таймаутов | ||
| + | proxy_connect_timeout | ||
| + | proxy_send_timeout | ||
| + | proxy_read_timeout | ||
| + | send_timeout | ||
| } | } | ||
| - | } | + | |
| - | </ | + | # Обработка статических файлов |
| + | location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { | ||
| + | proxy_pass http:// | ||
| + | expires 1y; | ||
| + | add_header Cache-Control " | ||
| + | | ||
| + | }</ | ||
| + | |||
| + | **ВНИМАНИЕ: | ||
| <code bash> | <code bash> | ||
| Строка 329: | Строка 414: | ||
| sudo systemctl enable chatwoot.service | sudo systemctl enable chatwoot.service | ||
| sudo systemctl start chatwoot.service | sudo systemctl start chatwoot.service | ||
| + | |||
| + | # Проверка статуса сервиса | ||
| + | sudo systemctl status chatwoot.service | ||
| </ | </ | ||
| Строка 342: | Строка 430: | ||
| # Проверка здоровья контейнеров | # Проверка здоровья контейнеров | ||
| docker-compose ps | docker-compose ps | ||
| + | |||
| + | # Просмотр логов Rails приложения | ||
| + | docker-compose logs -f rails | ||
| + | |||
| + | # Просмотр логов Sidekiq (фоновые задачи) | ||
| + | docker-compose logs -f sidekiq | ||
| </ | </ | ||
| - | <note warning> | + | **ВАЖНЫЕ МОМЕНТЫ БЕЗОПАСНОСТИ:** |
| - | **Важные моменты безопасности:** | + | |
| * Измените пароли по умолчанию в .env файле | * Измените пароли по умолчанию в .env файле | ||
| * Используйте сильные пароли для базы данных | * Используйте сильные пароли для базы данных | ||
| Строка 351: | Строка 444: | ||
| * Регулярно обновляйте Docker образы | * Регулярно обновляйте Docker образы | ||
| * Настройте SSL/TLS для продакшн среды | * Настройте SSL/TLS для продакшн среды | ||
| - | </ | ||