GitLab Community Edition 13.10.3の送信メールサーバ設定
目次
概要
ラズパイ4にインストールしたGitLabを使い始めましたが、 インストールしただけではメールが飛んでいないことに気づき、追加で設定しました。 基本的には家庭内でのみの利用を想定したラズパイ4上のGitLab環境なので、 メール送信機能は必要ないかもしれません。 ただ、ある程度利用方法を習得したら仕事でもチーム開発のツールとして利用できないか検討したいため、 メールサーバ機能も設定することにしました。 メールには送信と受信の機能がありますが、メールでの新規メンバーの招待や マージリクエストなどの通知を送信するために送信メールサーバ機能(SMTP)のみを意識して設定することにしました。 本手順の設定でさくらインターネットのSMTPサーバ経由でメールを送信することができるようになりましたが、 必要十分な設定となっているかは分からず、ひょっとしたら一部冗長な設定があるかもしれません。
構成
サーバ・ハードウェア構成
ハードウェアはRaspberry Pi 4 Model Bのメモリ4GBモデルを使用しました。 ハードウェアスペックは以下のとおりです。 記載を省略していますが、モニタ、キーボード、マウスもラズパイに接続しています。
項目 | 内容 |
---|---|
SoC | Broadcom BCM2711 |
CPU | ARM Cortex-A72 1.5GHz |
GPU | Broadcom VideoCore VI Dual Core 500MHz |
メモリ | LPDDR4 SDRAM 4GB |
有線ネットワーク | Gigabit Ethernet |
microSDカード(システム用) | microSDHCカード 32GB |
サーバ・ソフトウェア構成
OS
CentOS Linux release 8.2.2004 (Core) aarch64
ソフトウェア・パッケージ
- postfix-3.3.1-12.el8.aarch64.rpm
- gitlab-ce-13.10.3-ce.0.el8.aarch64.rpm
操作端末構成
OS
Windows 10 Pro バージョン 20H2
ソフトウェア
- Microsoft Edge バージョン 90.0.818.51 (公式ビルド) (64 ビット)
環境構築
送信メールサーバ設定
設定ファイルの編集
GitLabの設定は gitlab.rb ファイルに集約されていますので、この設定ファイルを編集します。 メールサーバの設定はデフォルトではコメントアウトされて無効になっています。 コメントアウトを外して設定値を変更します。
# cd /etc/gitlab/ # vi gitlab.rb
※以下、該当箇所のみ変更※ # gitlab_rails['smtp_enable'] = true # gitlab_rails['smtp_address'] = "smtp.server" # gitlab_rails['smtp_port'] = 465 # gitlab_rails['smtp_user_name'] = "smtp user" # gitlab_rails['smtp_password'] = "smtp password" # gitlab_rails['smtp_domain'] = "example.com" # gitlab_rails['smtp_authentication'] = "login" # gitlab_rails['smtp_enable_starttls_auto'] = true # gitlab_rails['smtp_tls'] = false ↓変更 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "example.sakura.ne.jp" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "noreply@example.sakura.ne.jp" gitlab_rails['smtp_password'] = "P@ssw0rd" gitlab_rails['smtp_domain'] = "example.sakura.ne.jp" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false ※trueでは送信できなかった
# gitlab_rails['smtp_openssl_verify_mode'] = 'none'
↓変更
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
↓変更
gitlab_rails['smtp_ca_path'] = "/etc/pki/tls/certs"
gitlab_rails['smtp_ca_file'] = "/etc/pki/tls/certs/ca-bundle.crt"
# gitlab_rails['gitlab_email_from'] = 'example@example.com'
# gitlab_rails['gitlab_email_display_name'] = 'Example'
# gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
↓変更
gitlab_rails['gitlab_email_from'] = 'noreply@example.sakura.ne.jp'
gitlab_rails['gitlab_email_display_name'] = 'Home GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.sakura.ne.jp'
GitLabの再構成
GitLabの設定ファイルの編集が完了したら再構成を行います。 GitLabインストール後の初回の再構成は16分程度かかりましたが、 2回目以降は設定ファイルの編集した差分だけを処理しているのか2分弱で終了しました。
# gitlab-ctl reconfigure Starting Chef Infra Client, version 15.14.0 resolving cookbooks for run list: ["gitlab"] Synchronizing Cookbooks: - gitlab (0.0.1) - package (0.1.0) - logrotate (0.1.0) - postgresql (0.1.0) - redis (0.1.0) - monitoring (0.1.0) - registry (0.1.0) - mattermost (0.1.0) - consul (0.1.0) - gitaly (0.1.0) - praefect (0.1.0) - gitlab-kas (0.1.0) - letsencrypt (0.1.0) - gitlab-pages (0.1.0) - nginx (0.1.0) - runit (5.1.3) - acme (4.1.1) (中略) (up to date) Recipe: gitlab::puma * runit_service[puma] action restart (up to date) * runit_service[puma] action restart (up to date) Recipe: gitlab::sidekiq-cluster * sidekiq_service[sidekiq] action restart Recipe:* service[sidekiq] action nothing (skipped due to action :nothing) * runit_service[sidekiq] action restart (up to date) (up to date) Recipe: gitlab::gitlab-rails * execute[clear the gitlab-rails cache] action run - execute /opt/gitlab/bin/gitlab-rake cache:clear Recipe: monitoring::alertmanager * runit_service[alertmanager] action restart (up to date) Running handlers: Running handlers complete Chef Infra Client finished, 11/805 resources updated in 01 minutes 44 seconds gitlab Reconfigured!
メールの送信確認
メールサーバの設定が完了したら試しにメールを送信してみます。 GitLabのダッシュボードにログインして、グループに新規のメンバーを招待する機能を利用し、 メールアドレスで招待を行うと入力したメールアドレスにメールが送信されます。 以下の例ではメールアドレスに developer@example.com と入力していますが、 実際は自身が受け取れる任意のメールアドレスを入力して試してください。
GitLabでのメール送信では、成功の時も失敗の時も /var/log/maillog にはログは出力されないようです。 GitLabの設定が間違っていてメールが正常に送信されなかった際には、 /var/log/gitlab/gitlab-rails/production.log ファイルを見て調査・対応しました。
メール送信エラーの改善事例
GitLabの(と言うと語弊があるかもしれませんが)送信メールサーバの設定には少し苦労しました。 gitlab.rb の設定項目の意味があまり明確に分からなかったことと、エラー調査で見た production.log (Ruby on Railsのログなのかな?)の出力形式に馴染みがなかったことが理由でした。 私の場合はproduction.logに出力されていた「OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: wrong version number)」 を元にググって調べました。 結果的に gitlab_rails['smtp_tls'] の値を true から false に変更して再構成したらメールが飛ぶようになりました。 リレー先のSMTPサーバによりけりだと思いますが、一例として。
■調査したログファイル
/var/log/gitlab/gitlab-rails/production.log
■メール送信時に出力されていたログメッセージ
[ActiveJob] [ActionMailer::MailDeliveryJob] [4ad42a82-9b4a-438b-a509-d86765070ba5] Delivered mail 6091ce56d20a0_16ea6300d4155b@localhost.mail (107.0ms)
[ActiveJob] [ActionMailer::MailDeliveryJob] [4ad42a82-9b4a-438b-a509-d86765070ba5] Error performing ActionMailer::MailDeliveryJob (Job ID: 4ad42a82-9b4a-438b-a509-d86765070ba5) from Sidekiq(mailers) in 781.94ms: OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: wrong version number):
■変更して改善した内容
gitlab_rails['smtp_tls'] = true から false に変更