vm:chatwoot:01-install

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
vm:chatwoot:01-install [2025/08/28 10:07] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1vm:chatwoot:01-install [2025/08/28 11:58] (текущий) – [Шаг 6: Инициализация базы данных] admin
Строка 1: Строка 1:
 +====== Установка Chatwoot в Docker на Ubuntu ======
  
 +===== Шаг 1: Клонирование репозитория Chatwoot =====
 +
 +<code bash>
 +# Создание директории для 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
 +</code>
 +
 +===== Шаг 2: Настройка переменных окружения =====
 +
 +<code bash>
 +# Убедитесь, что находитесь в корневой директории Chatwoot
 +cd /opt/chatwoot
 +
 +# Копирование примера конфигурации из репозитория
 +cp repo/.env.example .env
 +
 +# Редактирование файла конфигурации
 +nano .env
 +</code>
 +
 +==== Основные параметры в файле .env: ====
 +
 +<file>
 +# 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
 +</file>
 +
 +===== Шаг 3: Генерация секретного ключа =====
 +
 +<code bash>
 +# Генерация SECRET_KEY_BASE
 +openssl rand -hex 64
 +</code>
 +
 +**ВАЖНО:** Скопируйте сгенерированный ключ в файл .env как значение для SECRET_KEY_BASE.
 +
 +===== Шаг 4: Создание Docker Compose файла =====
 +
 +Создайте файл ''docker-compose.yml'' в корневой директории ''/opt/chatwoot'':
 +
 +<code bash>
 +# Убедитесь, что находитесь в корневой директории Chatwoot
 +cd /opt/chatwoot
 +
 +# Создайте файл docker-compose.yml
 +nano docker-compose.yml
 +</code>
 +
 +**Содержимое файла:**
 +
 +<file yaml 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
 +</file>
 +
 +**Особенности конфигурации:**
 +  * Используется сборка из исходного кода (build) вместо готового образа
 +  * PostgreSQL с поддержкой pgvector для AI функций
 +  * Redis защищен паролем из переменной окружения
 +  * Нет проброшенных портов - доступ только через Nginx
 +  * Все данные хранятся в локальных папках
 +
 +===== Шаг 5: Создание папок для данных и сборка контейнеров =====
 +
 +<code bash>
 +# Убедитесь, что находитесь в корневой директории 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
 +</code>
 +
 +**ВНИМАНИЕ:** Первая сборка может занять 10-15 минут, так как Docker компилирует приложение из исходного кода. Убедитесь, что у вас достаточно места на диске (минимум 5GB свободного места).
 +
 +===== Шаг 6: Инициализация базы данных =====
 +
 +<code bash>
 +# Убедитесь, что находитесь в корневой директории Chatwoot
 +cd /opt/chatwoot
 +
 +# Выполнение миграций базы данных и заполнение начальными данными
 +docker-compose run --rm rails bundle exec rails db:chatwoot_prepare
 +</code>
 +
 +===== Шаг 7: Создание администратора =====
 +
 +<code bash>
 +# Убедитесь, что находитесь в корневой директории 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)
 +'
 +</code>
 +
 +===== Шаг 8: Проверка установки =====
 +
 +  - Настройте Nginx для проксирования запросов к контейнеру
 +  - Откройте браузер и перейдите на ваш домен
 +  - Войдите используя созданные учетные данные администратора
 +  - Настройте свою первую учетную запись
 +
 +**СОВЕТ:** Поскольку порты не проброшены наружу, доступ к Chatwoot возможен только через настроенный Nginx proxy.
 +
 +===== Дополнительные настройки =====
 +
 +==== Настройка SSL (опционально) ====
 +
 +Для продакшн использования рекомендуется настроить SSL через Nginx или Traefik.
 +
 +==== Резервное копирование ====
 +
 +<code bash>
 +# Переход в корневую директорию 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
 +</code>
 +
 +==== Обновление ====
 +
 +<code bash>
 +# Переход в корневую директорию 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
 +</code>
 +
 +===== Полезные команды =====
 +
 +<code bash>
 +# Переход в корневую директорию 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
 +</code>
 +
 +===== Структура папок =====
 +
 +После установки структура папок будет следующая:
 +
 +<file>
 +/opt/chatwoot/
 +├── docker-compose.yml          # Конфигурация Docker Compose
 +├── .env                       # Переменные окружения
 +├── repo/                      # Репозиторий Chatwoot (клон с GitHub)
 +│   ├── .env.example
 +│   ├── Gemfile
 +│   └── ... (остальные файлы репозитория)
 +├── postgres_data/             # Данные PostgreSQL
 +├── redis_data/                # Данные Redis
 +└── storage/                   # Файлы загрузок пользователей
 +</file>
 +
 +**Преимущества такой структуры:**
 +  * Все данные хранятся локально и легко доступны для резервного копирования
 +  * Простое управление файлами и конфигурацией
 +  * Репозиторий изолирован в отдельной папке
 +  * Легко переносить данные между серверами
 +
 +===== Устранение неполадок =====
 +
 +  - **Проблемы с подключением к базе данных**: Проверьте, что контейнер postgres запущен
 +  - **Проблемы с памятью**: Убедитесь, что у вас достаточно RAM (минимум 2GB)
 +  - **Порт 3000 занят**: Измените порт в docker-compose.yml на свободный
 +
 +**ИТОГ:** После успешной установки Chatwoot будет доступен через настроенный домен с Nginx proxy.
 +
 +===== Дополнительные настройки для продакшн =====
 +
 +==== Настройка Nginx (обязательно) ====
 +
 +Создайте файл конфигурации Nginx:
 +
 +<code bash>
 +sudo nano /etc/nginx/sites-available/chatwoot
 +</code>
 +
 +<file nginx>
 +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";
 +    }
 +}</file>
 +
 +**ВНИМАНИЕ:** Поскольку контейнеры работают без проброшенных портов, Nginx должен находиться в той же Docker сети или использовать внутренние имена контейнеров.
 +
 +<code bash>
 +# Активация конфигурации
 +sudo ln -s /etc/nginx/sites-available/chatwoot /etc/nginx/sites-enabled/
 +sudo nginx -t
 +sudo systemctl restart nginx
 +</code>
 +
 +==== Настройка автозапуска ====
 +
 +Создайте systemd service:
 +
 +<code bash>
 +sudo nano /etc/systemd/system/chatwoot.service
 +</code>
 +
 +<file>
 +[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
 +</file>
 +
 +<code bash>
 +# Активация сервиса
 +sudo systemctl enable chatwoot.service
 +sudo systemctl start chatwoot.service
 +
 +# Проверка статуса сервиса
 +sudo systemctl status chatwoot.service
 +</code>
 +
 +==== Мониторинг и логи ====
 +
 +<code bash>
 +# Просмотр системных логов Chatwoot
 +sudo journalctl -u chatwoot.service -f
 +
 +# Мониторинг ресурсов контейнеров
 +docker stats
 +
 +# Проверка здоровья контейнеров
 +docker-compose ps
 +
 +# Просмотр логов Rails приложения
 +docker-compose logs -f rails
 +
 +# Просмотр логов Sidekiq (фоновые задачи)
 +docker-compose logs -f sidekiq
 +</code>
 +
 +**ВАЖНЫЕ МОМЕНТЫ БЕЗОПАСНОСТИ:**
 +  * Измените пароли по умолчанию в .env файле
 +  * Используйте сильные пароли для базы данных
 +  * Настройте firewall (ufw) для ограничения доступа к портам
 +  * Регулярно обновляйте Docker образы
 +  * Настройте SSL/TLS для продакшн среды