Ставим Carbonio CE 26.3 на Ubuntu 24.04 с нуля: пошаговый регламент ITfresh — от DNS-записей до первого письма

Установка Carbonio CE 26.3 на Ubuntu 24.04 по регламенту ITfresh

Перед установкой: чек-лист, без которого не начинаем ни одно внедрение

Меня зовут Евгений Семёнов, я технический директор ITfresh. В обзорной статье серии я разобрал, что такое Carbonio Community Edition и кому он нужен. Сегодня — практика: наш внутренний регламент установки, доведённый до чек-листа после нескольких внедрений. Отдельная причина писать этот текст в 2026 году: большинство мануалов по Carbonio в сети написаны в 2022–2023 годах под Ubuntu 20.04 и уже вредны — на Ubuntu 24.04 сервисы управляются иначе, и половина «проверенных» команд оттуда просто не работает.

Итак, что должно быть готово до того, как вы наберёте первую команду:

  • VPS или ВМ: 6 vCPU, 12–16 ГБ RAM, 100+ ГБ SSD под 30–50 ящиков. Документация обещает жизнь на 8 ГБ — обещаниям не верьте, я подробно объяснял почему в обзоре: Java-стек с PostgreSQL, MariaDB, LDAP и Lucene-индексами на восьми гигабайтах живёт впритык.
  • Чистая Ubuntu 24.04 LTS Server — именно обычный Server, не minimized: в минимальном образе нет части пакетов, которые ожидает инсталлятор. Без панелей управления и чужих веб-серверов.
  • FQDN и hostname. Кривой hostname — причина №1 упавших инсталляций Carbonio, ровно как когда-то у Zimbra. Разберём отдельным шагом.
  • Открытый исходящий 25-й порт. Российские хостеры почти поголовно закрывают его по умолчанию — тикет в саппорт пишем заранее, за день-два, с честной формулировкой «корпоративный почтовый сервер».
  • PTR-запись. Без обратной зоны Mail.ru и Яндекс завернут вашу почту в спам независимо от идеальности остальных настроек. Мы набили эту шишку ещё на холодном старте почты одного из наших доменов: сервер идеален, DKIM подписан — а письма лежат в карантине у получателей, потому что PTR остался дефолтным от хостера.
Чек-лист подготовки к установке Carbonio CE: ресурсы сервера, FQDN, DNS, порт 25, PTR-запись
Шесть пунктов, которые закрываем до запуска инсталлятора: железо, ОС, FQDN, DNS, порт 25, PTR

Из практики: тикеты хостеру на порт 25 и PTR — самый долгий пункт списка, ответ может идти сутки. Заводите их в день заказа VPS, а не в день установки, иначе готовый сервер будет сутки стоять и не слать почту.

DNS-подготовка: что заводим до установки, а что после

Для условного домена client.ru и сервера mail.client.ru на IP 203.0.113.10 до установки нужны три записи плюс PTR у хостера:

ТипИмяЗначениеКогда
Amail.client.ru203.0.113.10до установки
MXclient.ru10 mail.client.ru.до установки (или при миграции — в день переключения)
TXT (SPF)client.ruv=spf1 mx -allдо установки
PTR203.0.113.10mail.client.ruдо установки, у хостера
TXT (DKIM)селектор._domainkey.client.ruиз вывода утилитыпосле установки
TXT (DMARC)_dmarc.client.ruv=DMARC1; p=quarantine; rua=mailto:postmaster@client.ruпосле DKIM

Почему DKIM — только после: ключевую пару генерирует сам Carbonio, селектор и публичная часть записи появятся у вас на руках после установки. DMARC без работающего DKIM публиковать бессмысленно, а с политикой строже p=none до проверки подписи — вредно. На время внедрения ставим TTL 300 на все записи: ошибки исправляются за минуты, а не за сутки расползания кешей.

Подготовка Ubuntu 24.04: три специфичных момента

