環境
ホストマシン: CentOS Linux release 7.4.1708 (Core)
Docker: Docker version 17.12.1-ce
gitlab: GitLab Community Edition 10.5.3
インストール
インストール方法やコンテナ版の注意点など
https://docs.gitlab.com/omnibus/docker/
公式イメージをそのまま使用して起動。
[root@ddauto ~]# docker run --detach \
--hostname xxx.xxx.xxx.xxx \
--publish 443:443 --publish 80:80 --publish 10022:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
# 起動にかなり時間がかかるので、以下のコマンドでウォッチ
[root@ddauto ~]# docker logs -f gitlab
起動後、ブラウザからhttp://ホストマシンのIPにアクセスして確認。
メール通知設定
この状態では、新規ユーザがRegisterした際に、メールでConfirmしてくださいと言われるがメールが来ないので、その設定を行う。
※rootでログインして、Admin画面からユーザのConfirmを行うことで暫定的には回避できるが、面倒なのできちんと設定する。
始めはGitlabがコンテナなので、SMTPもコンテナで構築したかったが、SMTPのコンテナとしてよいものが見つからず、自分で作るとCentOS丸ごとになって重いので、ホストマシンにデフォルトで入っているpostfixを使用する。
postfix設定
# postfixがインストール、起動されていることの確認
[root@ddauto ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2018-03-09 19:19:54 JST; 1 weeks 4 days ago
# 他のMTAが存在しない、もしくはpostfixがMTAとして使用される設定になっていることの確認
[root@ddauto ~]# alternatives --config mta
There is 1 program that provides 'mta'.
Selection Command
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.postfix
Enter to keep the current selection[+], or type selection number:
# メールが送れることの確認
[root@ddauto ~]# sendmail <宛先メールアドレス>
From bar@bar.com
To <宛先メールアドレス>
Subject Test
Test mail for postfix
.
#
# tail -f /var/log/maillog
Mar 21 12:46:32 ddauto postfix/pickup[17124]: A732941A0688: uid=0 from=<root>
Mar 21 12:46:32 ddauto postfix/cleanup[19859]: A732941A0688: message-id=<20180321034632.A732941A0688@ddauto.brs.local>
Mar 21 12:46:32 ddauto postfix/qmgr[17125]: A732941A0688: from=<root@ddauto.brs.local>, size=307, nrcpt=1 (queue active)
Mar 21 12:46:37 ddauto postfix/smtp[19861]: A732941A0688: to=<宛先メールアドレス>, relay=<リレー先のメールサーバ>:25, delay=24, delays=20/0.01/4.1/0.55, dsn=2.0.0, status=sent (250 2.0.0 w2L3kVDS014160 Message accepted for delivery)
Mar 21 12:46:37 ddauto postfix/qmgr[17125]: A732941A0688: removed
これでMTAとしてはメールが送信できることが確認できた。
次に転送用の設定を行う。
myhostname = xxx.yyy.com <メールサーバーのホスト名>
mydomain = yyy.com <メールアドレスのアットマーク以降に現れるドメイン名>
myorigin = $mydomain <このメールサーバーから送信されるメールで利用されるドメイン名>
inet_interfaces = all <メールを受信するネットワークインターフェース>
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain <送られてきた(受信した)メールのうち、このサーバーで受け取るべきドメイン>
mydestinationは、ここに指定した宛先のメールはホストマシンが受け取る(転送しない)という設定なので、最終の宛先メールアドレスのドメインをここに指定してはいけない(ここで少しハマった)
編集後、postfixの再起動が必要
[root@ddauto ~]# systemctl restart postfix
gitlabの設定
root@gitlab:/# vi /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "ホストマシンのIPアドレス"
gitlab_rails['smtp_port'] = 25
root@gitlab:/# gitlab-ctl reconfigure
gitlabからのテスト。gitlabのイメージはtelnetはおろかpingすら使用不可なので、以下の方法で確認した。
参考
root@gitlab:/# gitlab-rails console production
irb(main):002:0* ActionMailer::Base.smtp_settings
=> {:address=>"10.32.7.40", :port=>25, :openssl_verify_mode=>"none", :ca_file=>"/opt/gitlab/embedded/ssl/certs/cacert.pem"}
irb(main):003:0> Notify.test_email('送信したいメールアドレス', 'Hello', 'test message').deliver_now
Errno::EHOSTUNREACH: No route to host - connect(2) for "10.32.7.40" port 25
失敗。CentOS7でFirewallが有効になっているため。Firewall自体を無効化すると、gitlabコンテナが起動しなくなるので、25ポートだけ空ける。
[root@ddauto ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# zoneにどのポートやサービスを許可、拒否するか定義し、それをインターフェースに当てはめるという仕組みらしい
[root@ddauto ~]# firewall-cmd --permanent --zone=public --add-port=25/tcp
[root@ddauto ~]# firewall-cmd --reload
# permanentオプションをつけると再起動でも保持されるが、reloadは必要になる。
[root@ddauto ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: dhcpv6-client ssh
ports: 25/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
最後にコンテナイメージを再起動。これをしないとなぜかメールが送れなかったので。
[root@ddauto ~]# docker restart gitlab
改善点
gitlabからホストマシンへは外部IPアドレスを使っているので、内部IPアドレスの方がよさそう。
リソースに余裕があれば、SMTPもコンテナ化したい。