docker-airflowでログイン機能を設定したい人向け。
docker-airflowの場合、公式ドキュメントの手順通り実行すると、スクリプトでのユーザー登録でこける。
sqlite3.OperationalError: no such table: users
なので、自力でpasswordのハッシュ値生成して、直接ユーザー登録する必要があるので、手順をメモ。
CeleryExecutorの前提で書くけど、LocalExecutorでも同じだと思う。
1. airflow.conf を編集する
${PROJECT}/config/airflow.cnf
の [webserver]
の項目のauthの設定(airflow-1.10.9ではL300あたり)を以下のようにする
~略~
[webserver]
~略^
# Set to true to turn on authentication:
# https://airflow.apache.org/security.html#web-authentication
authenticate = True
auth_backend = airflow.contrib.auth.backends.password_auth
とりあえず、これでログイン必須になる。アクセスするとログイン画面は表示される。
2. パスワードのハッシュを取得
pythonスクリプトで取得する。ハッシュが取れればなんでもok。
# なければ、flask-bcryptをインストール
pip install flask-bcrypt
# pythonスクリプトを実行しハッシュを取得
python
>>> from flask_bcrypt import generate_password_hash
>>> generate_password_hash('your_password', 12)
# 出力されたハッシュ値をメモ
3. postgreSQLに直接ユーザー情報を登録する
直接postgreSQLでuser登録を行う。
# コンテナ一覧表示
docker ps
# postgreSQLのコンテナにsshログイン
docker exec -it ${PSQL_CONTAINER_ID} bash
# airflowユーザーでpsqlにログイン
psql -U airflow
# ユーザーをinsert
INSERT INTO users (username, email, superuser, password) VALUES ('your_name', 'your_email', True, '2で取得したハッシュ値');
これでdockerを再ビルドして、起動すればok。
参考
Fail to create user on users table on Docker Webserver Container