16
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker版Gitlabのインストール(メール設定含む)

Posted at

環境

ホストマシン: 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としてはメールが送信できることが確認できた。
次に転送用の設定を行う。

/etc/postfix/main.cf
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もコンテナ化したい。

16
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?