В документе представлено описание вопросов, возникающих при установке, администрировании и эксплуатации Почты. Документ предназначен для инженеров и системных администраторов, ответственных за установку и настройку продукта.
Обновление до 26.3.1 доступно только с версии 26.2.3. Чтобы избежать ошибки, перед обновлением выполните следующие действия:
-
Остановите деплоер:
systemctl stop deployer -
Откройте файл конфигурации
/home/deployer/deployerParams.yamlи измените значения версий продуктов с 26.2.1 на 26.2.3. -
Сохраните изменения.
-
Загрузите дистрибутив 26.3.1: поместите архивы дистрибутива в директорию установки и распакуйте их, как описано в руководстве по обновлению.
-
Запустите деплоер:
sudo systemctl restart deployer
После этого обновите систему в штатном порядке по руководству по обновлению.
При первичной установке можно шардировать Tarantool matter. При обновлении нельзя.
Tarantool ussr шардировать нельзя ни при каких условиях.
В релизах 25.4.2 и 26.1 есть ограниение на версию пакета openssh-server. Не ставьте на гипервизоры версию 10.*.
-
Перейдите в веб-интерфейс установщика
http://server-ip-address:8888/. -
Найдите контейнер, который хотите удалить.
-
Нажмите на значок шестеренки справа от названия контейнера.
-
Кликните по иконке в правом верхнем углу:
-
Нажмите Удалить.
Чтобы автоответы работали для пользователей всех доменов в Почте VK WorkSpace, нужно настроить сервис mpop:
- Перейдите в веб-интерфейс установщика
http://server-ip-address:8888/. - Перейдите в раздел Настройки → Переменные окружения.
- В списке слева найдите mpop.
- Нажмите кнопку редактировать
. - Нажмите на кнопку + Добавить.
- В поле Название переменной введите
INTERNAL_DOMAINS_FOR_AUTOREPLY, в поле Значение переменной введите все внутренние домены. Вы создавали их в Панели администратора VK WorkSpace. - Нажмите Сохранить.
- Выполните шаг up_container для всех контейнеров mpop.
Если в переменной не указать список доменов, то внутренними пользователями считаются только те, что находятся на одном домене с пользователем, который настраивает автоответ.
Вместе с архивом дистрибутива предоставляется файл с хеш-суммой. Он нужен, чтобы убедиться, что архив скачался полностью и не был повреждён при передаче.
Чтобы проверить целостность архива:
-
Перейдите в директорию, в которую скачали архив.
-
Вычислите хеш-сумму архива:
md5sum <имя_архива> -
Сравните полученное значение с хеш-суммой из файла, полученного вместе с дистрибутивом.
Если значения совпадают, архив скачан корректно — можно переходить к распаковке.
Расхождение означает, что архив повреждён или скачался не полностью.
- Скачайте архив повторно.
- Ещё раз выполните проверку по инструкции «Как проверить целостность скачанного дистрибутива?».
- Если после повторного скачивания хеш-суммы по-прежнему не совпадают, обратитесь в техническую поддержку.
Нет. Внутренние файлы установщика нельзя изменять. Это можно сделать только при взаимодействии с поддержкой VK WorkSpace.
Нет. Запустите программу-установщик именно из той директории, в которой она находится. В противном случае установщик не сможет найти директорию source с файлами-исходниками.
Это нормально, так как в процессе установки вносятся изменения в системные настройки машин.
Есть только физические ограничения дисков, которые подключены к Почте. Теоретически вы можете подключить диски любых возможных объемов и не ограничивать размеры почтовых ящиков и хранилищ.
Нет. Хранилища необходимо настроить до завершения установки. Если у вас появилась необходимость изменить настройки хранилищ, обратитесь в службу поддержки.
По завершении установки допускается только удаление архива, из которого был распакован дистрибутив.
Нет. Пользователь, от имени которого производится первичная установка, также будет использоваться для установки обновлений.
В веб-интерфйейсе установщика на верхней панели нажмите на вкладку Обслуживание, затем перейдите на вкладку Контейнеры.
Выполните команду:
docker exec -it имя_контейнера bash
Для некоторых контейнеров, например, для etcd
docker exec -it имя_контейнера sh
Выполните команду:
systemctl start onpremise-container-имя_контейнера
Выполните команду:
systemctl stop onpremise-container-имя_контейнера
-
В веб-интерфейсе установщика перейдите к списку контейнеров, кликнув по логотипу в левом верхнем углу веб-интерфейса.
-
Найдите в списке контейнеров fmail1 и нажмите на значок шестеренки справа от названия контейнера.
-
Запустите выполнение шага get_biz_owner.