Hostname и /etc/hosts

Carbonio, как и Zimbra до него, требует корректный FQDN и «резолвимость» имени сервера локально:

hostnamectl set-hostname mail.client.ru

# /etc/hosts — реальный IP сервера, FQDN первым:
# 127.0.0.1     localhost
# 203.0.113.10  mail.client.ru mail
nano /etc/hosts

hostname -f   # должно вернуть mail.client.ru

Обратите внимание: FQDN мы вешаем на реальный IP, а не на 127.0.0.1 — LDAP и межсервисные подключения Carbonio должны видеть сервер по его боевому адресу. Заодно проверьте строку ::1: если у хостера нет IPv6, а в hosts остались IPv6-алиасы для FQDN, часть сервисов может пытаться слушать несуществующий стек — лишний источник загадочных таймаутов.

systemd-resolved и локальный DNS

Ubuntu 24.04 из коробки держит на 127.0.0.53 заглушку systemd-resolved. Carbonio с ней уживается, но при одном условии — в системе должен работать честный резолвинг вашего домена ещё до установки: инсталлятор и bootstrap многократно резолвят FQDN и MX. Проверяем заранее:

resolvectl query mail.client.ru   # должен вернуть ваш IP
dig +short MX client.ru            # должен вернуть mail.client.ru

Если планируете локальный кеширующий DNS (классическая связка Zimbra-времён — unbound), ставьте его до Carbonio и отключайте stub-listener resolved, чтобы не воевать за 53-й порт. На типовом single-server мы обходимся без него.

Обновление и мелочи

apt update && apt full-upgrade -y
timedatectl set-timezone Europe/Moscow
reboot

AppArmor в наших инсталляциях Carbonio на 24.04 сюрпризов не приносил, но если после установки какой-то сервис падает с непонятным «permission denied» при живых правах на файлах — dmesg | grep -i apparmor должен быть в списке первых трёх команд диагностики.

Установка single-server: скрипт и что происходит под капотом

У Carbonio CE два официальных пути: ручная установка по документации (репозиторий, пакеты carbonio-*, затем carbonio-bootstrap) и скриптовая — готовый bash-скрипт единственного сервера, который Zextras отдаёт со страницы загрузки CE (ссылку присылают на e-mail после регистрации формы — да, это лёгкая плата за бесплатный продукт). Для single-server мы используем скрипт: он сам подключает репозиторий Zextras с GPG-ключом, определяет версию ОС, ставит все пакеты в правильном порядке и запускает bootstrap.

# скрипт для Ubuntu называется примерно так:
bash install_carbonio_ce_singleserver_ubuntu.sh

Дальше — интерактив. Из вопросов, на которые надо отвечать осмысленно:

  • Домен почтыclient.ru, то есть то, что после @ в адресах. Не имя сервера.
  • Публичный IP для видеосервиса — скрипт спросит адрес, на котором будут жить звонки; на single-server это внешний IP самого сервера.
  • Часовой пояс и пароль администратора — пароль сразу из генератора и сразу в менеджер паролей.

На живом клиентском VPS с нормальным каналом установка занимает 20–40 минут: большая часть — скачивание пакетов и прогон carbonio-bootstrap, который поднимает LDAP, прописывает домен и раскладывает конфигурацию по сервисам. В самом конце скрипт выводит на экран пароли служебных компонентов — Carbonio Mesh и PostgreSQL. Это единственный момент, когда вы их видите: копируйте в менеджер паролей немедленно, у нас они уезжают в Vaultwarden в карточку клиента вместе с датой установки и версией.

Для бывших Zimbra-админов — короткая экскурсия по новому дому. Всё хозяйство теперь живёт в /opt/zextras: бинарники и утилиты в bin/, почтовые хранилища в store/, логи — в log/ и системном journald. Служебный пользователь называется zextras, и админские команды выполняются из-под него: su - zextras -c "carbonio prov ...".

