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

Перед установкой: чек-лист, без которого не начинаем ни одно внедрение
Меня зовут Евгений Семёнов, я технический директор 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 остался дефолтным от хостера.

Из практики: тикеты хостеру на порт 25 и PTR — самый долгий пункт списка, ответ может идти сутки. Заводите их в день заказа VPS, а не в день установки, иначе готовый сервер будет сутки стоять и не слать почту.
DNS-подготовка: что заводим до установки, а что после
Для условного домена client.ru и сервера mail.client.ru на IP 203.0.113.10 до установки нужны три записи плюс PTR у хостера:
| Тип | Имя | Значение | Когда |
|---|---|---|---|
| A | mail.client.ru | 203.0.113.10 | до установки |
| MX | client.ru | 10 mail.client.ru. | до установки (или при миграции — в день переключения) |
| TXT (SPF) | client.ru | v=spf1 mx -all | до установки |
| PTR | 203.0.113.10 | mail.client.ru | до установки, у хостера |
| TXT (DKIM) | селектор._domainkey.client.ru | из вывода утилиты | после установки |
| TXT (DMARC) | _dmarc.client.ru | v=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 не работают.

Таблица соответствия «привычка Zimbra-админа → новая реальность»:
| Привычка из Zimbra | Как теперь на Ubuntu 24.04 |
|---|---|
| zmcontrol status | systemctl 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 проверок перед сдачей клиенту
Сервер не считается сданным, пока не пройден весь список. Он короткий, но за каждым пунктом — чей-то реальный инцидент:
- Письмо на Gmail — доходит во «Входящие», в заголовках
dkim=pass,spf=pass. - Письмо на Яндекс — «Входящие», не спам.
- Письмо на Mail.ru — «Входящие»; если задержка — смотрим грейлистинг, заводим постмастер.
- Обратная доставка с внешнего ящика — письмо пришло, очередь Postfix пуста:
postqueue -p. - IMAP с телефона (993/SSL) — подключается, папки синхронизируются.
- ActiveSync/Exchange-профиль с телефона — почта и календарь ходят.
- Общий календарь: два тестовых пользователя видят занятость друг друга, приглашение на встречу принимается.
- Вложение 25 МБ — уходит и принимается.
- Спам-тест GTUBE (стандартная тест-строка антиспама) — письмо с ней падает в Junk.
- Ребут сервера — все 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.
Читайте также на itfresh.ru:
Оставить комментарий