Настройка московского времени в Chatwoot
Проблема
По умолчанию Chatwoot отображает время в UTC (GMT+0). Для корректной работы с пользователями в московском часовом поясе необходимо настроить время на MSK (GMT+3).
<note warning>⚠️ Важно: Без правильной настройки файлы конфигурации не сохраняются при перезапуске контейнеров!</note>
Структура проекта
/opt/chatwoot/
├── chatwoot_dock/ ← Docker-compose проект
│ ├── docker-compose.yml ← Конфигурация контейнеров
│ ├── .env ← Переменные окружения
│ └── config/
│ └── initializers/
│ └── timezone.rb ← Настройки времени Rails
└── chatwoot_data/ ← Данные (вне Docker проекта)
├── postgres_data/ ← База данных
├── storage/ ← Файлы и медиа
└── redis_data/ ← Кэш Redis
Пошаговая инструкция
Шаг 1: Настройка системного времени
# Установка московского времени на сервере sudo timedatectl set-timezone Europe/Moscow # Проверка текущего времени timedatectl status date
Шаг 2: Создание постоянной конфигурации
# Переход в директорию проекта 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
Шаг 3: Обновление переменных окружения
Добавьте в файл `.env` следующие переменные:
# Настройки времени TZ=Europe/Moscow RAILS_TIMEZONE=Europe/Moscow TIME_ZONE=Europe/Moscow DEFAULT_TIMEZONE=Europe/Moscow TIMEZONE=Europe/Moscow # Локаль (опционально) DEFAULT_LOCALE=ru
Шаг 4: Обновление docker-compose.yml
В секции services → base → volumes добавьте строки для синхронизации времени:
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
<note important>📌 Ключевой момент: Volume `/opt/chatwoot/chatwoot_dock/config/initializers:/app/config/initializers` обеспечивает сохранение настроек при перезапуске контейнеров.</note>
В секциях rails, sidekiq добавьте аналогичные переменные окружения:
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
Для postgres и redis:
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
Шаг 5: Применение изменений
# Остановка контейнеров docker-compose down # Запуск с новыми настройками docker-compose up -d # Ожидание полного запуска sleep 30
Шаг 6: Проверка результата
# Проверка текущего времени в 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"
<note tip>✅ Ожидаемый результат:
- Время должно отображаться с +0300 (MSK)
- Временная зона: (GMT+03:00) Europe/Moscow
- Конфигурация: Europe/Moscow
</note>
Проверка через Rails консоль
# Открытие Rails консоли docker exec -it chatwoot_rails bundle exec rails c # В консоли выполните: # Time.current # Time.zone.name # Rails.application.config.time_zone # exit
Постоянное сохранение
<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/` | Временные данные |
Тестирование постоянности
Для проверки что настройки действительно сохраняются:
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"
Возможные проблемы
Ошибка "bash: executable file not found"
<note warning>Решение: Используйте `sh` вместо `bash`
docker exec chatwoot_rails sh -c "команда"
</note>
Rails консоль не открывается
<note warning>Причины:
- Контейнер еще загружается (подождите 30 секунд)
- Ошибка в конфигурации (проверьте логи)
Проверка:
docker logs chatwoot_rails --tail 20 docker ps # проверка статуса контейнеров
</note>
Время в интерфейсе все еще UTC
<note tip>Возможные причины:
- Кэш браузера (нажмите Ctrl+F5)
- Интерфейс специально показывает UTC для согласованности
- Настройки пользователя в самом Chatwoot
Главное: Система внутренне работает с правильным временем! </note>
Заключение
После выполнения данной инструкции:
* 🕐 Все новые записи в базе данных создаются с московским временем * 📅 Планировщик задач работает по московскому времени * 🔔 Уведомления отправляются в правильное время * 📊 Логи и метрики используют корректную временную зону * 💾 Настройки сохраняются при любых перезапусках системы
Инструкция актуальна для Chatwoot с Docker Compose, протестирована на Ubuntu Server.