О чём и зачем эта статья
Продукты Microsoft Exchange Server и SharePoint Server широко используются во многих средних и крупных организациях в России. Замена этой связки часто требует от компаний складывания лицензионно-технологического "пазла" из нескольких решений от разных производителей. При этом уже достаточно давно на российском рынке есть совместимый "из коробки" сервис корпоративной почты и совместной работы с документами – «МойОфис Почта 2» и «Частное Облако 2». Статья адресована системным администраторам, которые собираются установить МойОфис в своей компании или просто хотят оценить возможности новых отечественных продуктов. Кстати, блог компании МойОфис можно полистать и здесь же на Хабре.
Рассмотрим установку и настройку связки «МойОфис Почта 2» и «Частное Облако 2», которая обеспечивает обмен почтой и совместную работу с документами. Я буду описывать версию 2.4, актуальную на момент написания статьи, установленную в закрытом контуре сети для тестирования и неопубликованную в интернет, но с доступом к нему. При установке есть некоторые нюансы, на которых можно споткнуться и затем долго искать причину сбоя установки. Я постараюсь убрать эти грабли с вашего пути.
Картинок не будет, да они в формате этой статьи и не нужны. Да пребудет с вами сила!
Подложка
Установить компоненты МойОфис можно на разные свежие операционные системы, но я пошёл по пути упрощения и унификации. Для всех компонентов системы в качестве операционной системы использована CentOS 7.9 - да, старенькая, но проверенная. К тому же по документации МойОфис она единственная, на которую можно установить и Частное Облако 2, и Почта 2 от МойОфис. ОС установлена в минимальной конфигурации.
Инфраструктура
Минимальный состав для установки компонентов включает четыре сервера: сервер установки, он же инфраструктурный; сервер почты - PSN; сервер совместной работы CO и сервер хранилища - PGS. МойОфис в боевой инфраструктуре предполагает разнесение компонентов ролей на разные физические или виртуальные серверы для повышения отказоустойчивости и производительности. У нас же все роли компонентов будут установлены на единственный для каждой роли сервер. На моём стенде серверы установлены со следующими параметрами:
IP |
Name |
Description |
10.10.111.16 |
infra01 |
МойОфис 2.4 Сервер установки |
10.10.111.17 |
psn01 |
МойОфис 2.4 Почта |
10.10.111.18 |
pgs01 |
МойОфис 2.4 Хранилище |
10.10.111.19 |
co01 |
МойОфис 2.4 Сервер совместной работы |
10.10.111.10 |
dns |
DNS сервер |
Для работы установщика и упрощения своей жизни нужно настроить подключение с сервера установки к серверам компонентов по SSH по ключам и без пароля.
Подготовка
Установим необходимое и опциональное ПО на сервер установки:
yum install -y epel-release
yum install -y mc tmux pwgen wget python3 python3-pip rsync yum-utils bind-utils nmap sshpass vim jq
yum update
python3 -m pip install --upgrade pip==20.3.4
python3 -m pip install jmespath netaddr jinja2
Установка производится с помощью Ansible, а потому нам нужен и он. МойОфис чувствителен к версии Ansible, так что в соответствии с документацией по установке используем Ansible 2.11.6.
python3 -m pip install ansible-core==2.11.6
python3 -m pip install ansible==4.7.0
Дистрибутивы
Установочные пакеты МойОфис версии 2.4 распространяются в двух форматах:
архив каталога установки для компонентов PSN и PGS;
в виде больших бинарных файлов, выполняющих предварительную подготовку к установке и разворачивание каталога установки для CO.
Все три пакета нужно скачать на инфраструктурный сервер, дальнейшие действий выполняются именно на нём, если что-то потребуется сделать на других серверах, я отмечу это особо.
Архивы с файлами конфигурации и установки PSN и PGS достаточно разархивировать в папки inst_psn24 и inst_pgs24 соответственно, имена папок некритичны. CO нужно установить из бинарников, которые подготовят систему и распакуют каталог установщика. В составе предварительного установщика CO два основных файла: co_infra_2.4.run - скрипт установки хранилища образов Docker; и co_ansible_bin_2.4.run - скрипт установки подсистемы управления конфигурациями CO. Сначала нужно выполнить co_infra_2.4.run, затем co_ansible_bin_2.4.run. Скрипты создадут в домашнем каталоге папку install_co, в которой содержатся установочные и конфигурационные файлы CO. Дополнительно скрипт co_infra_2.4.run требуется скопировать на сервер co01 и выполнить там. На этом этап подготовки дистрибутивов завершён.
Сертификаты
Важнейший момент - выпуск SSL сертификатов. Имя или имена, на которое выписан сертификат, определяют структуру именования компонентов МойОфис, либо наоборот - структура именования компонентов диктует имя SSL сертификата. Отталкиваться стоит от того, что у вас в приоритете. У меня не было ни инфраструктуры, ни сертификата, так что я выписал у LetsEncrypt wildcard-сертификат на все домены третьего уровня для своего домена *.mo2.fun и это определило структуру имён компонентов МойОфис. LetsEncrypt предоставил мне сам сертификат, закрытый ключ для него (так не стоит делать в боевой среде) и сертификаты корневого и выдающих центров сертификации. Изменять форматы файлов сертификатов не требуется. Переименуйте эти ключи и сертификаты и уберите их в надёжное место, когда они нам понадобятся, мы их достанем оттуда.
Соответствие имён сертификатов, полученных от LetsEncrypt и сертификатов МойОфис
LetsEncrypt |
МойОфис |
chain.pem |
ca.pem |
cert.pem |
server.crt |
privkey.pem |
server.nopass.key |
DNS
Второй важный момент подготовки - создание DNS записей для компонентов МойОфис. Поскольку работа извне с комплексом не предусматривалась, DNS записи были созданы на внутреннем DNS сервере, на который и смотрят все серверы МойОфис. Мой DNS на стенде на Windows, если у вас также - держите в помощь:
Add-DnsServerResourceRecord -A -Name "instsrv01" -IPv4Address "10.10.111.16" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -A -Name "co01" -IPv4Address "10.10.111.19" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -A -Name "pgs01" -IPv4Address "10.10.111.18" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -A -Name "psn01" -IPv4Address "10.10.111.17" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "admin" -HostNameAlias "pgs01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "pgs" -HostNameAlias "pgs01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "autoconfig" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "cab" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "imap" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "mail" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "psnapi" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "push" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "smtp" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "pbm" -HostNameAlias "psn01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "auth" -HostNameAlias "co01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "cdn" -HostNameAlias "co01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "coapi" -HostNameAlias "co01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "docs" -HostNameAlias "co01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "files" -HostNameAlias "co01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "links" -HostNameAlias "co01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -Srv -Name "_https._tcp" -DomainName "auth.mo2.fun" -ZoneName "mo2.fun" -Priority 0 -Weight 0 -Port 443
Add-DnsServerResourceRecord -CName -Name "fsapi" -HostNameAlias "pgs01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "appapi" -HostNameAlias "pgs01.mo2.fun" -ZoneName "mo2.fun"
Add-DnsServerResourceRecord -CName -Name "cardapi" -HostNameAlias "pgs01.mo2.fun" -ZoneName "mo2.fun"
Необязательный пункт
Запуск установщика рекомендую выполнять из-под запущенного мультиплексора, например tmux. Это позволит отслеживать процесс установки и даже в случае потери связи с сервером установки можно будет восстановить соединение и снова подключиться в сессию мультиплексора, из которой выполняется установка.
Конфигурирование
Настройка того, что и где будет установлено, выполняется правкой конфигурационных файлов компонентов. Это, вероятно, самый длительный и скрупулёзный этап в установке, а потому после того, как все настройки будут выполнены и МойОфис успешно установлен, я рекомендую сохранить конфигурационные файлы в надёжное место. Очень досадно в случае потери конфигов заново их переписывать с нуля.
Обратите внимание на формирование FQDN компонентов. В файлах конфигурации компонентов есть переменные, отвечающие за имя домена: domain_name в конфиге CO, external_domain в конфиге PSN и DEFAULT_DOMAIN в конфиге PGS. Эти переменные и будут определять имя домена, для совместной установки компонентов имеет смысл назначить им одинаковые значения. Остальные имена компонентов МойОфис по умолчанию формируются как домены третьего уровня от основного имени домена, что и видно выше в примере создания DNS записей.
domain_name: "mo2.fun"
Длина ключей и паролей описана в конфигах, можно генерировать их прямо теми командами, что указаны в качестве примеров, следите только за совпадением значений в конфигах разных компонентов.
Большая часть настройки выполняется по инструкции по установке. На что обратить внимание:
Настройка установки CO
Считаем, что файлы установки в каталоге install_co
Заполнить файл конфигурации group_vars/co_setup/main.yml
Значение FS_APP_LOGIN должно совпадать с APP_ADMIN_LOGIN на стороне PGS.
Значение FS_APP_PASSWORD должно совпадать с APP_ADMIN_PASSWORD на стороне PGS.
Ключи, соли, расширения соли и IV должны совпадать с конфигом на стороне PGS.
Значение fs_token_salt_ext должно совпадать с FS_TOKEN_SALT_EXT на стороне PGS.
В файле group_vars/co_setup/extra_vars.yml указать внешний DNS с настроенными записями. Внутренний unbound в устанавливаемой версии 2.4 не резолвил имена компонентов МойОфис из внешнего DNS.
# List of DNS servers that the queries will be forwarded to unbound_forward_addresses:
- "10.10.111.10"
Сертификаты разместить в каталоге install_co/certificates с именами
ca.pem - сертификаты выдающих ЦС
server.crt - сертификат сервера
server.nopass.key - закрытый ключ сертификата
Настройка установки PSN
Считаем, что файлы установки в каталоге inst_psn24
Заполнить файл конфигурации hosts.yml в каталоге inventory
Сертификаты разместить в каталоге inst_psn24/certificates/mo2.fun с именами
ca.pem - сертификаты выдающих ЦС
server.crt - сертификат сервера
server.nopass.key - закрытый ключ сертификата
dkim.key - ключ DKIM
Сгенерировать DKIM сертификат можно, например на https://tools.socketlabs.com/dkim/generator
Настройка установки PGS
Считаем, что файлы установки в каталоге inst_pgs24
Заполнить файл конфигурации hosts.yml
На что обратить внимание:
Параметр APP_ADMIN_LOGIN по умолчанию отсутствует, а он нужен. Добавить:
APP_ADMIN_LOGIN: "app-co"
APP_ADMIN_LOGIN должен совпадать с FS_APP_LOGIN в конфигурации на стороне CO
APP_ADMIN_PASSWORD должен совпадать с FS_APP_PASSWORD в конфигурации на стороне CO
Ключи, соли, расширения соли и IV должны совпадать с конфигами CO и PGS.
Сертификаты разместить в каталоге inst_pgs24/certificates/mo2.fun с именами
ca.pem - сертификаты выдающих ЦС
server.crt - сертификат сервера
server.nopass.key - закрытый ключ сертификата
На этом конфигурация компонентов закончена и можно приступать к установке.
Установка
Порядок установки: CO, затем PSN и, в последнюю очередь, PGS.
Установка CO
Из каталога install_co запустить команду ansible-playbook playbooks/main.yml --diff
Установка PSN
Из каталога inst_psn24 запустить команду ./deploy_psn.sh hosts.yml
Установка PGS
Из каталога inst_pgs24 запустить команду ./deploy.sh hosts.yml
Проверка работоспособности установленного комплекса
Для входа на страничку лендинга необходимо браузером зайти по адресу auth.mo2.fun, указать имя пользователя в формате user@mo2.fun и пароль, принять лицензионное соглашение и вуаля, можно пользоваться почтой, хранилищем и редактором документов МойОфис.
Для администрирования системы необходимо браузером зайти по адресу admin.mo2.fun , указать имя пользователя admin@mo2.fun и пароль и вы - главный перец.
Пароль администратора
Его вы указали в конфигурации PGS
default_tenant:
# required parameters
ADMIN_PASSWORD: "Passw0rd"
Особенность релиза 2.4
В текущей версии 2.4 для всех пользователей, у которых есть доступ к административной панели, например, администратор по умолчанию admin@domain.com, необходимо выполнить сначала стандартную авторизацию и принять соглашение EULA и только потом заходить в админ панель. Иначе не получится принять лицензионное соглашение.
CMD
Для администрирования можно воспользоваться и командной строкой.
Запросить и разобрать токен аутентификации:
RESPOND=$(curl -X POST "https://admin.mo2.fun/adminapi/auth" -d "username=admin@mo2.fun" -d "password=Passw0rd")
TENANT=$(echo $RESPOND | jq -r '.tenant')
TOKEN=$(echo $RESPOND | jq -r '.token')
ID=$(echo $RESPOND | jq -r '.id')
echo $TOKEN; echo $TENANT; echo $ID
где TOKEN - токен доступа
TENANT - имя тенанта
ID - ID тенанта
Вывести список общих папок тенанта:
curl --header "Authorization: $TOKEN" -X GET "https://admin.mo2.fun/adminapi/tenants/$TENANT/corporate" | jq
Но это уже совсем другая история...
Итоги
Мы рассмотрели базовые основы установки комплекса «МойОфис Почта 2» и «Частное Облако 2», которые позволяют сотрудникам обмениваться почтой друг с другом и с внешним миром, а также совместно работать с документами. Надеюсь, эта статья поможет вам освоить новые отечественные продукты, и ваша инфраструктура будет готова к любым вызовам и свершениям. А если вы хотите протестировать решения от МойОфис или узнать больше про опыт установки и применения на индивидуальной консультации, просто оставьте заявку.
Комментарии (9)
OBIEESupport
19.10.2023 10:55Приветствую коллегу по полю преподавания отечественного софта! А чего скриншотов нет того, что почта ходит, а рядом можно написать как права раскидываются. Милый и веселый баг "не примешь лицензионного соглашения - не зайдешь" - абсолютно в точку. Но системные требования тоже нужны на каждый из продуктов.
AlexeyTrofimov Автор
19.10.2023 10:55Почта ходит, документы сохраняются и редактируются, заявленный функционал работает почти весь. Что там скриншотить? Это нужно отдельную статью написать по работе в МойОфис и его администрированию, а здесь я писал именно про установку.
Системные требования не стал указывать, так как они меняются от версии к версии, лучше актуальные у вендора посмотреть. Поставить вышеописанную конфигурацию можно на ВМ с парой vCPU, 4 GB оперативки и гигов сорок диска. Нужно отдавать себе отчёт, что это именно тестовая установка. В боевой системе нужно дублировать и разносить компоненты на разные ВМ, более скрупулёзно отнестись к выделению и назначению дисковых разделов и в целом тщательно продумать архитектуру.
Vold2D
19.10.2023 10:55А как-то упростить процедуру установки нельзя? Хотели протестировать различные альтернативные офисные системы, в том числе "МойОфис". Пролистали инструкции по установке... и желание тестировать как-то сразу пропало. Неужели нельзя, например, для тестов и малонагруженных установок предложить готовый образ виртуалки "всё в одном"?
AlexeyTrofimov Автор
19.10.2023 10:55Насколько я знаю, компоненты МойОфис Частное облако и Почты на одной ВМ не уживаются в силу специфики их архитектуры. А образы трёх ВМ у вендора есть, их можно развернуть в своей системе виртуализации. На текущий момент они доступны тут.
Tamerlan666
19.10.2023 10:55Зачем ставить вместе голый ansible-core и ansible, куда ansible-core уже включен?
Tamerlan666
19.10.2023 10:55Ну, и версия ansible 2.11.6 - серьезно? Скоро 2.16 выходит, если что.
AlexeyTrofimov Автор
19.10.2023 10:55Раз вендор настоятельно просит не старше 2.12, то и ставим не старше 2.12. Ну и МойОфис обновляется, возможно уже и более свежий ansible использует сейчас.
Хотя заглянул в свежую документацию, а там пока всё то же: "На сервер-оператор должен быть инсталлирован Ansible версии 4.4.* (соответствует пакету ansible-core 2.11)"
Cheburator2033
А сравнительную таблицу существующих решений слабо показать? В деньгах? Функциональности? ????
AlexeyTrofimov Автор
У нас есть эти сравнения но они не являются темой этой статьи. Обращайтесь в СисСофт :)