آنچه در این مقاله میخوانید
چگونه Neo4j را روی سرور مجازی اوبونتو نصب و پیکربندی کنیم؟
۲۸ مهر ۱۴۰۴
مدیریت دادههایی که بهطور پیچیده با هم در ارتباط هستند، همیشه یکی از چالشهای بزرگ پایگاه دادههای سنتی بوده است. Neo4j بهعنوان یک پایگاه داده گرافی، راهکاری قدرتمند برای ذخیره و تحلیل این ارتباطات ارائه میدهد. برخلاف پایگاه دادههای رابطهای که دادهها را در قالب ردیف و ستون نگهداری میکنند، Neo4j دادهها را بهصورت گره (Node) و رابطه (Relationship) مدلسازی میکند. این رویکرد باعث میشود بتوانید با سرعت و کارایی بالا، روابط پیچیده بین دادهها را کشف، ذخیره و تحلیل کنید.
در ادامه خواهید خواند:
- پیش نیاز
- مرحله 1: نصب Neo4j
- مرحله 2: اتصال به Neo4j و پیکربندی آن
- مرحله 3 (اختیاری): پیکربندی Neo4j برای دسترسی از راه دور
- مرحله 4: استفاده از Neo4j
- جمع بندی

پیش نیاز
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
- یک سرور Ubuntu شامل یک کاربر غیر ریشه با دسترسی sudo و یک فایروال.
مرحله 1: نصب Neo4j
مخازن رسمی Ubuntu شامل نسخهای از موتور پایگاه داده Neo4j نیستند. برای نصب پکیج اصلی و پشتیبانی شده توسط تیم Neo4j، ابتدا باید کلید امنیتی GPG مربوط به Neo4j را به سیستم اضافه کنید تا اطمینان حاصل شود که بستهها معتبر هستند. سپس یک منبع جدید به لیست مخازن APT اضافه میکنید که به مخزن نرمافزاری Neo4j اشاره دارد و در نهایت بسته Neo4j را نصب میکنید.
برای شروع، کلید GPG را با دستور زیر دانلود کرده و با استفاده از gpg --dearmor
آن را به فرمتی تبدیل کنید که APT بتوانید برای تایید بستهها استفاده کند:
curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key |sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
حالا باید مخزن Neo4j نسخه 4.1 را به لیست منابع APT اضافه کنید:
echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 4.1" | sudo tee -a /etc/apt/sources.list.d/neo4j.list
بخش [signed-by=/usr/share/keyrings/neo4j.gpg]
در این دستور به APT میگوید که برای تایید مخزن و اطلاعات بستهها از همان کلید امنیتی که در مرحله قبل ذخیره کردید استفاده کند.
در ادامه، باید لیست بستههای سیستم را بهروزرسانی کرده و سپس Neo4j و تمام وابستگیهای آن را نصب کنید. دقت کنید که این مرحله یک بسته سازگار را از Java را هم نصب میکند؛ بنابراین وقتی از شما پرسید آیا مایلید همه وابستگیها نصب شوند، کافی است کلید Y
را بزنید:
sudo apt update
sudo apt install neo4j
بعد از کامل شدن فرآیند نصب، Neo4j بهطور پیشفرض اجرا میشود؛ اما طوری تنظیم نشده که پس از هر بار راهاندازی مجدد (reboot) سیستم بهصورت خودکار بالا بیاید. پس باید آن را به شکل یک سرویس فعال کنید:
sudo systemctl enable neo4j.service
اگر سرویس در حال اجرا نبود، میتوانید بهصورت دستی آن را راهاندازی کنید:
sudo systemctl start neo4j.service
برای بررسی وضعیت سرویس و اطمینان از اینکه Neo4j درست اجرا میشود، از دستور زیر استفاده کنید:
sudo systemctl status neo4j.service
بعد از اجرای این دستور، خروجی مشابه زیر را دریافت خواهید کرد:
● neo4j.service - Neo4j Graph Database
Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-29 15:01:36 UTC; 2s ago
Main PID: 2053 (java)
Tasks: 40 (limit: 38383)
Memory: 658.1M
CGroup: /system.slice/neo4j.service
. . .
در این خروجی، مهمترین بخشها خطهایی هستند که وضعیت enabled (فعال) و running (در حال اجرا) را نشان میدهند. این سرویس یعنی سرویس Neo4j نصب، فعال و در حال اجرا است.
از این مرحله به بعد میتوانید به سراغ بخش بعدی بروید که شامل اتصال به Neo4j، پیکربندی اولیه کاربر و اضافه کردن دادهها به پایگاه داده است.
با سرور Ubuntu لیارا، زیرساخت پروژههات رو سریع، امن و آسون راهاندازی کن.
✅ نصب فوری و آماده استفاده✅ منابع اختصاصی و پایدار✅ دسترسی کامل SSH
خرید و راهاندازی سرور Ubuntu
مرحله 2: اتصال به Neo4j و پیکربندی آن
اکنون که Neo4j را نصب کردهاید و تنظیم کردهاید تا بعد از هر ریپورت اجرا شود، میتوانید اتصال به پایگاه داده را تست کرده و اطلاعات کاربری مدیر (Administrator) را پیکربندی کنید. برای تعامل با Neo4j از طریق خط فرمان، باید از ابزار cypher-shell استفاده کنید. این ابزار امکان اجرای دستورات Cypher (زبان پرسوجوی Neo4j) را به شما میدهد.
برای اجرای این ابزار دستور زیر را وارد کنید:
cypher-shell
هنگامی که برای اولین بار این شل را اجرا میکنید، باید با نام کاربری و رمز عبور پیشفرض لاگین کنید. مقدار پیشفرض برای هر دو، Neo4j است. پس از ورود موفق، Neo4j شمار را مجبور میکند رمز عبور مدیر را تغییر دهید:
cypher-shell prompt
username: neo4j
password: *****
Password change required
new password: ********************
Connected to Neo4j 4.1.0 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j@neo4j>
در این مثال بخش ********************
همان رمز عبور جدیدی است که شما وارد میکنید (بهصورت ماسک شده نمایش داده میشود). بهتر است یک رمز عبور قوی و قابل یادآوری انتخاب کنید و آن را در جایی امن ذخیره کنید. پس از تغییر رمز عبور، به محیط تعاملی neo4j@neo4j>
متصل میشوید. در این محیط میتوانید به پایگاه داده دسترسی داشته باشید و عملیاتهایی مانند درج نودها (nodes) یا اجرای کوئریها را انجام دهید.
نکته: نسخه Community Edition از Neo4j تنها از یک پایگاه داده پشتیبانی میکند. همچنین این نسخه امکان تعریف نقشها (roles) و سطح دسترسی برای کاربران را ندارد. بنابراین در این آموزش مراحل مربوط به مدیریت نقشها توضیح داده نشده است. برای اطلاعات بیشتر در مورد امکانات این نسخه، میتوانید به مستندات رسمی Neo4j مراجعه کنید.
پس از اینکه رمز عبور را تغییر دادید و اتصال به پایگاه داده را تست کردید، میتوانید با دستور زیر از محیط cypher-shell
خارج شوید.
:exit
در مرحله بعد، در صورت نیاز میتوانید Neo4j را طوری پیکربندی کنید که اتصالهای راه دور را نیز بپذیرد.
Neo4j چیست؟
Neo4j
مرحله 3 (اختیاری): پیکربندی Neo4j برای دسترسی از راه دور
اگر میخواهید Neo4j را در یک برنامه یا محیط بزرگتر از چند سرور استفاده میکند به کار ببرید، لازم است آن را طوری پیکربندی کنید که بتوانید از سیستمهای دیگر اتصال بگیرید. در این مرحله، Neo4j را برای پذیرش اتصالات از راه دور پیکربندی میکنیم و همچنین قوانین فایروال را اضافه میکنیم تا مشخص کنیم کدام سیستمها میتوانند به سرور Neo4j شما متصل شوند.
بهصورت پیشفرض، Neo4j فقط اتصالات از localhost
(آدرس 127.0.0.1) را میپذیرد. این تنظیمات باعث میشود سرور Neo4j شما در معرض اینترنت عمومی قرار نگیرد و فقط کاربران دارای دسترسی به سیستم محلی بتوانند با آن تعامل داشته باشند.
برای تغییر سوکت شبکهای که Neo4j استفاده میکند از localhost
به حالتی که سیستمهای دیگر بتوانند استفاده کنند، باید فایل پیکربندی /etc/neo4j/neo4j.conf
را ویرایش کنید. فایل پیکربندی را با ویرایشگر دلخواه باز کنید و گزینه dbms.default_listen_address
را پیدا کنید. در مثال زیر از nano
استفاده شده است.
sudo nano /etc/neo4j/neo4j.conf
خط #dbms.default_listen_address=0.0.0.0
را پیدا کنید و کامنت آن را با حذف #
بردارید تا فعال شود:
. . .
#*****************************************************************
# Network connector configuration
#*****************************************************************
# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.default_listen_address=0.0.0.0
. . .
به صورت پیشفرض مقدار 0.0.0.0
باعث میشود Neo4j به تمام اینترفیسهای IPv4 سیستم شما، از یک جمله localhost
متصل شود. اگر میخواهید Neo4j فقط یک آدرس IP خاص محدود شود (مثلا یک IP شبکه خصوصی که سرور شما استفاده میکند)، همان IP را جایگزین کنید.
همچنین میتوانید Neo4j را برای استفاده از اینترفیسهای IPv6 پیکربندی کنید. مانند IPv4، میتوانید مقدار default_listen_address
را به یک آدرس IPv6 مشخص تغییر دهید. اگر میخواهید Neo4j فقط از آدرس IPv6 استفاده کند، مقدار ::1
را مشخص کنید که معادل IPv6 برای localhost
است.
بعد از پیکربندی آدرس IP پیشفرض، فایل neo4j.conf
را ذخیره و ببندید. اگر از nano
استفاده میکنید، با CTRL+X
، سپس Y
و ENTER
این کار انجام میشود.
چگونه دیتابیس PostgreSQL را در اوبونتو 24.04 رمزنگاری کنیم؟
رمزنگاری PostgreSQL در اوبونتو
توجه: اگر Neo4j را با یک آدرس IPv6 پیکربندی کنید، نمیتوانید مستقیما با همان آدرس از cypher-shell
متصل شوید. در این صورت باید یک نام DNS که به آدرس IPv6 اشاره کند، یا یک ورودی در فایل /etc/hosts
سیستم راه دور ایجاد کنید.
برای مثال، اگر سرور Neo4j شما آدرس IPv6 مانند 2001:db8::1
دارد، سیستم راه دور باید یک ورودی در /etc/hosts
مانند زیر داشته باشد و به جای your_hostname
نامی دلخواه قرار دهید:
. . .
2001:db8::1 your_hostname
سپس از سیستم راه دور میتوانید با نام مشخص شده متصل شوید:
cypher-shell -a 'neo4j://your_hostname:7687'
اگر Neo4j را به آدرس IPv6 localhost (::1)
محدود کردهاید، میتوانید مستقیما از همان سرور با نام ip6-localhost
موجود در /etc/hosts
متصل شوید:
cypher-shell -a 'neo4j://ip6-localhost:7687'
وقتی cypher-shell
را با URI اتصال اجرا کنید، مانند همیشه برای نام کاربری و رمز عبور درخواست میشود.
حالا که Neo4j را برای پذیرش اتصالات از راه دور پیکربندی کردید، مهم است که دسترسی را محدود کنید تا فقط سیستمهای مورد اعتماد بتوانند متصل شوند. برای محدود کردن دسترسی از راه دور، میتوانید از UFW (فایروال پیشفرض اوبونتو) استفاده کنید.
Neo4j در نصب پیشفرض دو سوکت شبکه ایجاد میکند، یکی روی پورت 7474 برای رابط HTTP داخلی و پروتکل اصلی bolt
روی پورت 7687. Neo4j توصیه میکند که در محیط عملیاتی از پورت HTTP استفاده نشود، بنابراین قوانین فایروال را فقط برای پورت 7687 ایجاد کنید.
برای دادن دسترسی به یک هاست مورد اعتماد به رابط bolt
با IPv4، دستور زیر را اجرا کنید:
sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp
آدرس IP سیستم مورد اعتماد خود را جایگزین 203.0.113.1
کنید.
اگر میخواهید یک شبکه کامل، مانند شبکه مدیریت خصوصی یا شبکه داده، دسترسی داشته باشید:
sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
مجددا شبکه مورد نظر خود را جایگزین 192.0.2.0/24
کنید.
برای دسترسی از راه دور با IPv6، از دستور زیر استفاده کنید:
sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp
آدرس IPv6 سیستم مورد اعتماد را جایگزین کنید.
همچنین میتوانید محدودهای از IPv6 را دسترسی دهید.
sudo ufw allow from 2001:DB8::/32 to any port 7687 proto tcp
محدوده شبکه مورد نظر خود را جایگزین کنید.
بعد از ایجاد قوانین مناسب برای شبکه و هاستهای مورد اعتماد، UFW را برای اعمال قوانین فعال کنید:
sudo ufw reload
برای بررسی قوانین و بارگذاری شده، از دستورات زیر استفاده کنید:
sudo ufw status
خروجی باید شبیه به نمونه زیر باشد:
Output
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
7687/tcp ALLOW 203.0.113.1
اکنون سرور Neo4j شما طوری پیکربندی شده که دسترسی به پورت 7687 برای یک سرور یا شبکه مورد اعتماد امکان پذیر باشد. در بخش بعدی این آموزش، درباره افزودن نودها به دیتابیس و تعریف بین آنها توضیح داده خواهد شد.
با سرور ابری لیارا، زیرساخت پروژههات رو سریع، قابل اعتماد و بدون دردسر راهاندازی کن.
✅ منابع اختصاصی✅ مقیاسپذیری فوری✅ دسترسی کامل Root
خرید و راهاندازی سرور ابری
مرحله 4: استفاده از Neo4j
برای شروع استفاده از Neo4j، بیایید چند نود نمونه اضافه کنیم و سپس روابط بین آنها را تعریف کنیم. ابتدا با cypher-shell
به Neo4j متصل شوید:
cypher-shell
توجه: اگر در مرحله 3 (اختیاری): پیکربندی Neo4j برای دسترسی از راه دور Neo4j را برای دسترسی از راه دور پیکربندی کردهاید، با استفاده از URL که به آدرس Neo4j شما اشاره میکند متصل شوید.
بهعنوان مثال، اگر IP سرور Neo4j شما 203.0.113.1
باشد، از سیستم راه دور به این صورت متصل شوید:
cypher-shell -a 'neo4j://203.0.113.1:7687'
همانند همیشه، نام کاربری و رمز عبور از شما درخواست میشود.
اگر از IPv6 استفاده میکنید، مطمئن شوید که در فایل /etc/hosts
یک ورودی با نام مناسب همانند گام 3 وجود دارد. سپس با دستور زیر به سرور Neo4j خود متصل شوید:
cypher-shell -a 'neo4j://your_hostname:7687'
مطمئن شوید your_hostname
به آدرس IPv6 سرور Neo4j شما در سیستم راه دور اشاره دارد. پس از ورود به Neo4j با نام کاربری و رمز عبور، میتوانید نودها و روابط را به دیتابیس اضافه و کوئری کنید.
برای شروع، یک نود Great White shark به Neo4j اضافه کنید. دستور زیر یک نود از نوع Shark
با نام Great white
ایجاد میکند:
CREATE (:Shark {name: 'Great White'});
پس از اجرای هر دستور، خروجی مشابه زیر دریافت خواهید کرد:
Output
0 rows available after 3 ms, consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels
حال چند Shark دیگر اضافه کنید و با استفاده از یک رابطه به نام FRIEND
آنها را به هم متصل کنید. Neo4j اجازه میدهد نودها را با نام دلخواه رابطهدهی کنید، پس FRIEND
میتواند هر برچسبی که بخواهید باشد.
در مثال زیر، سه Shark اضافه شده و با رابطه FRIEND
به هم متصل میشوند:
CREATE
(:Shark {name: 'Hammerhead'})-[:FRIEND]->
(:Shark {name: 'Sammy'})-[:FRIEND]->
(:Shark {name: 'Megalodon'});
خروجی مشابه زیر دریافت میکنید که نشان میدهد سه Shark
جدید به دیتابیس اضافه شدند:
Output
. . .
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
Neo4j اجازه میدهد علاوه بر رابطه موجود FRIEND
، نودها با نامهای دیگری هم به هم مرتبط شوند. به عنوان مثال، Sammy و Megalodon دارای یک رتبه طبقهبندی مشترک به نام Lamniformes
هستند. چون روابط هم میتوانند ویژگی داشته باشند، یک رابطه ORDER
با ویژگی name
برابر Lamniformes
ایجاد میکنیم:
MATCH (a:Shark),(b:Shark)
WHERE a.name = 'Sammy' AND b.name = 'Megalodon'
CREATE (a)-[r:ORDER { name: 'Lamniformes' }]->(b)
RETURN type(r), r.name;
پس از اضافه کردن این رابطه، خروجی مشابه زیر خواهید داشت:
Output
+-------------------------+
| type(r) | r.name |
+-------------------------+
| "ORDER" | "Lamniformes" |
+-------------------------+
1 row available after 2 ms, consumed after another 7 ms
Created 1 relationships, Set 1 properties
سپس، یک رابطه SUPERORDER
بین Sammy و Hammerhead بر اساس ردهی بالاتر آنها (Selachimorpha) اضافه کنید. این رابطه نیز ویژگی name
خواهد داشت که برابر Selachimorpha
است:
MATCH (a:Shark),(b:Shark)
WHERE a.name = 'Sammy' AND b.name = 'Hammerhead'
CREATE (a)-[r:SUPERORDER { name: 'Selachimorpha'}]->(b)
RETURN type(r), r.name;
خروجی مشابه زیر نشان میدهد که نوع رابطه و نام آن اضافه شده است:
Output
+--------------------------------+
| type(r) | r.name |
+--------------------------------+
| "SUPERORDER" | "Selachimorpha" |
+--------------------------------+
1 row available after 2 ms, consumed after another 8 ms
Created 1 relationships, Set 1 properties
در نهایت با داشتن تمام نودها و روابط تعریف شده و ذخیره شده در Neo4j، دادهها را با کوئری زیر بررسی کنید:
MATCH (a)-[r]->(b)
RETURN a.name,r,b.name
ORDER BY r;
خروجی مشابه زیر دریافت میکنید:
Output
+---------------------------------------------------------------------+
| a.name | r | b.name |
+---------------------------------------------------------------------+
| "Hammerhead" | [:FRIEND] | "Sammy" |
| "Sammy" | [:FRIEND] | "Megalodon" |
| "Sammy" | [:ORDER {name: "Lamniformes"}] | "Megalodon" |
| "Sammy" | [:SUPERORDER {name: "Selachimorpha"}] | "Hammerhead" |
+---------------------------------------------------------------------+
4 rows available after 72 ms, consumed after another 1 ms
خروجی شامل روابط FRIEND
بین Hammerhead, Sammy و Megalodon و همچنین روابط طبقهبندی ORDER
و SUPERORDER
است.
پس از اتمام اضافه کردن و بررسی نودها و روابط در دیتابیس Neo4j، برای خروج از cypher-shell
دستور زیر را تایپ کنید.
اوبونتو Ubuntu چیست؟ (معرفی کامل کاربردها + ویژگیها)
اوبونتو
جمع بندی
با انجام این مراحل، شما یک پایگاه داده گرافی قدرتمند به نام Neo4j روی سرور Ubuntu خود راهاندازی کردهاید. از این پس میتوانید دادههای مختلف را بهصورت گره و رابطه ذخیره کنید و بین آنها ارتباطات پیچیدهای بسازید. اگر نیاز به استفاده در مقیاس بزرگتر داشته باشید، امکان اتصال راه دور و کنترل دسترسی امن نیز برای شما فراهم شده است.
Neo4j به کمک زبان Cypher این امکان را میدهد که پرسوجوهای پیشرفته روی دادهها انجام دهید و از قدرت واقعی پایگاه دادههای گرافی در پروژههای خود بهره ببرید.