みなさんはneo4jをどの環境で使ってますか?
私はdockerでよく使ってます。docker上でneo4jを動かす際の備忘録を兼ねて。
間違いなどありましたら指摘していただけると幸いです。
※ dockerの使い方の説明などは省略しています。
Neo4jリポジトリ
- [DockerHub] (https://hub.docker.com/_/neo4j/)
- [GitHub] (https://github.com/neo4j/docker-neo4j-publish)
まずは実行してブラウザでアクセスする
docker run -d -p 7474:7474 -p 7687:7687 neo4j:latest
ブラウザから以下にアクセスすれば起動していることが確認できます。
http://<Docker Host>:7474
設定を変更して起動する
docker imageのdocker-entrypoint.sh
を見るとわかる通り、neo4j.confの設定キーにNEO4J_
というPrefixをつけ、.
を_
、_
を__
として環境変数に渡すことで、neo4j.confに設定値を追加していることが確認できます。
dbms.security.auth_enabled
↓
NEO4J_dbms_security_auth__enabled
以下で少し詳しく確認します。
- authを無効にして起動する
docker run -d -p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=none \
neo4j:latest
NEO4J_AUTH=none
を指定することで、dbms.security.auth_enabled=falseが指定されます。
- 初期パスワードを設定して起動する
docker run -d -p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/secret
neo4j:latest
NEO4J_AUTH=neo4j/<password>
を指定することで、neo4j-admin set-initial-password <password>
が実行されます。
※ パスワードにneo4jを指定するとエラーになります。
- メモリの設定を変更する
docker run -d -p 7474:7474 -p 7687:7687 \
-e NEO4J_dbms_memory_heap_initial__size=512M
-e NEO4J_dbms_memory_heap_max__size=512M
-e NEO4J_dbms_memory_pagecache_size=512M
neo4j:latest
メモリの設定については[こちら] (https://qiita.com/stmtok/items/a21187f1cec27610d482)を参照
- エンタープライズ版を起動する
docker run -d -p 7474:7474 -p 7687:7687 \
-e NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
neo4j:enterprise
エンタープライズ版を起動するためにはライセンスの同意が必要となります。 https://neo4j.com/licensing/
ディレクトリについて
外部ストレージをマウントした際に特殊な動きをするディレクトリがあります。
/data
データベースのデータおよび認証情報等が保存される永続ディレクトリ。
neo4jのdocker imageのデフォルトのデータディレクトリは/var/lib/neo4j/data
ですが、/var/lib/neo4j/data
は/data
のシンボリックリンクです。
/conf
このディレクトリに存在するファイルがコンテナ内の/var/lib/neo4j/conf
ディレクトリにコピーされます。
このディレクトリにneo4j.confを配置すると/var/lib/neo4j/conf/neo4j.conf
が上書きされます。
環境変数で指定した設定値の反映はファイルのコピー後に実行されるため、環境変数で指定した値が優先されます。
/ssl
マウントされているとdbms.directories.certificatesが/sslに設定されます。
(環境変数でNEO4J_dbms_directories_certificatesを指定しても、/sslが優先されます。)
/plugins
マウントされているとdbms.directories.pluginsが/pluginsに設定されます。
(環境変数でNEO4J_dbms_directories_pluginsを指定しても、/pluginsが優先されます。)
[APOC Procedures] (https://github.com/neo4j-contrib/neo4j-apoc-procedures) などのjarファイルはここに配置します。
/logs
マウントされているとdbms.directories.logsが/logsに設定されます。
(環境変数でNEO4J_dbms_directories_logsを指定しても、/logsが優先されます。)
/import
マウントされているとdbms.directories.importが/importに設定されます。
(環境変数でNEO4J_dbms_directories_importを指定しても、/importが優先されます。)
EXTENSION SCRIPT
docker run -d -p 7474:7474 -p 7687:7687 \
-e EXTENSION_SCRIPT=<script_path>
neo4j:latest
上記のようにEXTENSION_SCRIPT
にスクリプトを指定すると全ての設定を反映後、neo4jサーバ起動直前にスクリプトを起動することができます。
まとめ
環境変数で設定を細かく制御できて便利!