Neo4jとはNeo4j社によって開発されているグラフデータベースのひとつで、データの関連性を主軸にしてデータの管理を行いまます。MySQL/MariaDBやOracle、PostgreSQLといったリレーショナルデータベース(RDBMS)ではMicrosoftのエクセルやGoogleのスプレッドシートの様に表単位でデータを保存し、表ごとの関連性でデータを管理しています。一方で、グラフデータベースではノード(ラベル)とノード間のリレーションという単位でデータ単体同士が結びついた状態を管理していきます。
Neo4j社のリンクは以下になります。
Neoj4グラフデータベースの特徴
Neo4jの特徴は以下のものがあります。
- スキーマ不要
-
ノードに紐づけるプロパティー(RDBMSでいうフィールドのようなもの)は定義しておく必要はありません。なので、ノードによっては特定のプロパティーがあったりなかったりという状態は発生しえますが、自由にデータの脱着ができるので柔軟性は高いです。
- テーブルジョインが無い
-
データを格納する時点でデータ間の関係性のデータも保存されるので、データ取得時にはデータを芋づる式に取得できることになります。なので、そもそもテーブルのジョインという概念がありません。最初から既にデータが全部つながっているといった感じです。
- トランザクションが可能
-
RDBMSと同様にトランザクションの管理もできるので、データの整合性を担保することができます。なので、今までのRDBMSに置き換えてWebシステムの基幹データベースとして導入することもできます。
- インデックスはやはり大事
-
RDBMS同様にインデックスの設定はあります。RDBMSのインデックスは設定し忘れると時間が経過してデータが溜まってきてパフォーマンスが悪化し始めてから初めて問題に気が付くケースが多いですが、Neo4jグラフデータベースの場合はインデックスをつけ忘れると割と最初からクエリのパフォーマンスが悪いので問題に気が付きやすい側面があると個人的には感じています。
- CypherはSQLの構文に似てる
-
Neo4jではCypher(サイファー)というクエリ言語を使用します。SQLからの構文を多分に流用しているので、SQLを長年触ってきた開発者にとっては非常に移行しやすい要因だと思いまます。SELECT文はMATCH文に変わりますが、WHERE句やORDER BY句など馴染みのある構文になっています。
- 管理画面付きである
-
MySQL/MariaDBで併用されるphpMyAdminの様に、Neo4jではWebブラウザからクエリを用いてNeo4jデータベースへのデータの問い合わせや管理が可能です。phpMyAdminのようなWebサービスがデータベースのデフォルト機能として内蔵されている状態です。ここからCypherクエリを実行して取得したデータを参照できます。
- コミュニティー版とエンタープライズ版がある
-
コミュニティー版は無料バージョンで、エンタープライズ版が有償バージョンです。
それぞれの機能詳細については以下ページの「Self Managed」のタブから確認できます。
https://neo4j.com/pricing/
事前準備
セキュリティーグループの作成
Neo4jデータベースにアクセスするにはEC2インスタンスにセキュリティーグループの設定をする必要があります。「EC2セキュリティーグループの作成」の記事を参考に、Neo4j用のセキュリティーグループを作成してEC2インスタンスに設定しておいてください。
HTTPS化には80番ポートも使用します。忘れないように気を付けましょう。
EC2インスタンスの作成
インストールを試すだけの場合は、EC2のインスタンスタイプは t2.small は最低でも必要です。小規模で運用する場合でも t2.medium か t2.large は必要になってきます。
インストールだけであれば、EBSストレージはデフォルトの 8 GB でも足りますが、ハードディスク容量は必要に応じて増やすようにしましょう。
Javaの実行環境のインストール
Neo4jをインストールする前に、オープンソースのJDK (Java Development Kit)である corretto をインストールしておきましょう。
以下のリンクから必要なバージョンを確認します。
https://neo4j.com/docs/operations-manual/current/installation/requirements/
【パッケージの存在確認】
dnf list | grep corretto | grep 21
【パッケージのインストール】
sudo dnf install java-21-amazon-corretto -y
【インストールの確認】
java --version
Neo4jのインストール手順
ここではコミュニティー版のインストール手順を解説していきます。
Neo4jのリポジトリを追加
【ルートユーザにスイッチ】
sudo su -
【Neo4jのリポジトリの追加】
rpm --import https://debian.neo4j.com/neotechnology.gpg.key
cat << EOF > /etc/yum.repos.d/neo4j.repo
[neo4j]
name=Neo4j RPM Repository
baseurl=https://yum.neo4j.com/stable/latest
enabled=1
gpgcheck=1
EOF
【一般ユーザにスイッチバック】
exit
Neo4jのパッケージをインストール
【Neo4jパッケージのバージョン確認】
dnf list | grep neo4j
【Neo4jのインストール】
sudo dnf install neo4j-2025.02.0 -y
【インストールの確認】
neo4j --version
Neo4jをアンインストールする場合は以下のコマンドで削除できます。
【アンインストール】
sudo dnf remove neo4j
【削除の確認】
dnf list installed neo4j
参考リンク:https://neo4j.com/docs/operations-manual/current/installation/linux/rpm/
パスワードの設定
以下のコマンドでパスワードの設定を行います。
sudo -u neo4j neo4j-admin dbms set-initial-password your-password-here
ファイル・ディレクトリ権限の変更
sudo chown -R neo4j:neo4j /var/lib/neo4j/
sudo chmod 2775 /var/lib/neo4j && find /var/lib/neo4j -type d -exec sudo chmod 2775 {} \;
sudo chmod 1775 /var/lib/neo4j && find /var/lib/neo4j -type d -exec sudo chmod 1775 {} \;
sudo chown -R neo4j:neo4j /var/log/neo4j/
sudo chmod 2775 /var/log/neo4j && find /var/log/neo4j -type d -exec sudo chmod 2775 {} \;
sudo chmod 1775 /var/log/neo4j && find /var/log/neo4j -type d -exec sudo chmod 1775 {} \;
設定ファイルの変更
Neoj4の設定ファイルは以下の場所にあります。
/etc/neo4j/neo4j.conf
設定ファイルの以下の場所を変更してください。コメント個所をアンコメントして有効にします。
sudo vi /etc/neo4j/neo4j.conf
-
#server.default_listen_address=0.0.0.0
server.default_listen_address=0.0.0.0
-
設定ファイルの変更前には必ずバックアップを取りましょう。
Neo4jの起動
sudo -u neo4j neo4j start
Neo4jの起動時には少し時間がかかることに留意しておきましょう。
管理画面の表示とログイン
ブラウザに以下のURLでアクセスしてみましょう。http:// で始まることに注意しましょう。
http://IPアドレスまたはドメイン名:7474
ログイン画面が表示されたら前述のパスワードを使用してログインしてみましょう。
Neo4jのデフォルトのユーザ名は neoj4 です。また、Neo4jのデフォルトで選択されるデータベース名も neo4j です。
ログインができればウェブブラウザからNeo4jへのアクセスは成功です。
Let’s Encryptを使ったブラウザアクセスのHTTPS化
Certbotのインストール
Let’s Encryptの証明書を発行してくれるcertbotというプログラムはPython言語でできているので、まずはPythonのパッケージ管理ツールをインストールであるPIPをインストールする必要があります。
【Pythonと関連パッケージをインストール】
sudo dnf install python3 augeas-libs -y
【Pythonの仮想環境の設定とPIPのインストール】
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
【PIPコマンドを使ってcertbotをインストール】
sudo /opt/certbot/bin/pip install certbot
【certbotコマンドの使用準備】
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
Certbotの実行
ここまでで、Certbotを実行する準備が整いました。次のコマンドで証明書の発行をしてみましょう。
sudo certbot certonly
プロンプトに従って質問内容に答えていきます。
1.認証方法を聞かれるので、HTTPサーバを使用した方法の「1」を選択。
2.メールアドレスの入力。
2.利用条件への同意(Y)
3.関連組織へのメールアドレスの共有とニュースなどの情報を受け取りたいか(N)
->ここはNでよいと思います。
4.HTTPSを適用したいドメイン名を入力します。
5.証明書の発行が成功した旨のメッセージが表示されて完了になります。
以下はcertbotコマンド実行時の出力例になります。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Runs an HTTP server locally which serves the necessary validation files under
the /.well-known/acme-challenge/ request path. Suitable if there is no HTTP
server already running. HTTP challenge only (wildcards not supported).
(standalone)
2: Saves the necessary validation files to a .well-known/acme-challenge/
directory within the nominated webroot path. A separate HTTP server must be
running and serving files from the webroot path. HTTP challenge only (wildcards
not supported). (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Enter email address or hit Enter to skip.
(Enter 'c' to cancel): myemail@gmail.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at:
https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf
You must agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Account registered.
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): mydomain.example.com
Requesting a certificate for mydomain.example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mydomain.example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/mydomain.example.com/privkey.pem
This certificate expires on 2025-06-12.
These files will be updated when the certificate renews.
NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Let’s Encryptのファイル・ディレクトリ権限の変更
【所有グループの変更】
sudo chgrp -R neo4j /etc/letsencrypt/*
【パーミッションの変更】
sudo chmod -R g+rx /etc/letsencrypt/*
Neo4jからLet’s Encryptのファイルを参照するシムリンクを作成
【ディレクトリの移動】
cd /var/lib/neo4j
【ファイルのバックアップ】
sudo mv certificates certificates_bkup
【新しいディレクトリの作成】
sudo mkdir -p certificates/{bolt,cluster,https}
【作成したディレクトリの権限の変更】
sudo chown neo4j:neo4j certificates
sudo chmod 755 certificates
【ディレクトリの移動】
cd /var/lib/neo4j/certificates
【ドメイン名を環境変数に設定】
export MY_DOMAIN=mydomain.example.com
【シムリンクの作成】・・・上記で作成したディレクトリ内にシムリンクを作成
ブロック全体をコピペして実行してください。
for certsource in bolt cluster https ; do
sudo ln -s /etc/letsencrypt/live/$MY_DOMAIN/fullchain.pem $certsource/neo4j.cert
sudo ln -s /etc/letsencrypt/live/$MY_DOMAIN/privkey.pem $certsource/neo4j.key
sudo mkdir $certsource/trusted
sudo ln -s /etc/letsencrypt/live/$MY_DOMAIN/fullchain.pem $certsource/trusted/neo4j.cert ;
done
【ファイル・ディレクトリ権限の変更】
sudo chown -R neo4j:neo4j /var/lib/neo4j/certificates/*
sudo chmod -R g+rx /var/lib/neo4j/certificates/*
設定ファイルの変更
先ほどの設定フィアルを開き、httpsを有効にしましょう。
sudo vi /etc/neo4j/neo4j.conf
-
#server.bolt.tls_level=DISABLED
server.bolt.tls_level=REQUIRED
#server.https.enabled=false
server.https.enabled=true
#server.default_advertised_address=localhost
server.default_advertised_address=mydomain.example.com
# Bolt SSL configuration
dbms.ssl.policy.bolt.enabled=true
dbms.ssl.policy.bolt.base_directory=/var/lib/neo4j/certificates/bolt
dbms.ssl.policy.bolt.private_key=/var/lib/neo4j/certificates/bolt/neo4j.key
dbms.ssl.policy.bolt.public_certificate=/var/lib/neo4j/certificates/bolt/neo4j.cert
dbms.ssl.policy.bolt.client_auth=NONE
# Https SSL configuration
dbms.ssl.policy.https.enabled=true
dbms.ssl.policy.https.base_directory=/var/lib/neo4j/certificates/https
dbms.ssl.policy.https.private_key=/var/lib/neo4j/certificates/https/neo4j.key
dbms.ssl.policy.https.public_certificate=/var/lib/neo4j/certificates/https/neo4j.cert
dbms.ssl.policy.https.client_auth=NONE
-
Neo4jの再起動
sudo -u neo4j neo4j restart
管理画面の再表示
再度管理画面を開いてみましょう。https://で始まる点とポート番号が 7473 に変わったことに注意しましょう。
https://mydomain.example.com:7473/browser/
ページが開ければHTTPS化の成功です。
Let’s Encryptの証明書の更新を自動化する
Cronieのインストール
新しいAmazon Linxu 2023のEC2インスタンス、旧来のAmazon Linux 2のインスタンスと違って、定期実行プログラムのcrondパッケージはインストールされていません。代わりに Amazon Linxu 2023 のインスタンスではcronieというパッケージをインストールする必要があります。
【cronieがインストール済みかを確認】
sudo dnf installed cronie
【cronieパッケージが存在するか確認】
sudo dnf info cronie
【cronieをインストール】
sudo dnf install cronie -y
【システムブート時にcoronieも起動するように設定】
sudo systemctl enable crond.service
【cronieプログラムw再起動】
sudo systemctl restart crond
【cronieプログラムの実行状態を確認】
sudo systemctl status crond | grep Active
sudo systemctl status crond.service
->上記共にActiveと表示されればOKです。
Crontabファイルの設定
まずは、以下のファイルのバックアップを取りましょう。
/etc/crontab
ファイル内には以下を追記しましょう。以下の例では毎日0時 10分 にcertbotコマンドを使用してSSL証明書の更新を行います。証明書の期限の 30 日より前は、コマンドは実行されますが期限よりだいぶ前なので実際の更新は行われませんが、更新期限から 30 日を切ると実際に更新処理が行われます。
10 1,15 * * * root certbot renew --post-hook "chown -R neo4j:neo4j /etc/letsencrypt && sudo -u neo4j neo4j restart" > /etc/crontab.log 2>&1
定期実行処理については「Linux|定期処理(Cronジョブ)実行の設定方法」の記事を参考にして下さい。

まとめ
今回の記事ではNeo4jデータベースのインストール手順を学習しました。Neoj4には様々な特徴がありました。スキーマが不要、テーブルジョインが無い、トランザクションが可能、Cypherの構文はSQLに似ている、そして、デフォルトでブラウザアクセスの管理画面がありましたね。Neo4jの実行環境にJDKのcorrettoもインストールしました。そして、Neoj4をインストールして、パスワードの設定を行いました。設定ファイルの調整も行いましたね。Certbotを使ってHTTPS化も併せて行い、証明書の自動更新設定もしました。手順が多いのでステップを再度確認しておきましょう。
【近日公開】次回は「Neoj4のプラグインのインストール」について学習を進めていきます。
コメント