Известная особенность инсталлятора: если установка спотыкается на шаге миграции message-dispatcher, не паникуйте и не сносите сервер — подождите пару минут, из соседнего терминала перезапустите service-discover и PostgreSQL и повторите шаг. Это задокументированное сообществом поведение, а не ваша ошибка.

Ключевое отличие от старых мануалов: только systemd

Это раздел, ради которого статью стоило писать. На Ubuntu 24.04 сервисы Carbonio управляются исключительно через systemd: привычного zmcontrol start/stop/restart — «перезапустить всё одной командой» — больше нет. Каждый компонент — отдельный systemd-юнит, и старые мануалы с zmcontrol на 24.04 не работают.

Переход от zmcontrol к systemctl: управление сервисами Carbonio на Ubuntu 24.04 только через systemd
Привычный zmcontrol на Ubuntu 24.04 не работает — каждый сервис Carbonio управляется своим systemd-юнитом

Таблица соответствия «привычка Zimbra-админа → новая реальность»:

Привычка из ZimbraКак теперь на Ubuntu 24.04
zmcontrol statussystemctl list-units 'carbonio-*' --all
zmcontrol restartперезапуск конкретных юнитов; «всё сразу» — только reboot или свой скрипт по списку юнитов
рестарт мейлбоксаsystemctl restart carbonio-appserver.service
логи «хвостом»journalctl -u <юнит> -f (плюс классика в /opt/zextras/log)
автозапуск после ребутаsystemctl is-enabled по списку carbonio-юнитов

Полный список юнитов на вашей инсталляции смотрится так — он зависит от набора компонентов, поэтому не заучивайте его из статей, а получите со своего сервера:

systemctl list-unit-files 'carbonio-*' --type=service

Наш стандартный алиас-набор для быстрой диагностики, уезжает в /root/.bashrc на каждом внедрении:

alias cst="systemctl list-units 'carbonio-*' --all --no-pager"
alias cfail="systemctl list-units 'carbonio-*' --state=failed --no-pager"
alias clog="journalctl -e -n 100 -u"   # clog carbonio-appserver

Польза от перехода на systemd, к слову, реальная: зависшие сервисы перезапускаются политиками юнитов, статус виден единообразно, а логи попадают в journald с нормальными метками времени.

Первичная настройка: домен, ящики, DKIM, русский язык

Админ-консоль и первые ящики

Веб-клиент живёт на https://mail.client.ru, админ-консоль — на порту 6071: https://mail.client.ru:6071. Ящики можно накликать в консоли, но при заведении десятков сотрудников быстрее CLI — синтаксис старого доброго zmprov жив в виде carbonio prov:

su - zextras
carbonio prov ca ivanov@client.ru 'СложныйПароль1!' displayName "Иванов Иван"
carbonio prov ca buh@client.ru 'ДругойПароль2!' displayName "Бухгалтерия"
# список ящиков домена
carbonio prov -l gaa client.ru

DKIM и проверка доставляемости

Генерируем ключ для домена той же унаследованной утилитой:

su - zextras -c "/opt/zextras/libexec/zmdkimkeyutil -a -d client.ru"

Утилита выведет селектор и готовую TXT-запись — публикуем её в DNS, ждём расползания и проверяем сквозь внешний тест: отправляем письмо на адрес сервиса mail-tester.com и добиваемся 10/10. Если балл ниже — сервис по пунктам покажет, что не так: обычно это забытый PTR или лишние строки в SPF. После зелёного DKIM публикуем DMARC, для начала с мягкой политикой p=quarantine.

Русский интерфейс по умолчанию

Чтобы сотрудники не увидели английского вообще, локаль выставляется на уровне домена — новые ящики наследуют её автоматически:

carbonio prov md client.ru zimbraPrefLocale ru
# уже созданным ящикам — точечно:
carbonio prov ma ivanov@client.ru zimbraPrefLocale ru

