vm:chatwoot:01-install

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
vm:chatwoot:01-install [2025/08/28 10:29] 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>
Строка 23: Строка 23:
 </code> </code>
  
-===== Шаг 5: Настройка переменных окружения =====+===== Шаг 2: Настройка переменных окружения =====
  
 <code bash> <code bash>
Строка 41: Строка 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
  
Строка 55: Строка 56:
  
 # Frontend URL # Frontend URL
-FRONTEND_URL=http://localhost:3000+FRONTEND_URL=http://your-domain.com
  
 # Настройки почты (опционально) # Настройки почты (опционально)
Строка 65: Строка 66:
 </file> </file>
  
-===== Шаг 6: Генерация секретного ключа =====+===== Шаг 3: Генерация секретного ключа =====
  
 <code bash> <code bash>
Строка 72: Строка 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'':
Строка 89: Строка 90:
  
 <file yaml docker-compose.yml> <file yaml docker-compose.yml>
-version: '3.8' 
- 
 services: services:
-  postgres+  base&base 
-    imagepostgres:13 +    build
-    environment+      context./repo 
-      POSTGRES_DB: chatwoot +      dockerfile: docker/Dockerfile 
-      POSTGRES_USERpostgres +    image: chatwoot/chatwoot:custom 
-      POSTGRES_PASSWORDyour_strong_password+    pull_policynever 
 +    env_file.env
     volumes:     volumes:
-      - ./postgres_data:/var/lib/postgresql/data +      - ./storage:/app/storage 
-    restart: unless-stopped +  rails
- +    <<*base
-  redis+
-    image: redis:6-alpine +
-    volumes: +
-      - ./redis_data:/data +
-    restart: unless-stopped +
- +
-  chatwoot-app: +
-    image: chatwoot/chatwoot:latest +
-    env_file: .env +
-    environment: +
-      - POSTGRES_HOST=postgres +
-      - REDIS_URL=redis://redis:6379+
     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 
-    restart: unless-stopped+    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
 </file> </file>
  
-<note important>Обратите внимание: теперь все данные (postgres_data, redis_data, storage) будут храниться в локальных папках внутри /opt/chatwoot, а не в Docker volumes.</note>+**Особенности конфигурации:** 
 +  * Используется сборка из исходного кода (build) вместо готового образа 
 +  * PostgreSQL с поддержкой pgvector для AI функций 
 +  * Redis защищен паролем из переменной окружения 
 +  * Нет проброшенных портов - доступ только через Nginx 
 +  * Все данные хранятся в локальных папках
  
-===== Шаг 8: Создание папок для данных и запуск контейнеров =====+===== Шаг 5: Создание папок для данных и сборка контейнеров =====
  
 <code bash> <code bash>
Строка 151: Строка 159:
 # Установка правильных прав доступа # Установка правильных прав доступа
 sudo chown -R $USER:$USER 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
  
 # Создание и запуск контейнеров # Создание и запуск контейнеров
Строка 158: Строка 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>
Строка 168: Строка 184:
 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>
Строка 183: Строка 195:
  
 # Создание первого пользователя-администратора # Создание первого пользователя-администратора
-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",
Строка 198: Строка 210:
 </code> </code>
  
-===== Шаг 11: Проверка установки =====+===== Шаг 8: Проверка установки =====
  
-  - Откройте браузер и перейдите на ''http://your-server-ip:3000''+  - Настройте Nginx для проксирования запросов к контейнеру 
 +  - Откройте браузер и перейдите на ваш домен
   - Войдите используя созданные учетные данные администратора   - Войдите используя созданные учетные данные администратора
   - Настройте свою первую учетную запись   - Настройте свою первую учетную запись
 +
 +**СОВЕТ:** Поскольку порты не проброшены наружу, доступ к Chatwoot возможен только через настроенный Nginx proxy.
  
 ===== Дополнительные настройки ===== ===== Дополнительные настройки =====
Строка 243: Строка 258:
 docker-compose down docker-compose down
  
-Обновление образов +Пересборка образа с новыми изменениями 
-docker-compose pull+docker-compose build --no-cache
  
 # Запуск обновленных контейнеров # Запуск обновленных контейнеров
Строка 250: Строка 265:
  
 # Выполнение миграций (если необходимо) # Выполнение миграций (если необходимо)
-docker-compose exec chatwoot-app bundle exec rails db:migrate+docker-compose exec rails bundle exec rails db:migrate
 </code> </code>
  
Строка 260: Строка 275:
  
 # Просмотр логов конкретного сервиса # Просмотр логов конкретного сервиса
-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+docker-compose build --no-cache 
 + 
 +# Подключение к Rails консоли 
 +docker-compose exec rails bundle exec rails console
  
 # ОСТОРОЖНО! Полное удаление всех данных # ОСТОРОЖНО! Полное удаление всех данных
Строка 292: Строка 314:
 </file> </file>
  
-<note tip> 
 **Преимущества такой структуры:** **Преимущества такой структуры:**
   * Все данные хранятся локально и легко доступны для резервного копирования   * Все данные хранятся локально и легко доступны для резервного копирования
Строка 298: Строка 319:
   * Репозиторий изолирован в отдельной папке   * Репозиторий изолирован в отдельной папке
   * Легко переносить данные между серверами   * Легко переносить данные между серверами
-</note> 
  
 ===== Устранение неполадок ===== ===== Устранение неполадок =====
Строка 306: Строка 326:
   - **Порт 3000 занят**: Измените порт в docker-compose.yml на свободный   - **Порт 3000 занят**: Измените порт в docker-compose.yml на свободный
  
-<note tip>После успешной установки Chatwoot будет доступен по адресу http://localhost:3000 (или IP-адресу вашего сервера)</note>+**ИТОГ:** После успешной установки Chatwoot будет доступен через настроенный домен с Nginx proxy.
  
 ===== Дополнительные настройки для продакшн ===== ===== Дополнительные настройки для продакшн =====
  
-==== Настройка Nginx (рекомендуется) ====+==== Настройка Nginx (обязательно) ====
  
 Создайте файл конфигурации Nginx: Создайте файл конфигурации Nginx:
Строка 319: Строка 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;
Строка 330: Строка 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>
Строка 391: Строка 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 файле
   * Используйте сильные пароли для базы данных   * Используйте сильные пароли для базы данных
Строка 400: Строка 444:
   * Регулярно обновляйте Docker образы   * Регулярно обновляйте Docker образы
   * Настройте SSL/TLS для продакшн среды   * Настройте SSL/TLS для продакшн среды
-</note> 
  • vm/chatwoot/01-install.1756376941.txt.gz
  • Последнее изменение: 2025/08/28 10:29
  • admin