-
Дождитесь окончания выполнения, затем скопируйте новый пароль.
Пароль находится в файле **bizOwner.pass**, файл расположен в директории с установщиком Почты onpremise-deployer_linux. Например, если установка происходила под пользователем deployer, проверить пароль можно, используя команду:```bashcat /home/deployer/bizOwner.pass```
Если вам нужно обновить лицензионный ключ, в веб-интерфейсе установщика нажмите на значок
и в выпадающем меню выберите Обновить лицензионный ключ.

В открывшемся окне вы сможете просмотреть информацию о текущих лицензиях, а также обновить лицензионный ключ.
Если вы вносили какие-либо изменения, кликните по кнопке Сохранить.
-
В веб-интерфейсе установщика, перейдите в раздел Настройки → Переменные окружения.
-
В левом боковом меню найдите mailapi.
-
Нажмите кнопку редактировать
. -
Нажмите на кнопку + Добавить.
-
В поле Название переменной введите
REPORT_SUSPICIOUS_EMAIL, в поле Значение переменной введите почту, на которую должны пересылаться такие письма.
-
Нажмите Сохранить.
Чтобы собрать логи, нужно выполнить следующие действия:
-
Скачать архив logs.tgz.
-
Скопировать архив logs.tgz на один из серверов системы.
-
Распаковать архив.
-
Запустить скрипт:
bash lc.sh -
Скачать сформированный по результатам выполнения скрипта архив.
В процессе могут быть запрошены пароли для пользователя, под которым скрипт запущен для входа на остальные сервера, на которых установлена система. Пользователь должен иметь права на sudo.
За длительность пользовательских сессий отвечают параметры:
SESSION_EXPIRE_TIME— длительность сессии.SESSION_UPDATE_TIME— частота обновления сессии.
Причем SESSION_EXPIRE_TIME должен быть больше чем SESSION_UPDATE_TIME. Иначе сессия не будет обновляться и параметр SESSION_UPDATE_TIME потеряет смысл. Значения переменных задаются в секундах. Например:
"SESSION_EXPIRE_TIME" "2764800" // Расчет: 32 * 24 * 60 * 60 - 32 дня"SESSION_UPDATE_TIME" "14400" // Расчет: 4 * 60 * 60 - 4 часа
Чтобы изменить длительность пользовательских сессий:
-
Перейдите в веб-интерфейс установщика
http://server-ip-address:8888/. -
Перейдите в раздел Настройки → Переменные окружения.
-
В списке слева найдите swa.

-
Нажмите кнопку редактировать
. -
Нажмите на кнопку + Добавить.
-
В поле Название переменной введите
SESSION_EXPIRE_TIME, в поле Значение переменной введите длительность сессии в секундах. -
Нажмите на кнопку + Добавить.
-
В поле Название переменной введите
SESSION_UPDATE_TIME, в поле Значение переменной введите частоту обновления сессии в секундах. -
Нажмите на кнопку Сохранить.
-
Повторите действия выше для роли cube.
-
Перейдите на главную страницу веб-интерфейса установщика и найдите контейнеры swa* и cube*.
-
Для каждого контейнера выполните шаг up_container.

В Календаре существует лимит на количество символов в описании событий. В Календаре VK Workspace версии 1.24 этот лимит по умолчанию равен 10 000 символов и может быть изменен администратором.
Если вы используюте синхронизацию календарей со сторонними сервисами, то в этих сервисах лимит может быть больше чем 10 000. Поэтому для корректной синхронизации событий с большим описанием нужно увеличить лимит в Календаре VK Workspace. Например, это актуально для синхронизации календарей с Microsoft Exchange.
Чтобы изменить лимит на описание, используемый при синхронизации событий, выполните следующией действия в веб-интерфейсе установщика:
-
Перейдите в веб-интерфейс установщика
http://server-ip-address:8888/. -
Перейдите в раздел Настройки → Переменные окружения.
-
В списке слева найдите calendarapi.

-
Нажмите кнопку редактировать
. -
Нажмите на кнопку + Добавить.
-
В поле Название переменной введите
CALENDARAPI_EVENTS_DESCRIPTION_LIMIT_SYMBOLS, в поле Значение переменной введите значение нового лимита. -
Нажмите на кнопку Сохранить.