Смоук-тест: 10 проверок перед сдачей клиенту

Сервер не считается сданным, пока не пройден весь список. Он короткий, но за каждым пунктом — чей-то реальный инцидент:

  1. Письмо на Gmail — доходит во «Входящие», в заголовках dkim=pass, spf=pass.
  2. Письмо на Яндекс — «Входящие», не спам.
  3. Письмо на Mail.ru — «Входящие»; если задержка — смотрим грейлистинг, заводим постмастер.
  4. Обратная доставка с внешнего ящика — письмо пришло, очередь Postfix пуста: postqueue -p.
  5. IMAP с телефона (993/SSL) — подключается, папки синхронизируются.
  6. ActiveSync/Exchange-профиль с телефона — почта и календарь ходят.
  7. Общий календарь: два тестовых пользователя видят занятость друг друга, приглашение на встречу принимается.
  8. Вложение 25 МБ — уходит и принимается.
  9. Спам-тест GTUBE (стандартная тест-строка антиспама) — письмо с ней падает в Junk.
  10. Ребут сервера — все carbonio-юниты поднялись сами, cfail пуст.

Результаты прогона мы оформляем коротким актом сдачи: дата, версия Carbonio, чек-лист с отметками, пароли переданы, DNS-записи зафиксированы. Через год, когда что-то изменится, этот акт сэкономит час археологии.

Типичные ошибки установки и как мы их чиним

Финальный раздел — коллекция граблей в формате «симптом → диагноз → лечение». Все — из реальных внедрений, наших и принесённых клиентами «доустановите за нами».

  • Инсталлятор падает в первые минуты → hostname без FQDN или FQDN не резолвится локально → чиним hostnamectl и /etc/hosts (раздел про подготовку), перезапускаем установку.
  • Установка прошла, веб-морда не открывается → смотрим cfail: чаще всего не стартовал appserver → у 8-гигабайтного сервера кончилась память на этапе первого прогрева индексов; лечится только добавлением RAM. Инсталлятор проходит и на 8 ГБ — падает потом, под нагрузкой, и это худший вариант «экономии».
  • Порт 8080 занят → на сервер до Carbonio успели поставить что-то своё (панель, прокси, чей-то docker) → Carbonio ставится только на чистую ОС; выносим постороннее или переустанавливаем на чистом VPS. Дешевле второго варианта нет ничего.
  • Почта уходит, но валится в спам у всех → PTR не совпадает с FQDN либо не прописан → правим у хостера, перепроверяем mail-tester. Не помогло за сутки — смотрим репутацию IP: возможно, вам достался адрес из-под спамера, проще попросить у хостера другой.
  • Снаружи не открывается ничего, локально всё работает → firewall хостера или ufw: для Carbonio должны быть открыты минимум 25, 443, 465, 587, 993 и 6071 (последний — только с ваших админских IP).
  • Bootstrap спотыкается на message-dispatcher → известная гонка при первом старте → пауза, рестарт service-discover и PostgreSQL из второго терминала, повтор шага.

Если ваш случай в список не попал — welcome в комментарии или сразу к нам: следующие статьи серии — миграция с Zimbra OSE за выходные и эксплуатация Carbonio без платного бэкапа. А если хочется получить работающий сервер, не проживая эти грабли лично, — мы разворачиваем Carbonio CE под ключ и берём на сопровождение: Telegram @ITfresh_Boss, телефон +7 903 729-62-41.

Carbonio CE под ключ

Развернём почту с календарями и документами на вашем сервере и возьмём на сопровождение: DNS и доставляемость, миграция, бэкапы, мониторинг. Свои серверы в дата-центре МТС, 15+ лет практики.

✈️ Telegram @ITfresh_Boss 📞 +7 903 729-62-41
#установка Carbonio #Carbonio Ubuntu 24.04 #carbonio-bootstrap #systemd #DKIM #почтовый сервер #регламент ITfresh
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.