تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

چگونه Neo4j را روی سرور مجازی اوبونتو نصب و پیکربندی کنیم؟


۲۸ مهر ۱۴۰۴

مدیریت داده‌هایی که به‌طور پیچیده با هم در ارتباط هستند، همیشه یکی از چالش‌های بزرگ پایگاه داده‌های سنتی بوده است. Neo4j به‌عنوان یک پایگاه داده گرافی، راهکاری قدرتمند برای ذخیره و تحلیل این ارتباطات ارائه می‌دهد. برخلاف پایگاه داده‌های رابطه‌ای که داده‌ها را در قالب ردیف و ستون نگهداری می‌کنند، Neo4j داده‎‌ها را به‌صورت گره (Node) و رابطه (Relationship) مدل‌سازی می‌کند. این رویکرد باعث می‌شود بتوانید با سرعت و کارایی بالا، روابط پیچیده بین داده‌ها را کشف، ذخیره و تحلیل کنید.

در ادامه خواهید خواند:

  • پیش نیاز
  • مرحله 1: نصب Neo4j
  • مرحله 2: اتصال به Neo4j و پیکربندی آن
  • مرحله 3 (اختیاری): پیکربندی Neo4j برای دسترسی از راه دور
  • مرحله 4: استفاده از Neo4j
  • جمع بندی
نصب  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 این امکان را می‌دهد که پرس‌وجوهای پیشرفته روی داده‌ها انجام دهید و از قدرت واقعی پایگاه داده‌های گرافی در پروژه‌های خود بهره ببرید.