Last Updated on 2022年9月16日 by かんりにん
redashへ、パスワードリセット時のリマインダメール通知を有効にするため、メール周りの設定を追加。
(googleアカウントと連携していない環境でのメモです)
参考:
Redash: Mail Configuration
StackOverflow: SMTP AUTH extension not supported by server
環境はAWS EC2にてredash用のAMIを利用。
redash AMIを使う場合は通常のsupervisor環境となり、docker環境での実行ではないので、ご注意!
AMI redash-2-0-0-b2990-ap-northeast-1 (ami-fde8199b)
OS Ubuntu
▼1.設定
/etc/postfix/main.cf
ここは普通に変更。ローカルから送信するだけなので”inet_interfaces = localhost”、IPv6は使わないので”inet_protocols = ipv4″へ変更。
< myhostname = ip-10-10-10-10.ap-northeast-1.compute.internal --- > #myhostname = ip-10-10-10-10.ap-northeast-1.compute.internal > myhostname = mail.example.com > mydomain = example.com < myorigin = /etc/mailname < mydestination = $myhostname, ip-10-10-10-10.ap-northeast-1.compute.internal, localhost.ap-northeast-1.compute.internal, localhost --- > myorigin = $mydomain > mydestination = $myhostname, mail.example.com, localhost.ap-northeast-1.compute.internal, localhost < inet_interfaces = all < inet_protocols = all --- > inet_interfaces = localhost > inet_protocols = ipv4
/opt/redash/.env
こちらは、/opt/redash/current/redash/settings.py にデフォルト値があるので
ホスト名やユーザー名のみ設定値を入力。
参考用:settings.pyの設定値
149 # Mail settings: 150 MAIL_SERVER = os.environ.get('REDASH_MAIL_SERVER', 'localhost') 151 MAIL_PORT = int(os.environ.get('REDASH_MAIL_PORT', 25)) 152 MAIL_USE_TLS = parse_boolean(os.environ.get('REDASH_MAIL_USE_TLS', 'false')) 153 MAIL_USE_SSL = parse_boolean(os.environ.get('REDASH_MAIL_USE_SSL', 'false')) 154 MAIL_USERNAME = os.environ.get('REDASH_MAIL_USERNAME', None) 155 MAIL_PASSWORD = os.environ.get('REDASH_MAIL_PASSWORD', None) 156 MAIL_DEFAULT_SENDER = os.environ.get('REDASH_MAIL_DEFAULT_SENDER', None) 157 MAIL_MAX_EMAILS = os.environ.get('REDASH_MAIL_MAX_EMAILS', None) 158 MAIL_ASCII_ATTACHMENTS = parse_boolean(os.environ.get('REDASH_MAIL_ASCII_ATTACHMENTS', 'false')) 159 160 HOST = os.environ.get('REDASH_HOST', '')
/opt/redash/.env への設定値
export REDASH_MAIL_SERVER="" export REDASH_MAIL_PORT="" export REDASH_MAIL_USE_TLS="" export REDASH_MAIL_USE_SSL="" export REDASH_MAIL_USERNAME="" export REDASH_MAIL_PASSWORD="" export REDASH_MAIL_DEFAULT_SENDER="redash@example.com" export REDASH_HOST="https://redash.example.com/"
▼2.設定適用・デーモン再起動
上記の.envとmain.cfの変更後、supervisorとpostfixデーモンをrestart。
– postfix
$ sudo /etc/init.d/postfix restart
– supervisor
$ sudo supervisorctl restart all
→celeryもredash_serverもまとめて再起動。
▼3.エラー発生
しかし、エラーが発生。
ログは/var/log/supervisor/redash_celery-stderr—supervisor-*****.logから抜粋。
ValueError: Couldn't import u'redash.worker': invalid literal for int() with base 10: '' Traceback (most recent call last): File "/usr/local/bin/celery", line 11, in sys.exit(main()) File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 30, in main main() File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 81, in main cmd.execute_from_commandline(argv) File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 793, in execute_from_commandline super(CeleryCommand, self).execute_from_commandline(argv))) File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 309, in execute_from_commandline argv = self.setup_app_from_commandline(argv) File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 469, in setup_app_from_commandline self.app = self.find_app(app) File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 489, in find_app return find_app(app, symbol_by_name=self.symbol_by_name) File "/usr/local/lib/python2.7/dist-packages/celery/app/utils.py", line 235, in find_app sym = symbol_by_name(app, imp=imp) File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 492, in symbol_by_name return symbol_by_name(name, imp=imp) File "/usr/local/lib/python2.7/dist-packages/kombu/utils/__init__.py", line 100, in symbol_by_name sys.exc_info()[2]) File "/usr/local/lib/python2.7/dist-packages/kombu/utils/__init__.py", line 96, in symbol_by_name module = imp(module_name, package=package, **kwargs) File "/usr/local/lib/python2.7/dist-packages/celery/utils/imports.py", line 101, in import_from_cwd return imp(module, package=package) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/opt/redash/redash.2.0.0.b2990/redash/__init__.py", line 16, in from redash import settings File "/opt/redash/redash.2.0.0.b2990/redash/settings.py", line 151, in MAIL_PORT = int(os.environ.get('REDASH_MAIL_PORT', 25))
確認したところ、/opt/redash/.envへ設定した変数に明示的に値を入れる必要がありそう。
(もしかしてsetting.pyのデフォルト値が反映されてない??)
ということで設定変更。
▼4.設定修正(環境変数ファイル)
/opt/redash/.env を以下の通り変更
export REDASH_MAIL_SERVER="localhost" export REDASH_MAIL_PORT="25" export REDASH_MAIL_USE_TLS="false" export REDASH_MAIL_USE_SSL="false" export REDASH_MAIL_USERNAME="None" export REDASH_MAIL_PASSWORD="None" export REDASH_MAIL_DEFAULT_SENDER="redash@example.com" export REDASH_HOST="https://redash.example.com/"
上記を適用するため、supervisorを再起動。
その後、確認するも、今度はpostfix側でエラー。
▼5.設定変更後のエラー
[2018-03-27 03:28:52,914: ERROR/Worker-4] redash.tasks.send_mail[d3fe6491-ca63-4b6b-aabc-9847984bf0cc]: Failed sending message: Reset your password Traceback (most recent call last): File "/opt/redash/redash.2.0.0.b2990/redash/tasks/general.py", line 57, in send_mail mail.send(message) File "/usr/local/lib/python2.7/dist-packages/flask_mail.py", line 491, in send with self.connect() as connection: File "/usr/local/lib/python2.7/dist-packages/flask_mail.py", line 144, in __enter__ self.host = self.configure_host() File "/usr/local/lib/python2.7/dist-packages/flask_mail.py", line 165, in configure_host host.login(self.mail.username, self.mail.password) File "/usr/lib/python2.7/smtplib.py", line 585, in login raise SMTPException("SMTP AUTH extension not supported by server.") SMTPException: SMTP AUTH extension not supported by server.
↓この部分がよく分からなかったが…
raise SMTPException("SMTP AUTH extension not supported by server.") SMTPException: SMTP AUTH extension not supported by server.
main.cfをよく見たところ、redash AMIのpostfixはデフォルトでTLS有効、SMTP認証有効となっていたので
ここをひとまず無効にすることに。
よく考えたらredash(python)側では”REDASH_MAIL_USE_TLS=”false””にしているので、そりゃエラー出ますね、と。
▼6.設定を再度修正
/etc/postfix/main.cf 設定変更
smtp認証とTLSを無効に。
23c23,24
< smtpd_use_tls=yes --- > #smtpd_use_tls=yes > smtpd_use_tls=no 30,31c31,34 < smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination --- > #smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
/opt/redash/.env 設定変更
SMTP認証を無効にしたので、redash側の変数”REDASH_MAIL_USERNAME”と”REDASH_MAIL_PASSWORD”も無効に。
export REDASH_MAIL_SERVER="localhost" export REDASH_MAIL_PORT="25" export REDASH_MAIL_USE_TLS="false" export REDASH_MAIL_USE_SSL="false" # export REDASH_MAIL_USERNAME="None" # export REDASH_MAIL_PASSWORD="None" export REDASH_MAIL_DEFAULT_SENDER="redash@example.com" export REDASH_HOST="https://redash.example.com/"
上記で設定後、postfixおよびsupervisorを再起動し、配信成功。
Mar 27 03:46:17 ip-10-10-10-10 postfix/smtpd[5890]: connect from localhost[127.0.0.1] Mar 27 03:46:17 ip-10-10-10-10 postfix/smtpd[5890]: 3A7C413BD68: client=localhost[127.0.0.1] Mar 27 03:46:17 ip-10-10-10-10 postfix/cleanup[5893]: 3A7C413BD68: message-id=<15********20.5**3.2****************80@ip-10-10-10-10.ap-northeast-1.compute.internal> Mar 27 03:46:17 ip-10-10-10-10 postfix/qmgr[5888]: 3A7C413BD68: from=<redash@example.com>, size=14586, nrcpt=1 (queue active) Mar 27 03:46:17 ip-10-10-10-10 postfix/smtpd[5890]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5 Mar 27 03:46:18 ip-10-10-10-10 postfix/smtp[5894]: 3A7C413BD68: to=<test@example.net>, relay=mail.example.net[203.0.113.128]:25, delay=1.3, delays=0.01/0.01/0.56/0.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1522122378 z2si221288pfh.195 - gsmtp) Mar 27 03:46:18 ip-10-10-10-10 postfix/qmgr[5888]: 3A7C413BD68: removed
▼7.まとめ:
- redashの環境変数ファイル /opt/redash/.env には明示的に変数を入れること
- postfixのTLS、SMTP認証は事前に確認して合わせましょう
今回はEC2のredash AMIを使い、かつローカル配信だけなので無効にしてしまったが、本来なら有効にしておくのが適切です。