🔨
neo4jのコンテナを立ち上げるとき追加した設定
概要
docker-composeでneo4jコンテナを立ち上げていました。
最初のyamlファイルからいくつか設定を追加していったので、これを記載していこうと思います。
初回構築時の設定
初回構築時の設定は以下のようになっています。
docker-compose.yaml
version: '3'
services:
neo4j:
container_name: neo4j
image: neo4j
ports:
- 7474:7474
- 7687:7687
volumes:
- neo4j-data:/data
- neo4j-logs:/logs
- neo4j-conf:/conf
volumes:
neo4j-data:
neo4j-logs:
neo4j-conf:
passwordの初期設定
課題
neo4jのpasswordはコンテナ起動後、デフォルトパスワードをUIで再設定していました。
webアプリケーションでneo4jを使用していて、github actionsでアプリの自動テストをしたかったです。
そのためデフォルトパスワードを手動で再設定せず、自動で設定できるようにしたいです。
実装
コンテナ起動時に環境変数からパスワードを設定する方法を使用しました。
docker-compose.yaml
version: '3'
services:
neo4j:
container_name: neo4j
image: neo4j
ports:
- 7474:7474
- 7687:7687
volumes:
- neo4j-data:/data
- neo4j-logs:/logs
- neo4j-conf:/conf
+ environment:
+ # default username and password "neo4j"
+ # neo4j password setting (NEO4J_AUTH=neo4j/<password>)
+ - NEO4J_AUTH=neo4j/neo4jpasswprd
volumes:
neo4j-data:
neo4j-logs:
neo4j-conf:
証明書設定
課題
webアプリケーションからneo4jへの通信にboltプロトコルを使用したかったです。
しかし、SSL証明書が設定されていないため、安全な接続の確立出来ず、エラーが出力されうまくいきません。
neobolt.exceptions.SecurityError: Failed to establish secure connection to 'EOF occurred in violation of protocol
実装
neo4jコンテナでは以下のように証明書・秘密鍵を配置する必要があるようです。
https://neo4j.com/developer/kb/setting-up-ssl-with-docker/#_2_copy_ssl_certificates_and_correct_permissions
tree
$HOME/neo4j/ssl/
└── bolt
├── private.key
└── public.crt
証明書・秘密鍵が格納されているディレクトリをコンテナにマウントし、
環境変数で証明書・秘密鍵のファイル名を指定しました。
環境変数の指定は下記を参考にしました。
ローカルのディレクトリ構成
tree
.
├── certs
│ ├── private.key
│ └── public.crt
└── docker-compose.yaml
設定ファイル
docker-compose.yaml
version: '3'
services:
neo4j:
container_name: neo4j
image: neo4j
ports:
- 7474:7474
- 7687:7687
volumes:
- neo4j-data:/data
- neo4j-logs:/logs
- neo4j-conf:/conf
+ - ./certs:/var/lib/neo4j/certificates/bolt
+ environment:
+ - NEO4J_dbms_ssl_policy_bolt_enabled=true
+ - NEO4J_dbms_ssl_policy_bolt_private__key=private.key
+ - NEO4J_dbms_ssl_policy_bolt_public__certificate=public.crt
+ - NEO4J_dbms_connector_bolt_tls__level=REQUIRED
+ - NEO4J_dbms_ssl_policy_bolt_client__auth=NONE
volumes:
neo4j-data:
neo4j-logs:
neo4j-conf:
Discussion