Как настроить отправку почты через Postbox для Self-hosted GitLab
Установка GitLab
Для начала, установим GitLab. Для этого возьмем виртуальную машину на Ubuntu 24.04.
Зайдем на нее и выполним следующие команды из официальной документации:
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
К сожалению на этом моменте на придется закончить подглядывать в документацию, так как репозиторий GitLab не доступен в России. Поэтому, давайте установим GitLab, скачав пакет с официального сайта. Хочу отметить, что я использую самую новую версию GitLab на момент написания статьи. Поэтому, если вы хотите установить другую версию, то замените ссылку на пакет в команде ниже. Ссылку на пакет можно взять здесь.
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/noble/gitlab-ce_17.8.1-ce.0_amd64.deb/download.deb
Теперь установим пакет:
sudo dpkg -i gitlab-ce_17.8.1-ce.0_amd64.deb
Чтобы мы могли попасть на GitLab по адресу, нужно задать DNS-запись. Для этого в консоли Yandex Cloud перейдем в раздел DNS
и создадим новую запись типа A. В поле Имя укажем gitlab
, а в поле Значение — IP-адрес нашей виртуальной машины.
Настройка почты
Конфигурация Postbox
Для отправки почты через Postbox, нам нужно:
1. Создать адрес в Postbox.
Для этого в консоли Yandex Cloud перейдем в раздел Postbox и создадим новый адрес.
Вам нужно будет указать домен — этот домен будет использоваться для отправки почты. В моем случае это gitlab.nikolaymatrosov.ru
.
Именно его вы увидите в письмах, которые придут на почту.
Так же вам нужно будет указать селектор. Это строка, которая будет добавлена к домену. Например, если вы указали селектор
mail
, то адрес будет выглядеть как mail._domainkey.gitlab.nikolaymatrosov.ru
. Это нужно для создания DNS-записи и для
того, чтобы вы могли одновременно использовать несколько сервисов для отправки почты с одного домена.
Далее вам потребуется приватный ключ. Чтобы его сгенерировать, выполните команду:
openssl genrsa -out privatekey.pem 2048
Теперь выведите публичный ключ:
cat privatekey.pem
Скопируйте его и вставьте в поле Публичный ключ.
2. Создать DNS-запись для почтового домена.
Я предполагаю, что домен уже у вас куплен, делегирован на сервера Облака, а в консоли заведена зона для него. Если же нет, то вот ссылка на документацию, как это сделать.
Для того чтобы Postbox мог отправлять почту от вашего домена, вам нужно создать DNS-запись. Для этого перейдите в раздел DNS в консоли Yandex Cloud и создайте новую запись типа TXT.
В поле Имя укажите mail._domainkey.gitlab
(обратите внимание, что так как мы заводим запись в зоне, то к адресу
автоматически добавится зона. В моем случае nikolaymatrosov.ru
.).
В поле Значение вставьте значение, начинающееся с v=DKIM1;...
, которое вы получили при создании адреса в Postbox.
Возьмите его, как порекомендует система, в двойные кавычки.
Теперь можно создать запись и вернуться в Postbox. Нажать там на кнопку Проверить адрес. Если все сделано правильно, то вы увидите
зеленый статус верификации Success
.
3. Создать API-ключ для отправки почты.
- Создайте сервисный аккаунт.
- Добавьте ему роль
postbox.sender
. - Создайте API-ключ и скопируйте его. Для большей безопасности, вы можете ограничить скоуп прав ключа той же ролью
postbox.sender
.
Конфигурация GitLab
Откроем на виртуальной машине файл конфигурации GitLab:
sudo nano /etc/gitlab/gitlab.rb
Найдем и раскомментируем строку с настройкой external_url
и укажем адрес нашего GitLab:
external_url 'http://gitlab.nikolaymatrosov.ru'
Теперь добавим настройки для отправки почты через Postbox, как указано в инструкции Postbox и GitLab. Для этого найдем и раскомментируем следующие строки:
### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "postbox.cloud.yandex.net"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "API_KEY"
gitlab_rails['smtp_password'] = "AQVN3***"
gitlab_rails['smtp_domain'] = "gitlab.nikolaymatrosov.ru"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = false
# gitlab_rails['smtp_pool'] = false
Часть ключа я заменил на звездочки. Вам нужно вставить свой ключ, который мы создали выше.
Дополнительно можно настроить отправку почты от имени корректного адреса. Это поможет избежать попадания писем в спам.
##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'gitlab@gitlab.nikolaymatrosov.ru'
gitlab_rails['gitlab_email_display_name'] = 'Cloud Gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@gitlab.nikolaymatrosov.ru'
Далее настроим hostname и перезапустим GitLab:
hostnamectl set-hostname gitlab.nikolaymatrosov.ru
sudo gitlab-ctl reconfigure
Проверка
Теперь можно зайти на GitLab по адресу http://gitlab.nikolaymatrosov.ru/users/sign_up
и зарегистрировать нового пользователя. После
регистрации, на почту придет письмо с подтверждением. Если письмо пришло, значит все настроено правильно.