發表於 程式分享

在Docker內的gitlab container如何使用Host主機的sendmail服務寄送信件(email)

因為還在試gitlab的功能,建在ubuntu上的Docker內的gitlab container要寄信,gitlab document有很詳細的說明https://docs.gitlab.com/omnibus/settings/smtp.html,但因在公司除了透過公司的exchange server外(但要在exchange上設定,還在測試階段,故不想動到此部份),因此試了很久於gitlab container設定,終於成功了,說明大約如下

1.docker啟動時需先傳入docker host ip值

(1)取得docker host ip
echo $(ifconfig | grep -E “([0-9]{1,3}.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk ‘{ print $2 }’ | cut -f2 -d: | head -n1)
Ex.172.18.0.1

(2)啟動gitlab docker,有用docker 或 docker-compose
a.用docker傳送docker host ip
docker run -it –name gitlab –add-host=’dockerhost:172.18.0.1′ gitlab/gitlab-ce:latest

b.用docker-compose傳送docker host ip
b-1)修改docker-compose.yml
增加
extra_hosts:
– “dockerhost: 172.18.0.1″

(3)查看gitlab的/etc/hosts有加上dockerhost

2.host server的sendmail要設定接受gitlab docker container的信做寄送
(1)開啟 sendmail 25 port 可連線 (以root登入)
vi /etc/mail/sendmail.cf
#註解以下
#O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
#新增以下
O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA

service sendmail restart (重啟sendmail服務)
telnet localhost 25 (確認是否已開啟25 port)

(2)修改允許relay(轉信) 清單
vi /etc/mail/access
最後一行加上
Connect:172.10 RELAY

3.gitlab container設定透過host的sendmail寄信

(1)調整container內的gitlab.rb設定檔
a.設定smtp
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “dockerhost"
gitlab_rails[‘smtp_port’] = 25
#gitlab_rails[‘smtp_user_name’] = “"
#gitlab_rails[‘smtp_password’] = “"
gitlab_rails[‘smtp_domain’] = “dockerhost"
#gitlab_rails[‘smtp_authentication’] = “none"
gitlab_rails[‘smtp_openssl_verify_mode’] = ‘none’
gitlab_rails[‘smtp_enable_starttls_auto’] = false
gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘smtp_ssl’] = false
gitlab_rails[‘smtp_force_ssl’] = false
#gitlab_rails[‘smtp_pool’] = false

b.設定寄件者
gitlab_rails[‘gitlab_email_from’] = ‘grace@xxx.com.tw’
gitlab_rails[‘gitlab_email_display_name’] = ‘Grace’

c.設定gitlab admin寄件者
alertmanager[‘admin_email’] = ‘grace@xxx.com.tw’

(2)gitlab container重新讀取gitlab.rb
docker exec -it gitlab bash
gitlab-ctl reconfigure

補充1: host主機sendmail手動寄測試機
telnet localhost 25
ehlo localhost (跟主機打招呼)
mail from: “Grace"<grace@mail.xxx.com.tw> (寄件者)
rcpt to: <kevin@mail.xxx.com.tw> (收件者)
data (要開始寫信了)
This is a test (信件內容)
. (結束)
quit (離開)

補充2: gitlab container手動寄測試信
docker exec -it gitlab bash
telnet [docker host ip] 25 (有成功表示F/W有通,才往下執行)
gitlab-rails console
Notify.test_email(“grace@xxxx.com.tw", “Title", “Message").deliver_now

發表留言