-
Перейдите на главную страницу веб-интерфейса установщика и найдите контейнеры calendarapi*.
-
Для каждого контейнера выполните шаг up_container.
-
Перейдите в раздел Настройки → Переменные окружения.
-
В списке слева найдите calendarapi-internal.
-
Для переменной
CALENDARAPI_EVENTS_DESCRIPTION_LIMIT_SYMBOLS, в поле Значение переменной введите значение из шага 6.
Чтобы создавать события с большим описанием через пользовательский интерфейс Календаря:
-
Подключитесь к машине с установщиком.
-
В файле
/home/deployer/configs/onlineconf/MAILAPI.conf, для следующей переменной укажите значение лимита, которое вы указывали в веб-интерфейсе установщика:prodconfig.frontend_features.calendarx.event-description-max-input-lengthНайти нужную строчку можно с помощью команды:
grep -n prodconfig.frontend_features.calendarx.event-description-max-input-length /home/deployer/configs/onlineconf/MAILAPI.conf -
В веб-интерфейсе установщика выполните шаг up_container для контейнеров mailapi*.
-
Проверить версию утилиты systemd:
[root]# systemctl --versionsystemd 246 (v246.10-15.el7)
-
Запустить следующий скрипт на сервере, где находится установщик:
for i in `sudo calicoctl get nodes --output=yaml |grep ipv4IPIPTunnelAddr|awk '{ print($2) }' `;do ssh -o StrictHostKeychecking=no $i "sudo journalctl --since \"2 days ago\"-u onpremise-container-s3storage? -u onpremise-container-clddispatcher?-u onpremise-container-webdav-streamer? -u onpremise-container-s3pairdb?";done |gzip > /tmp/20230901.ONPREMIA-376.overall.log.gz
При работе данного скрипта происходит перебор всех серверов почты.
docker exec -i bizdb1 mysql -N -B <<< "select id,name from biz.domain;"
При выгрузке сертификата с AD может потребоваться его конвертация в pem файл. Для это выполните следующие команды:
# Объединенный PEM файлopenssl pkcs12 -in instmail.pfx -out cert.pem -nodes# PEM файл без ключаopenssl pkcs12 -in instmail.pfx -clcerts -nokeys -out cert.pem# Приватный ключopenssl pkcs12 -in instmail.pfx -nocerts -out key.pem# Удалить пароль с ключаopenssl rsa -in key.pem -out server.key# Получить сертификат из URLopenssl s_client -showcerts -connect <server-address>:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem
docker exec -it fmail1 bashcurl -X POST --data 'email=admin2@admin.qdit&password=password' 'http://serverside-api.qdit/api/v1/user/password/change'
SPF-запись защищает от подделки вашего домена и позволяет предотвратить попадание писем, отправленных с ваших адресов, в спам.
Чтобы настроить SPF-запись:
- Перейдите на сайт провайдера, у которого находится DNS-зона управления вашим доменом.
- Введите логин и пароль для входа панель управления.
- Перейдите в раздел управления DNS-зонами необходимого домена.
- Добавьте две ТХТ-записи со следующими значениями:
v=spf1 redirect=_spf.<ваш_домен>иv=spf1 a:<ваш_домен> -al. Например:v=spf1 redirect=_spf.mail.vk.ruиv=spf1 a:mail.vk.ru -al.
Некоторые провайдеры ставят кавычки для SPF-записи самостоятельно, поэтому уточните необходимость кавычек у вашего хостинг-провайдера или поступите по аналогии с другими ТХТ-записями домена, если они присутствуют.
Пример SPF-записи:
$ dig mail.vk.ru txt;; QUESTION SECTION:;mail.vk.ru. IN TXT;; ANSWER SECTION:mail.vk.ru. 0 IN TXT "v=spf1 redirect=_spf.mail.vk.ru"$ dig _spf.mail.vk.ru txt;; QUESTION SECTION:;_spf.mail.vk.ru. IN TXT;; ANSWER SECTION:_spf.mail.vk.ru. 0 IN TXT "v=spf1 a:mail.vk.ru -all"
docker exec -it fmail1 bashcurl -X POST --data-urlencode 'users=[{"login":"admin2","domain":"admin.qdit","password":"password"}]' 'http://serverside-api.qdit/api/v1/users/add'
-
Убедиться, что письма, по которым производится поиск не находятся в архиве Outlook.
-
Найти ID пользователя:
docker exec -i bizdb1 mysql -N -B <<< "use biz"; select id,mid,username,domain_name,nick from user where username = 'o.kosyankov' order by id;" -
Запустить повторную индексацию:
docker exec -it crow-frontend1 bash# USER_ID = mid из предыдущего запросаcurl -H 'x-request-id: DEBUG' 'http://localhost:5229/api/crow_frontend/trigger_reindex?user_id=USER_ID&dont_wait=false&reconcile=2'
Версии можно посмотреть по следующим ссылкам:
http://server-address:8888/api/v1/roles/list?yaml=truehttp://server-address:8888/develop/roles
Линукс
echo "This is the email body" | mail -r user000@example.local -S smtp=smtp.vk-workmail-srvmail.example.local:25 -s "test linux email" user001@example.local
Windows
Send-MailMessage -From "user000@example.local" -to "user004@example.local" -Subject "test from PS3" -Body "test321" -SmtpServer "smtp.vk-workmail-srvmail.example.local"
MacOS
user000@example.local"~ % echo "This is the email body" | mail -s user001@example.local" -s smtp=mxs.supermail.onprem.ru:1025 -s "test linux email" user002@example.local"user000@example.local" ~ %
systemctl stop onpremise-container-\*docker stop $(docker ps -q)systemctl stop dockersystemctl start dockersystemctl start onpremise-mail.target #(на каждой ВМ)
Для этого необходимо настроить rsyslog.
-
В файле
/etc/systemd/journald.confустановите параметр:ForwardToSyslog=yes -
Перезапусите journald:
systemctl restart systemd-journald -
Проверьте наличие logrotate и установите при отсутствии:
rpm -qa |grep logrlogrotate-3.8.6-19.el7.x86_64 -
Настройте ротацию системных журналов в файле
/etc/logrotate.d/syslog. -
Проверьте содержимое:
/var/log/cron/var/log/maillog/var/log/messages/var/log/secure/var/log/spooler{missingokcompressdailysharedscriptspostrotate/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || trueendscript} -
Добавьте в crontab строки:
crontab -e15 0 * * * logrotate /etc/logrotate.conf 2>&1 > /dev/null -
В файл
/etc/rsyslog.confдобавьте строку:*.* @@(o)<server>:<port>;RSYSLOG_SyslogProtocol23Formatгде
- server — имя или адрес сервера агрегации журналов
- port — порт сбора журналов
-
Перезапустите сервис rsyslog:
systemctl restart rsyslog
Бывает, что в контейнере graphite* (БД для метрик мониторинга) утекает память. В таком случае нужно перезапустить контейнер с помощью команды:
systemctl restart onpremise-container-graphite1
Также graphite* может занять все свободное пространство диска. Чтобы освободить место на диске следует удалить соответствующие таблицы в контейнере ClickHouse.
Дисковое пространство, используемое контейнером, проверяется командами du, или ncdu:
root@server:~# ncdu /opt/mailOnPremise/dockerVolumes/root@server:~# docker exec -it graphite1 clickhouse-client --query "TRUNCATE TABLE graphite.graphite"
Если по каким-то причинам невозможно выполнить TRUNCATE, тогда удалите сами контейнеры:
root@server:~# rm /etc/systemd/system/onpremise-container-zookeeper1.serviceroot@server:~# rm /etc/systemd/system/onpremise-container-graphite1.serviceroot@server:~# systemctl stop onpremise-container-zookeeper1root@server:~# systemctl stop onpremise-container-graphite1root@server:~# rm -rf /opt/mailOnPremise/dockerVolumes/zookeeper1root@server:~# rm -rf /opt/mailOnPremise/dockerVolumes/graphite1root@server:~# systemctl restart deployer
Или одной строкой:
systemctl stop onpremise-container-zookeeper1 && systemctl stop onpremise-container-graphite1 &&rm -rf /opt/mailOnPremise/dockerVolumes/zookeeper1 /opt/mailOnPremise/dockerVolumes/graphite1 &&systemctl restart deployer && journalctl -fu onpremise-container-graphite1 -fu onpremise-container-zookeeper1
up_container:
- zookeeper1
- graphite1
Выполните команду:
alter table graphite.graphite delete where dateDiff('day', Date, toDate('2023-06-13')) > 0;
где внутри функции toDate укажите дату.
Нужно выполнить следующие команды внутри контейнера etcd:
etcdctl --write-out=table --endpoints="http://172.20.2.215:2379,http://172.20.12.215:2379,http://172.20.1.216:2379" endpoint healthetcdctl --write-out=table --endpoints="http://172.20.2.215:2379,http://172.20.12.215:2379,http://172.20.1.216:2379" endpoint status
-
Перейти в файл:
/opt/mailOnPremise/dockerVolumes/bizf1/app.env -
Изменить строчку
SUPERUSERS=admin@admin.qdit, где указать пользователей с правами SuperUser:SUPERUSERS=admin@admin.qdit,admin2@admin.qdit -
Перезапустить контейнер bizf1:
systemctl restart onpremise-container-bizf1 -
Повторить операцию для всех контейнеров вида bizf*.
-
Остановите систему и удалите юнит-файлы:
systemctl stop onpremise-*systemctl stop deployerfind /etc/systemd/system/onpremise-* -type f | xargs rmrm -rf /etc/systemd/system/onpremise-mail.target.wantssystemctl daemon-reload -
Остановите и удалите контейнеры (и их образы):
docker stop $(docker ps -q)docker rm -f $(docker ps -aq)for i in $(docker images -a |awk '{ print($3) }' |grep -v IMAGE); do docker rmi -f $i; done -
Удалите логи:
find /var/log/ -maxdepth 1 | egrep "(.*1$|calico)" | xargs rm -rf> /var/log/daemon.log> /var/log/syslogsudo journalctl --rotatesudo journalctl --vacuum-time=1s -
Очистите установщик:
rm -rf /home/deployer/logs/rm -rf /home/deployer/yamlBak/rm -rf /home/deployer/bizOwner.passrm -rf /home/deployer/computes*rm -rf /home/deployer/*.yaml -
Очистите папку opt:
rm -rf /opt/* -
Очистите iptables:
iptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -P OUTPUT ACCEPTiptables -Fiptables -Xiptables -Ziptables -t nat -Fiptables -t nat -Xiptables -t mangle -Fiptables -t mangle -Xiptables -t raw -Fiptables -t raw -X -
Очистите конфигурации calico:
rm -rf /etc/calicorm -f /usr/bin/calicoctl -
Запустите повторную установку:
systemctl restart deployer
-
Остановите систему и удалите юнит-файлы:
systemctl stop onpremise-*systemctl stop deployerfind /etc/systemd/system/onpremise-* -type f | xargs rmrm -rf /etc/systemd/system/onpremise-mail.target.wantssystemctl daemon-reload -
Остановите и удалите контейнеры (и их образы):
docker stop $(docker ps -q)docker rm -f $(docker ps -aq)for i in $(docker images -a |awk '{ print($3) }' |grep -v IMAGE); do docker rmi -f $i; done -
Удалите логи:
find /var/log/ -maxdepth 1 | egrep "(.*1$|calico)" | xargs rm -rf> /var/log/daemon.log> /var/log/syslogsudo journalctl --rotatesudo journalctl --vacuum-time=1s -
Очистите установщик:
rm -rf /home/deployer/configs/rm -rf /home/deployer/static/rm -rf /home/deployer/logs/rm -rf /home/deployer/yamlBak/rm -rf /home/deployer/onpremise-deployer_linuxrm -rf /home/deployer/bizOwner.passrm -rf /home/deployer/computes*rm -rf /home/deployer/deployerParams.yamlrm -rf /home/deployer/main.yamlrm -rf /home/deployer/source/dockerRepo.tarrm -rf /home/deployer/source/repo.tarrm -rf /home/deployer/source/tarballs.tar -
Очистите папку opt:
rm -rf /opt/* -
Очистите iptables:
iptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -P OUTPUT ACCEPTiptables -Fiptables -Xiptables -Ziptables -t nat -Fiptables -t nat -Xiptables -t mangle -Fiptables -t mangle -Xiptables -t raw -Fiptables -t raw -X -
Очистите конфигурации calico:
rm -rf /etc/calicorm -f /usr/bin/calicoctl -
Перезагрузите сервер.
-
Скачайте дистрибутив Почты, распакуйте его и начните установку.
Если на вашей инсталляции наблюдаются проблемы с сервисами и при этом не работает авторизация, то для сбора диагностики и дополнительной информации через сервис мониторинга Grafana нужно воспользоваться аварийным доступом. Чтобы войти в Grafana:
-
Перейдите на сервер с установщиком Почты onpremise-deployer_linux.
-
Если установка происходила под пользователем deployer, то выполните команду:
cat /home/deployer/grafanaAdmin.pass -
Скопируйте пароль из консоли.
-
Перейдите по адресу
biz.<your_domain>/grafana. -
В поле Email or username введите admin@admin.qdit. В поле Password введите пароль скопированный из консоли.
В версии 1.12 почты появилась возможность просматривать графики для мониторинга очередей. Перейдите к мониторингу очередей по следующей ссылке:
https://biz.<mail_domain>/grafana/d/Pfg5iJP7z/exim-deliverability-metrics
где <mail_domain> — это ваш домен.
По умолчанию максимальное количество папок в ящике пользователя — 1000, включая системные.
Регулируется с помощью переменной окружения для роли stm:
MESCALITO_MAILBOX_MAX_FOLDERS=1000
Максимальное значение, которое можно задать для переменной — 500000.
Максимальное количество одновременных сессий — 20.
Технический писатель: Груздев Никита