Показать страницуИстория страницыСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Настройка московского времени в Chatwoot ====== ===== Проблема ===== По умолчанию Chatwoot отображает время в UTC (GMT+0). Для корректной работы с пользователями в московском часовом поясе необходимо настроить время на MSK (GMT+3). <note warning>⚠️ **Важно**: Без правильной настройки файлы конфигурации не сохраняются при перезапуске контейнеров!</note> ===== Структура проекта ===== <code> /opt/chatwoot/ ├── chatwoot_dock/ ← Docker-compose проект │ ├── docker-compose.yml ← Конфигурация контейнеров │ ├── .env ← Переменные окружения │ └── config/ │ └── initializers/ │ └── timezone.rb ← Настройки времени Rails └── chatwoot_data/ ← Данные (вне Docker проекта) ├── postgres_data/ ← База данных ├── storage/ ← Файлы и медиа └── redis_data/ ← Кэш Redis </code> ===== Пошаговая инструкция ===== ==== Шаг 1: Настройка системного времени ==== <code bash> # Установка московского времени на сервере sudo timedatectl set-timezone Europe/Moscow # Проверка текущего времени timedatectl status date </code> ==== Шаг 2: Создание постоянной конфигурации ==== <code bash> # Переход в директорию проекта cd /opt/chatwoot/chatwoot_dock # Создание папки для конфигурации mkdir -p config/initializers # Создание файла настроек времени cat > config/initializers/timezone.rb << 'EOF' # frozen_string_literal: true Rails.application.configure do config.time_zone = 'Europe/Moscow' end Rails.application.config.after_initialize do Time.zone = 'Europe/Moscow' end EOF </code> ==== Шаг 3: Обновление переменных окружения ==== Добавьте в файл **`.env`** следующие переменные: <code bash> # Настройки времени TZ=Europe/Moscow RAILS_TIMEZONE=Europe/Moscow TIME_ZONE=Europe/Moscow DEFAULT_TIMEZONE=Europe/Moscow TIMEZONE=Europe/Moscow # Локаль (опционально) DEFAULT_LOCALE=ru </code> ==== Шаг 4: Обновление docker-compose.yml ==== В секции **services → base → volumes** добавьте строки для синхронизации времени: <code yaml> services: base: &base # ... другие настройки ... volumes: - /opt/chatwoot/chatwoot_data/storage:/app/storage # Синхронизация времени с хост-системой - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro # Постоянное сохранение конфигурации времени - /opt/chatwoot/chatwoot_dock/config/initializers:/app/config/initializers environment: # Установка московского времени - TZ=Europe/Moscow - RAILS_TIMEZONE=Europe/Moscow - TIME_ZONE=Europe/Moscow - DEFAULT_TIMEZONE=Europe/Moscow - TIMEZONE=Europe/Moscow </code> <note important>📌 **Ключевой момент**: Volume `/opt/chatwoot/chatwoot_dock/config/initializers:/app/config/initializers` обеспечивает сохранение настроек при перезапуске контейнеров.</note> В секциях **rails**, **sidekiq** добавьте аналогичные переменные окружения: <code yaml> rails: <<: *base # ... другие настройки ... environment: # ... другие переменные ... - TZ=Europe/Moscow - RAILS_TIMEZONE=Europe/Moscow - TIME_ZONE=Europe/Moscow - DEFAULT_TIMEZONE=Europe/Moscow - TIMEZONE=Europe/Moscow sidekiq: <<: *base # ... другие настройки ... environment: # ... другие переменные ... - TZ=Europe/Moscow - RAILS_TIMEZONE=Europe/Moscow - TIME_ZONE=Europe/Moscow - DEFAULT_TIMEZONE=Europe/Moscow - TIMEZONE=Europe/Moscow </code> Для **postgres** и **redis**: <code yaml> postgres: # ... другие настройки ... volumes: # ... другие volumes ... - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro environment: # ... другие переменные ... - TZ=Europe/Moscow - PGTZ=Europe/Moscow redis: # ... другие настройки ... volumes: # ... другие volumes ... - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro environment: - TZ=Europe/Moscow </code> ==== Шаг 5: Применение изменений ==== <code bash> # Остановка контейнеров docker-compose down # Запуск с новыми настройками docker-compose up -d # Ожидание полного запуска sleep 30 </code> ==== Шаг 6: Проверка результата ==== <code bash> # Проверка текущего времени в Rails docker exec chatwoot_rails bundle exec rails runner "puts Time.current" # Проверка временной зоны docker exec chatwoot_rails bundle exec rails runner "puts Time.zone" # Проверка конфигурации Rails docker exec chatwoot_rails bundle exec rails runner "puts Rails.application.config.time_zone" </code> <note tip>✅ **Ожидаемый результат**: * Время должно отображаться с **+0300** (MSK) * Временная зона: **(GMT+03:00) Europe/Moscow** * Конфигурация: **Europe/Moscow** </note> ===== Проверка через Rails консоль ===== <code bash> # Открытие Rails консоли docker exec -it chatwoot_rails bundle exec rails c # В консоли выполните: # Time.current # Time.zone.name # Rails.application.config.time_zone # exit </code> ===== Постоянное сохранение ===== <note success>🎯 **Преимущества данного подхода**: * ✅ Настройки сохраняются после перезапуска контейнеров * ✅ Настройки сохраняются после пересборки образов * ✅ Настройки сохраняются после обновления Chatwoot * ✅ Настройки сохраняются после перезагрузки сервера </note> === Где хранятся настройки === ^ Тип настройки ^ Расположение ^ Описание ^ | Конфигурация времени Rails | `/opt/chatwoot/chatwoot_dock/config/initializers/timezone.rb` | Инициализатор Rails на хосте | | Переменные окружения | `/opt/chatwoot/chatwoot_dock/docker-compose.yml` | Конфигурация контейнеров | | Дополнительные переменные | `/opt/chatwoot/chatwoot_dock/.env` | Переменные окружения | | База данных PostgreSQL | `/opt/chatwoot/chatwoot_data/postgres_data/` | Данные БД | | Файлы и медиа | `/opt/chatwoot/chatwoot_data/storage/` | Загрузки пользователей | | Кэш Redis | `/opt/chatwoot/chatwoot_data/redis_data/` | Временные данные | ===== Тестирование постоянности ===== Для проверки что настройки действительно сохраняются: <code bash> cd /opt/chatwoot/chatwoot_dock # Полное пересоздание контейнеров docker-compose down docker-compose build --no-cache docker-compose up -d # Ожидание запуска sleep 30 # Проверка времени (должно быть +0300) docker exec chatwoot_rails bundle exec rails runner "puts Time.current" </code> ===== Возможные проблемы ===== ==== Ошибка "bash: executable file not found" ==== <note warning>**Решение**: Используйте `sh` вместо `bash` <code bash> docker exec chatwoot_rails sh -c "команда" </code> </note> ==== Rails консоль не открывается ==== <note warning>**Причины**: * Контейнер еще загружается (подождите 30 секунд) * Ошибка в конфигурации (проверьте логи) **Проверка**: <code bash> docker logs chatwoot_rails --tail 20 docker ps # проверка статуса контейнеров </code> </note> ==== Время в интерфейсе все еще UTC ==== <note tip>**Возможные причины**: * Кэш браузера (нажмите Ctrl+F5) * Интерфейс специально показывает UTC для согласованности * Настройки пользователя в самом Chatwoot **Главное**: Система внутренне работает с правильным временем! </note> ===== Заключение ===== После выполнения данной инструкции: * 🕐 Все новые записи в базе данных создаются с московским временем * 📅 Планировщик задач работает по московскому времени * 🔔 Уведомления отправляются в правильное время * 📊 Логи и метрики используют корректную временную зону * 💾 Настройки сохраняются при любых перезапусках системы ---- //Инструкция актуальна для Chatwoot с Docker Compose, протестирована на Ubuntu Server.// vm/chatwoot/05-local_time_moscow.txt Последнее изменение: 2025/08/30 23:33 — admin