====== Настройка московского времени в Chatwoot ======
===== Проблема =====
По умолчанию Chatwoot отображает время в UTC (GMT+0). Для корректной работы с пользователями в московском часовом поясе необходимо настроить время на MSK (GMT+3).
⚠️ **Важно**: Без правильной настройки файлы конфигурации не сохраняются при перезапуске контейнеров!
===== Структура проекта =====
/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
📌 **Ключевой момент**: Volume `/opt/chatwoot/chatwoot_dock/config/initializers:/app/config/initializers` обеспечивает сохранение настроек при перезапуске контейнеров.
В секциях **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"
✅ **Ожидаемый результат**:
* Время должно отображаться с **+0300** (MSK)
* Временная зона: **(GMT+03:00) Europe/Moscow**
* Конфигурация: **Europe/Moscow**
===== Проверка через Rails консоль =====
# Открытие Rails консоли
docker exec -it chatwoot_rails bundle exec rails c
# В консоли выполните:
# Time.current
# Time.zone.name
# Rails.application.config.time_zone
# exit
===== Постоянное сохранение =====
🎯 **Преимущества данного подхода**:
* ✅ Настройки сохраняются после перезапуска контейнеров
* ✅ Настройки сохраняются после пересборки образов
* ✅ Настройки сохраняются после обновления Chatwoot
* ✅ Настройки сохраняются после перезагрузки сервера
=== Где хранятся настройки ===
^ Тип настройки ^ Расположение ^ Описание ^
| Конфигурация времени 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" ====
**Решение**: Используйте `sh` вместо `bash`
docker exec chatwoot_rails sh -c "команда"
==== Rails консоль не открывается ====
**Причины**:
* Контейнер еще загружается (подождите 30 секунд)
* Ошибка в конфигурации (проверьте логи)
**Проверка**:
docker logs chatwoot_rails --tail 20
docker ps # проверка статуса контейнеров
==== Время в интерфейсе все еще UTC ====
**Возможные причины**:
* Кэш браузера (нажмите Ctrl+F5)
* Интерфейс специально показывает UTC для согласованности
* Настройки пользователя в самом Chatwoot
**Главное**: Система внутренне работает с правильным временем!
===== Заключение =====
После выполнения данной инструкции:
* 🕐 Все новые записи в базе данных создаются с московским временем
* 📅 Планировщик задач работает по московскому времени
* 🔔 Уведомления отправляются в правильное время
* 📊 Логи и метрики используют корректную временную зону
* 💾 Настройки сохраняются при любых перезапусках системы
----
//Инструкция актуальна для Chatwoot с Docker Compose, протестирована на Ubuntu Server.//