Mastodon(Docker環境)でElasticsearchを有効にした時のメモ
この記事は、2018/11/5 00:51にQrunchにて公開したエントリの再公開版となります。
内容は当時のままですので、古くなっているはずです。予めご了承ください。
基本的には以下の記事を参考にして作業した。
- https://blog.theboss.tech/2018/04/01/elasticsearch-on-mastodon-docker/
作業環境はこんな感じ。
- EC2 t3.small
- Amazon Linux 2
Elasticsearchの有効化
- docker-compose.yml のesサービスのコメントを解除する。
- t3.smallくらいだとメモリが足りないので、ES_JAVA_OPTS は -Xms256M -Xmx256M くらいに落としたほうが安全かもしれない。
- webサービス側に書かれている depends_on も忘れずに。
- ボリュームマウントするディレクトリを作成。デフォルトで ./elasticsearch に作成されるが、所有者を 1000:1000 にしておく。
これでいけるわけがなく、一部は上記記事のトラブルシューティングと重なるのだが、がっつりハマってしまった。
vm.max_map_countの変更
このまま docker-compose up -d してもエラーが発生し、コンテナが正常に起動してくれなかった。
エラーログを残し忘れたが、vm.max_map_count の変更によって解決。
# 現在値を確認 $ sysctl -a | grep vm.max_map_count # ... 略 ... vm.max_map_count = 65530 # ... 略 ... # 十分な値を設定 $ sudo sysctl -w vm.max_map_count=262144 $ echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
ファイルディスクリプタ上限の変更
これでいけると思っていたが、まだエラーが発生していた。ファイルディスクリプタの上限が低いとな……?
es_1 | ERROR: [1] bootstrap checks failed es_1 | [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
ホストの /etc/security/limits.conf の変更を試したが効かず、docker-compose.yml を編集することで意図通りとなった。
es:
restart: always
image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
+ ulimits:
+ nofile:
+ soft: 65536
+ hard: 65536
networks:
- internal_network
起動
あとは参考記事と同様に、初回に実行するタスクを走らせてからコンテナを上げるだけ。
かなり重いので、低スペックな環境では一旦Mastodonを落としておくべき。
$ docker-compose run --rm web rails chewy:deploy $ docker-compose up -d
コメント
コメントを投稿