Перейти к основному содержимому

Как настроить отправку почты через Postbox для Self-hosted GitLab

· 4 мин. чтения

Установка 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-ключ для отправки почты.

  1. Создайте сервисный аккаунт.
  2. Добавьте ему роль postbox.sender.
  3. Создайте 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 и зарегистрировать нового пользователя. После регистрации, на почту придет письмо с подтверждением. Если письмо пришло, значит все настроено правильно.