Gitlab Docker 的 SMTP 設定


這篇是延續之前《GitLab 系統架設簡單紀錄》的簡單紀錄。

在該文章中,基本上算是已經成功地透過 Gitlab 官方的 Docker Image 架設了一個可以正常運作的 Gitlab Server 了~不過,實際在使用上,還是有一些問題;其中,最主要的問題,就是沒辦法寄出通知信。

基本上,在官方的教學文件(官網)裡面,已經有說明該如何設定 SMTP 了;而且他也很貼心地,針對各大家服務的設定,都提供了設定的範本!理論上只要複製過來,修改帳號密碼等資訊就好了~

以 GMail 來說,設定就是:

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "my.email@gmail.com"
gitlab_rails['smtp_password'] = "my-gmail-password"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

不過由於 GMail 似乎有一些限制(參考),所以他們似乎比較不建議就是了。

但是,Heresy 這邊在照著這樣設定後,都還是沒辦法成功地寄信;而由於和 Gitlab 與 Docker 的熟系度也不夠,所以也不太知道到底該怎麼找問題…

後來,是發現 Gitlab 在《Debugging Tips》這份文件,有告訴使用者當沒辦法記性的時候,該怎麼去找問題。

他的基本概念,就是透過「gitlab-rails」這個命令,來進入 Gitlab Rails 的 console、發送測試信,來確認其結果。

由於 Heresy 是使用 Docker,所以要這樣找問題的話,要先透過

docker exec –it gitlab bash

這個指令,進入 Docker 的 bash 來做之後的操作。

進入 Gitlab 的 Docker 環境後,要先透過

gitlab-rails console

這個命令,來開啟 Gitlab Rails 的 Console。

之後,可以執行「ActionMailer::Base.smtp_settings」,來確認目前所讀到的 SMTP 設定是否正確。

如果都正確的話,則可以透過

Notify.test_email("test@mail.com", "Title", "Message").deliver_now

這個指令,來寄發測試信。


而在 Heresy 這邊,一開始的錯誤訊息,都一直是

Net::ReadTimeout (Net::ReadTimeout)

又查了很久後,才發現,這應該是在 Docker 內的 DNS 有問題、導致沒辦法連到 SMTP 造成的。

這邊比較麻煩的,是由於 Gitlab 的 Docker 裡面很多東西都沒有(沒有 ifconfig、nslookup、ping、telnet…),所以也很難在裡面繼續做測試…

後來,則是參考《Fix Docker’s networking DNS config》這篇文章,在主機(不是 Docker 內部),建立一個「/etc/docker/daemon.json」檔案,在裡面寫入:

{
 
"dns": ["10.0.0.2", "8.8.8.8"]
}

然後,再執行

service docker restart

來重新啟動 Docker,理論上就可以了~

Heresy 這邊在這樣修改後,Gitlab Docker 的 SMTP 就正常了。

不過,比較奇怪的是,Heresy 也試過在建立 Docker 的時候,加上「–dns 8.8.8.8」這個參數來指定 DNS Server,不過似乎沒有用?這就不知道是什麼原因了…

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.