Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| vm:chatwoot:01-install [2025/08/28 10:07] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | vm:chatwoot:01-install [2025/08/28 11:58] (текущий) – [Шаг 6: Инициализация базы данных] admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Установка Chatwoot в Docker на Ubuntu ====== | ||
| + | ===== Шаг 1: Клонирование репозитория Chatwoot ===== | ||
| + | |||
| + | <code bash> | ||
| + | # Создание директории для Chatwoot в /opt | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | # Изменение владельца папки на текущего пользователя | ||
| + | sudo chown $USER:$USER / | ||
| + | |||
| + | # Переход в созданную директорию | ||
| + | cd / | ||
| + | |||
| + | # Клонирование репозитория в подпапку repo | ||
| + | git clone https:// | ||
| + | |||
| + | # Переход в репозиторий | ||
| + | cd repo | ||
| + | |||
| + | # Переход на стабильную версию (опционально) | ||
| + | git checkout main | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 2: Настройка переменных окружения ===== | ||
| + | |||
| + | <code bash> | ||
| + | # Убедитесь, | ||
| + | cd / | ||
| + | |||
| + | # Копирование примера конфигурации из репозитория | ||
| + | cp repo/ | ||
| + | |||
| + | # Редактирование файла конфигурации | ||
| + | nano .env | ||
| + | </ | ||
| + | |||
| + | ==== Основные параметры в файле .env: ==== | ||
| + | |||
| + | < | ||
| + | # Redis URL | ||
| + | REDIS_URL=redis:// | ||
| + | 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:// | ||
| + | |||
| + | # Настройки почты (опционально) | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 3: Генерация секретного ключа ===== | ||
| + | |||
| + | <code bash> | ||
| + | # Генерация SECRET_KEY_BASE | ||
| + | openssl rand -hex 64 | ||
| + | </ | ||
| + | |||
| + | **ВАЖНО: | ||
| + | |||
| + | ===== Шаг 4: Создание Docker Compose файла ===== | ||
| + | |||
| + | Создайте файл '' | ||
| + | |||
| + | <code bash> | ||
| + | # Убедитесь, | ||
| + | cd / | ||
| + | |||
| + | # Создайте файл docker-compose.yml | ||
| + | nano docker-compose.yml | ||
| + | </ | ||
| + | |||
| + | **Содержимое файла: | ||
| + | |||
| + | <file yaml docker-compose.yml> | ||
| + | services: | ||
| + | base: &base | ||
| + | build: | ||
| + | context: ./repo | ||
| + | dockerfile: docker/ | ||
| + | image: chatwoot/ | ||
| + | pull_policy: | ||
| + | env_file: .env | ||
| + | volumes: | ||
| + | - ./ | ||
| + | rails: | ||
| + | <<: *base | ||
| + | depends_on: | ||
| + | - postgres | ||
| + | - redis | ||
| + | environment: | ||
| + | - NODE_ENV=production | ||
| + | - RAILS_ENV=production | ||
| + | - INSTALLATION_ENV=docker | ||
| + | entrypoint: docker/ | ||
| + | command: [' | ||
| + | restart: always | ||
| + | sidekiq: | ||
| + | <<: *base | ||
| + | depends_on: | ||
| + | - postgres | ||
| + | - redis | ||
| + | environment: | ||
| + | - NODE_ENV=production | ||
| + | - RAILS_ENV=production | ||
| + | - INSTALLATION_ENV=docker | ||
| + | command: [' | ||
| + | restart: always | ||
| + | postgres: | ||
| + | image: pgvector/ | ||
| + | restart: always | ||
| + | volumes: | ||
| + | - ./ | ||
| + | environment: | ||
| + | - POSTGRES_DB=chatwoot | ||
| + | - POSTGRES_USER=postgres | ||
| + | - POSTGRES_PASSWORD=your_postgres_password | ||
| + | redis: | ||
| + | image: redis: | ||
| + | restart: always | ||
| + | command: [" | ||
| + | env_file: .env | ||
| + | volumes: | ||
| + | - ./ | ||
| + | </ | ||
| + | |||
| + | **Особенности конфигурации: | ||
| + | * Используется сборка из исходного кода (build) вместо готового образа | ||
| + | * PostgreSQL с поддержкой pgvector для AI функций | ||
| + | * Redis защищен паролем из переменной окружения | ||
| + | * Нет проброшенных портов - доступ только через Nginx | ||
| + | * Все данные хранятся в локальных папках | ||
| + | |||
| + | ===== Шаг 5: Создание папок для данных и сборка контейнеров ===== | ||
| + | |||
| + | <code bash> | ||
| + | # Убедитесь, | ||
| + | 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: | ||
| + | |||
| + | # Создание и запуск контейнеров | ||
| + | docker-compose up -d | ||
| + | |||
| + | # Проверка статуса контейнеров | ||
| + | docker-compose ps | ||
| + | |||
| + | # Просмотр логов сборки и запуска (опционально) | ||
| + | docker-compose logs -f | ||
| + | </ | ||
| + | |||
| + | **ВНИМАНИЕ: | ||
| + | |||
| + | ===== Шаг 6: Инициализация базы данных ===== | ||
| + | |||
| + | <code bash> | ||
| + | # Убедитесь, | ||
| + | cd / | ||
| + | |||
| + | # Выполнение миграций базы данных и заполнение начальными данными | ||
| + | docker-compose run --rm rails bundle exec rails db: | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 7: Создание администратора ===== | ||
| + | |||
| + | <code bash> | ||
| + | # Убедитесь, | ||
| + | cd / | ||
| + | |||
| + | # Создание первого пользователя-администратора | ||
| + | docker-compose exec rails bundle exec rails runner ' | ||
| + | u = User.new( | ||
| + | email: " | ||
| + | password: " | ||
| + | password_confirmation: | ||
| + | name: "Admin User" | ||
| + | ) | ||
| + | u.skip_confirmation! | ||
| + | u.save! | ||
| + | |||
| + | account = u.accounts.create!(name: | ||
| + | AccountUser.create!(user: | ||
| + | ' | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 8: Проверка установки ===== | ||
| + | |||
| + | - Настройте Nginx для проксирования запросов к контейнеру | ||
| + | - Откройте браузер и перейдите на ваш домен | ||
| + | - Войдите используя созданные учетные данные администратора | ||
| + | - Настройте свою первую учетную запись | ||
| + | |||
| + | **СОВЕТ: | ||
| + | |||
| + | ===== Дополнительные настройки ===== | ||
| + | |||
| + | ==== Настройка SSL (опционально) ==== | ||
| + | |||
| + | Для продакшн использования рекомендуется настроить SSL через Nginx или Traefik. | ||
| + | |||
| + | ==== Резервное копирование ==== | ||
| + | |||
| + | <code bash> | ||
| + | # Переход в корневую директорию Chatwoot | ||
| + | cd / | ||
| + | |||
| + | # Создание бэкапа базы данных | ||
| + | docker-compose exec postgres pg_dump -U postgres chatwoot > chatwoot_backup_$(date +%Y%m%d_%H%M%S).sql | ||
| + | |||
| + | # Бэкап всех данных (база данных, | ||
| + | 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 bash> | ||
| + | # Переход в корневую директорию Chatwoot | ||
| + | cd / | ||
| + | |||
| + | # Обновление репозитория | ||
| + | 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 bash> | ||
| + | # Переход в корневую директорию Chatwoot (выполнять перед командами ниже) | ||
| + | cd / | ||
| + | |||
| + | # Просмотр логов конкретного сервиса | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | ===== Структура папок ===== | ||
| + | |||
| + | После установки структура папок будет следующая: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | ├── docker-compose.yml | ||
| + | ├── .env # Переменные окружения | ||
| + | ├── repo/ # Репозиторий Chatwoot (клон с GitHub) | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | ├── postgres_data/ | ||
| + | ├── redis_data/ | ||
| + | └── storage/ | ||
| + | </ | ||
| + | |||
| + | **Преимущества такой структуры: | ||
| + | * Все данные хранятся локально и легко доступны для резервного копирования | ||
| + | * Простое управление файлами и конфигурацией | ||
| + | * Репозиторий изолирован в отдельной папке | ||
| + | * Легко переносить данные между серверами | ||
| + | |||
| + | ===== Устранение неполадок ===== | ||
| + | |||
| + | - **Проблемы с подключением к базе данных**: | ||
| + | - **Проблемы с памятью**: | ||
| + | - **Порт 3000 занят**: | ||
| + | |||
| + | **ИТОГ: | ||
| + | |||
| + | ===== Дополнительные настройки для продакшн ===== | ||
| + | |||
| + | ==== Настройка Nginx (обязательно) ==== | ||
| + | |||
| + | Создайте файл конфигурации Nginx: | ||
| + | |||
| + | <code bash> | ||
| + | sudo nano / | ||
| + | </ | ||
| + | |||
| + | <file nginx> | ||
| + | upstream chatwoot { | ||
| + | server rails:3000; | ||
| + | } | ||
| + | |||
| + | server { | ||
| + | listen 80; | ||
| + | server_name your-domain.com; | ||
| + | client_max_body_size 50M; | ||
| + | |||
| + | location / { | ||
| + | proxy_pass http:// | ||
| + | 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 " | ||
| + | | ||
| + | # Увеличение таймаутов | ||
| + | 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> | ||
| + | # Активация конфигурации | ||
| + | sudo ln -s / | ||
| + | sudo nginx -t | ||
| + | sudo systemctl restart nginx | ||
| + | </ | ||
| + | |||
| + | ==== Настройка автозапуска ==== | ||
| + | |||
| + | Создайте systemd service: | ||
| + | |||
| + | <code bash> | ||
| + | sudo nano / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | [Unit] | ||
| + | Description=Chatwoot | ||
| + | Requires=docker.service | ||
| + | After=docker.service | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | RemainAfterExit=yes | ||
| + | WorkingDirectory=/ | ||
| + | ExecStart=/ | ||
| + | ExecStop=/ | ||
| + | TimeoutStartSec=0 | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | # Активация сервиса | ||
| + | sudo systemctl enable chatwoot.service | ||
| + | sudo systemctl start chatwoot.service | ||
| + | |||
| + | # Проверка статуса сервиса | ||
| + | sudo systemctl status chatwoot.service | ||
| + | </ | ||
| + | |||
| + | ==== Мониторинг и логи ==== | ||
| + | |||
| + | <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 | ||
| + | </ | ||
| + | |||
| + | **ВАЖНЫЕ МОМЕНТЫ БЕЗОПАСНОСТИ: | ||
| + | * Измените пароли по умолчанию в .env файле | ||
| + | * Используйте сильные пароли для базы данных | ||
| + | * Настройте firewall (ufw) для ограничения доступа к портам | ||
| + | * Регулярно обновляйте Docker образы | ||
| + | * Настройте SSL/TLS для продакшн среды | ||