vm:chatwoot:01-install

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
vm:chatwoot:01-install [2025/08/28 10:07] – ↷ Имя страницы vm:chatwoot:install изменено на vm:chatwoot:01-install adminvm:chatwoot:01-install [2025/08/28 11:58] (текущий) – [Шаг 6: Инициализация базы данных] admin
Строка 1: Строка 1:
-====== Install ======+====== Установка 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 для продакшн среды
  • vm/chatwoot/01-install.1756375636.txt.gz
  • Последнее изменение: 2025/08/28 10:07
  • admin