vm:chatwoot:01-install

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
vm:chatwoot:01-install [2025/08/28 10:07] adminvm:chatwoot:01-install [2025/08/28 11:58] (текущий) – [Шаг 6: Инициализация базы данных] admin
Строка 1: Строка 1:
-====== Установка Chatwoot в Docker на Ubuntu (продолжение) ======+====== Установка Chatwoot в Docker на Ubuntu ======
  
-===== Шаг 4: Клонирование репозитория Chatwoot =====+===== Шаг 1: Клонирование репозитория Chatwoot =====
  
 <code bash> <code bash>
Строка 13: Строка 13:
 cd /opt/chatwoot cd /opt/chatwoot
  
-# Клонирование репозитория +# Клонирование репозитория в подпапку repo 
-git clone https://github.com/chatwoot/chatwoot.git .+git clone https://github.com/chatwoot/chatwoot.git repo 
 + 
 +# Переход в репозиторий 
 +cd repo
  
 # Переход на стабильную версию (опционально) # Переход на стабильную версию (опционально)
Строка 20: Строка 23:
 </code> </code>
  
-===== Шаг 5: Настройка переменных окружения =====+===== Шаг 2: Настройка переменных окружения =====
  
 <code bash> <code bash>
-# Убедитесь, что находитесь в директории Chatwoot+# Убедитесь, что находитесь в корневой директории Chatwoot
 cd /opt/chatwoot cd /opt/chatwoot
  
-# Копирование примера конфигурации +# Копирование примера конфигурации из репозитория 
-cp .env.example .env+cp repo/.env.example .env
  
 # Редактирование файла конфигурации # Редактирование файла конфигурации
Строка 38: Строка 41:
 # Redis URL # Redis URL
 REDIS_URL=redis://redis:6379 REDIS_URL=redis://redis:6379
 +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://localhost:3000+FRONTEND_URL=http://your-domain.com
  
 # Настройки почты (опционально) # Настройки почты (опционально)
Строка 62: Строка 66:
 </file> </file>
  
-===== Шаг 6: Генерация секретного ключа =====+===== Шаг 3: Генерация секретного ключа =====
  
 <code bash> <code bash>
Строка 69: Строка 73:
 </code> </code>
  
-<note important>Скопируйте сгенерированный ключ в файл .env как значение для SECRET_KEY_BASE.</note>+**ВАЖНО:** Скопируйте сгенерированный ключ в файл .env как значение для SECRET_KEY_BASE.
  
-===== Шаг 7: Создание Docker Compose файла =====+===== Шаг 4: Создание Docker Compose файла =====
  
-Создайте файл ''docker-compose.yml'' в директории ''/opt/chatwoot'':+Создайте файл ''docker-compose.yml'' в корневой директории ''/opt/chatwoot'':
  
 <code bash> <code bash>
-# Убедитесь, что находитесь в директории Chatwoot+# Убедитесь, что находитесь в корневой директории Chatwoot
 cd /opt/chatwoot cd /opt/chatwoot
  
Строка 86: Строка 90:
  
 <file yaml docker-compose.yml> <file yaml docker-compose.yml>
-version: '3.8' 
- 
 services: services:
-  postgres+  base&base 
-    image: postgres:13 +    build
-    environment+      context./repo 
-      POSTGRES_DBchatwoot +      dockerfiledocker/Dockerfile 
-      POSTGRES_USERpostgres +    image: chatwoot/chatwoot:custom 
-      POSTGRES_PASSWORD: your_strong_password +    pull_policynever
-    volumes: +
-      - postgres_data:/var/lib/postgresql/data +
-    restart: unless-stopped +
- +
-  redis: +
-    image: redis:6-alpine +
-    volumes: +
-      - redis_data:/data +
-    restart: unless-stopped +
- +
-  chatwoot-app+
-    image: chatwoot/chatwoot:latest+
     env_file: .env     env_file: .env
-    environment+    volumes
-      - POSTGRES_HOST=postgres +      - ./storage:/app/storage 
-      - REDIS_URL=redis://redis:6379+  rails: 
 +    <<*base
     depends_on:     depends_on:
       - postgres       - postgres
       - redis       - redis
-    ports: 
-      - "3000:3000" 
-    volumes: 
-      - ./storage:/app/storage 
-    restart: unless-stopped 
- 
-  chatwoot-worker: 
-    image: chatwoot/chatwoot:latest 
-    env_file: .env 
     environment:     environment:
-      - POSTGRES_HOST=postgres +      - NODE_ENV=production 
-      - REDIS_URL=redis://redis:6379+      - RAILS_ENV=production 
 +      - INSTALLATION_ENV=docker 
 +    entrypointdocker/entrypoints/rails.sh 
 +    command: ['bundle', 'exec', 'rails', 's', '-p', '3000', '-b', '0.0.0.0'
 +    restart: always 
 +  sidekiq: 
 +    <<*base
     depends_on:     depends_on:
       - postgres       - postgres
       - redis       - redis
-    command: bundle exec sidekiq+    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:     volumes:
-      - ./storage:/app/storage +      - ./postgres_data:/var/lib/postgresql/data 
-    restartunless-stopped +    environment: 
- +      POSTGRES_DB=chatwoot 
-volumes: +      - POSTGRES_USER=postgres 
-  postgres_data+      - POSTGRES_PASSWORD=your_postgres_password 
-  redis_data:+  redis
 +    image: redis:alpine 
 +    restart: always 
 +    command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""
 +    env_file: .env 
 +    volumes: 
 +      - ./redis_data:/data
 </file> </file>
  
-===== Шаг 8Запуск контейнеров =====+**Особенности конфигурации:** 
 +  * Используется сборка из исходного кода (build) вместо готового образа 
 +  * PostgreSQL с поддержкой pgvector для AI функций 
 +  * Redis защищен паролем из переменной окружения 
 +  * Нет проброшенных портов - доступ только через Nginx 
 +  * Все данные хранятся в локальных папках 
 + 
 +===== Шаг 5Создание папок для данных и сборка контейнеров =====
  
 <code bash> <code bash>
-# Убедитесь, что находитесь в директории Chatwoot+# Убедитесь, что находитесь в корневой директории Chatwoot
 cd /opt/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
  
 # Создание и запуск контейнеров # Создание и запуск контейнеров
Строка 151: Строка 172:
 docker-compose ps docker-compose ps
  
-# Просмотр логов (опционально)+# Просмотр логов сборки и запуска (опционально)
 docker-compose logs -f docker-compose logs -f
 </code> </code>
  
-===== Шаг 9: Инициализация базы данных =====+**ВНИМАНИЕ:** Первая сборка может занять 10-15 минут, так как Docker компилирует приложение из исходного кода. Убедитесь, что у вас достаточно места на диске (минимум 5GB свободного места). 
 + 
 +===== Шаг 6: Инициализация базы данных =====
  
 <code bash> <code bash>
-# Убедитесь, что находитесь в директории Chatwoot+# Убедитесь, что находитесь в корневой директории Chatwoot
 cd /opt/chatwoot cd /opt/chatwoot
  
-# Выполнение миграций базы данных +# Выполнение миграций базы данных и заполнение начальными данными 
-docker-compose exec chatwoot-app bundle exec rails db:create +docker-compose run --rm rails bundle exec rails db:chatwoot_prepare
-docker-compose exec chatwoot-app bundle exec rails db:migrate +
- +
-# Заполнение начальными данными +
-docker-compose exec chatwoot-app bundle exec rails db:seed+
 </code> </code>
  
-===== Шаг 10: Создание администратора =====+===== Шаг 7: Создание администратора =====
  
 <code bash> <code bash>
-# Убедитесь, что находитесь в директории Chatwoot+# Убедитесь, что находитесь в корневой директории Chatwoot
 cd /opt/chatwoot cd /opt/chatwoot
  
 # Создание первого пользователя-администратора # Создание первого пользователя-администратора
-docker-compose exec chatwoot-app bundle exec rails runner '+docker-compose exec rails bundle exec rails runner '
 u = User.new( u = User.new(
   email: "admin@example.com",   email: "admin@example.com",
Строка 191: Строка 210:
 </code> </code>
  
-===== Шаг 11: Проверка установки =====+===== Шаг 8: Проверка установки =====
  
-  - Откройте браузер и перейдите на ''http://your-server-ip:3000''+  - Настройте Nginx для проксирования запросов к контейнеру 
 +  - Откройте браузер и перейдите на ваш домен
   - Войдите используя созданные учетные данные администратора   - Войдите используя созданные учетные данные администратора
   - Настройте свою первую учетную запись   - Настройте свою первую учетную запись
 +
 +**СОВЕТ:** Поскольку порты не проброшены наружу, доступ к Chatwoot возможен только через настроенный Nginx proxy.
  
 ===== Дополнительные настройки ===== ===== Дополнительные настройки =====
Строка 206: Строка 228:
  
 <code bash> <code bash>
-# Переход в директорию Chatwoot+# Переход в корневую директорию Chatwoot
 cd /opt/chatwoot cd /opt/chatwoot
  
 # Создание бэкапа базы данных # Создание бэкапа базы данных
-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
  
-# Бэкап файлов загрузок +# Бэкап всех данных (база данных, redis, файлы загрузок) 
-tar -czf storage_backup.tar.gz ./storage+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
 </code> </code>
  
Строка 219: Строка 247:
  
 <code bash> <code bash>
-# Переход в директорию Chatwoot+# Переход в корневую директорию Chatwoot
 cd /opt/chatwoot cd /opt/chatwoot
 +
 +# Обновление репозитория
 +cd repo
 +git pull origin main
 +cd ..
  
 # Остановка сервисов # Остановка сервисов
 docker-compose down docker-compose down
  
-Обновление образов +Пересборка образа с новыми изменениями 
-docker-compose pull+docker-compose build --no-cache
  
 # Запуск обновленных контейнеров # Запуск обновленных контейнеров
Строка 232: Строка 265:
  
 # Выполнение миграций (если необходимо) # Выполнение миграций (если необходимо)
-docker-compose exec chatwoot-app bundle exec rails db:migrate+docker-compose exec rails bundle exec rails db:migrate
 </code> </code>
  
Строка 238: Строка 271:
  
 <code bash> <code bash>
-# Переход в директорию Chatwoot (выполнять перед командами ниже)+# Переход в корневую директорию Chatwoot (выполнять перед командами ниже)
 cd /opt/chatwoot cd /opt/chatwoot
  
 # Просмотр логов конкретного сервиса # Просмотр логов конкретного сервиса
-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 
 + 
 +# Подключение к Rails консоли 
 +docker-compose exec rails bundle exec rails console 
 + 
 +# ОСТОРОЖНО! Полное удаление всех данных 
 +docker-compose down && sudo rm -rf postgres_data redis_data storage
 </code> </code>
 +
 +===== Структура папок =====
 +
 +После установки структура папок будет следующая:
 +
 +<file>
 +/opt/chatwoot/
 +├── docker-compose.yml          # Конфигурация Docker Compose
 +├── .env                       # Переменные окружения
 +├── repo/                      # Репозиторий Chatwoot (клон с GitHub)
 +│   ├── .env.example
 +│   ├── Gemfile
 +│   └── ... (остальные файлы репозитория)
 +├── postgres_data/             # Данные PostgreSQL
 +├── redis_data/                # Данные Redis
 +└── storage/                   # Файлы загрузок пользователей
 +</file>
 +
 +**Преимущества такой структуры:**
 +  * Все данные хранятся локально и легко доступны для резервного копирования
 +  * Простое управление файлами и конфигурацией
 +  * Репозиторий изолирован в отдельной папке
 +  * Легко переносить данные между серверами
  
 ===== Устранение неполадок ===== ===== Устранение неполадок =====
Строка 260: Строка 326:
   - **Порт 3000 занят**: Измените порт в docker-compose.yml на свободный   - **Порт 3000 занят**: Измените порт в docker-compose.yml на свободный
  
-<note tip>После успешной установки Chatwoot будет доступен по адресу http://localhost:3000 (или IP-адресу вашего сервера)</note>+**ИТОГ:** После успешной установки Chatwoot будет доступен через настроенный домен с Nginx proxy.
  
 ===== Дополнительные настройки для продакшн ===== ===== Дополнительные настройки для продакшн =====
  
-==== Настройка 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:3000;+        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 для real-time функций
         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 "upgrade";         proxy_set_header Connection "upgrade";
 +        
 +        # Увеличение таймаутов
 +        proxy_connect_timeout       300;
 +        proxy_send_timeout          300;
 +        proxy_read_timeout          300;
 +        send_timeout                300;
     }     }
-+ 
-</file>+    # Обработка статических файлов 
 +    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { 
 +        proxy_pass http://chatwoot; 
 +        expires 1y; 
 +        add_header Cache-Control "public, immutable"; 
 +    
 +}</file> 
 + 
 +**ВНИМАНИЕ:** Поскольку контейнеры работают без проброшенных портов, Nginx должен находиться в той же Docker сети или использовать внутренние имена контейнеров.
  
 <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
 </code> </code>
  
Строка 342: Строка 430:
 # Проверка здоровья контейнеров # Проверка здоровья контейнеров
 docker-compose ps docker-compose ps
 +
 +# Просмотр логов Rails приложения
 +docker-compose logs -f rails
 +
 +# Просмотр логов Sidekiq (фоновые задачи)
 +docker-compose logs -f sidekiq
 </code> </code>
  
-<note warning> +**ВАЖНЫЕ МОМЕНТЫ БЕЗОПАСНОСТИ:**
-**Важные моменты безопасности:**+
   * Измените пароли по умолчанию в .env файле   * Измените пароли по умолчанию в .env файле
   * Используйте сильные пароли для базы данных   * Используйте сильные пароли для базы данных
Строка 351: Строка 444:
   * Регулярно обновляйте Docker образы   * Регулярно обновляйте Docker образы
   * Настройте SSL/TLS для продакшн среды   * Настройте SSL/TLS для продакшн среды
-</note> 
  • vm/chatwoot/01-install.1756375655.txt.gz
  • Последнее изменение: 2025/08/28 10:07
  • admin