vm:chatwoot:05-local_time_moscow

Настройка московского времени в 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
# Установка московского времени на сервере
sudo timedatectl set-timezone Europe/Moscow
 
# Проверка текущего времени
timedatectl status
date
# Переход в директорию проекта
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

Добавьте в файл `.env` следующие переменные:

# Настройки времени
TZ=Europe/Moscow
RAILS_TIMEZONE=Europe/Moscow
TIME_ZONE=Europe/Moscow
DEFAULT_TIMEZONE=Europe/Moscow
TIMEZONE=Europe/Moscow
 
# Локаль (опционально)
DEFAULT_LOCALE=ru

В секции 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
# Остановка контейнеров
docker-compose down
 
# Запуск с новыми настройками
docker-compose up -d
 
# Ожидание полного запуска
sleep 30
# Проверка текущего времени в 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 консоли
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"

<note warning>Решение: Используйте `sh` вместо `bash`

docker exec chatwoot_rails sh -c "команда"

</note>

<note warning>Причины:

  • Контейнер еще загружается (подождите 30 секунд)
  • Ошибка в конфигурации (проверьте логи)

Проверка:

docker logs chatwoot_rails --tail 20
docker ps  # проверка статуса контейнеров

</note>

<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