Setting up Neo4j Enterprise Edition Windows - tomgeudens/practical-neo4j GitHub Wiki

Disclaimer: This document aims at getting a Neo4j database up-and-running in the context of a training or experiment. It is not fit for production installation purposes. It also assumes a single user developer installation and is in that respect similar to a Neo4j Desktop installation (which also provides the Enterprise Edition). For that purpose the Neo4j Enterprise Edition software requires no further licensing. For any other purpose ... it does !

Version: this document is current for version 4.4.40

Last Update: 2024/12/27 - Neo4j 4.4.40

Important: All of the below is executed in a regular (non-elevated) powershell window! If you or you organisation haven't jumped on the new open source powershell releases yet, it's about time. Seriously. The below has been tested with version 7.4.6. It will work with the earlier proprietary versions too (that has not been tested but any powershell 5 and up is usually fine).

One - Location Location Location

This document will assume everything (software, installation, database) is going to happen in a single neo4j folder (which is created below). This folder must reside in a location that is writable for the user with which you are logged on. No elevated rights will be needed (and try to avoid using an Administrator user). The C:\users<your user>\Documents folder is perfect.

PS C:\Users\Your User> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      7.4.6
...
PS C:\Users\Your User> cd .\Documents\
PS C:\Users\Your User\Documents> mkdir neo4j
PS C:\Users\Your User\Documents> mkdir .\neo4j\scripts
PS C:\Users\Your User\Documents> cd .\neo4j\
PS C:\Users\Your User\Documents\neo4j> Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy ByPass
PS C:\Users\Your User\Documents\neo4j>

Right, so setting the execution policy will allow you to excute scripts (this is sometimes blocked). And these are the scripts we are going to download and execute :

PS C:\Users\Your User\Documents\neo4j> $WebClient = New-Object System.Net.WebClient
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/version.ps1", (Get-Location).Path + "\scripts\version.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/download.ps1", (Get-Location).Path + "\scripts\download.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/functions.ps1", (Get-Location).Path + "\scripts\functions.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/unpack.ps1", (Get-Location).Path + "\scripts\unpack.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/move.ps1", (Get-Location).Path + "\scripts\move.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/settings.ps1", (Get-Location).Path + "\scripts\settings.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/start.ps1", (Get-Location).Path + "\scripts\start.ps1")
PS C:\Users\Your User\Documents\neo4j> $WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/environment.ps1", (Get-Location).Path + "\scripts\environment.ps1")

Do verify the sizes match up ...

PS C:\Users\Your User\Documents\neo4j> dir .\scripts\
... Length Name
... ------ ----
...   1453 download.ps1
...    320 environment.ps1
...   5856 functions.ps1
...   1337 move.ps1
...   2462 settings.ps1
...    867 start.ps1
...   1485 unpack.ps1
...    192 version.ps1

Yes it is possible to do things completely manual, however :

  • This is quite error-prone and may eat up a great deal of time in a training or experiment
  • If you can not run the scripts (because of limitations on your laptop) it’s unlikely that you’ll be able to run Neo4j anyway ... (the Desktop installation will very likely also fail to start a database).

So with the scripts in place we are ready for the next step ...

Two - Downloading the softwares

In this step a subfolder install will be created and the following softwares will be put into it :

What Location
Java JRE install/zulu11.76.21-ca-jre11.0.25-win_x64.zip
Neo4j Enterprise Server install/neo4j-enterprise-4.4.40-windows.zip
GDS library install/neo4j-graph-data-science-2.6.8.zip

The instructions below will use a simple script to accomplish this. Note that this is one of the scripts you downloaded earlier.

PS C:\Users\Your User\Documents\neo4j> .\scripts\download.ps1
Setting the versions ... Done!
Downloading - there is no progress indicator! Please be patient!
Creating 'install' folder ... Done!
Downloading neo4j to: C:\Users\Your User\Documents\neo4j\install\neo4j-enterprise-4.4.40-windows.zip  ... Done!
Downloading jre to: C:\Users\Your User\Documents\neo4j\install\zulu11.76.21-ca-jre11.0.25-win_x64.zip  ... Done!
Downloading gds to: C:\Users\Your User\Documents\neo4j\install\neo4j-graph-data-science-2.6.8.zip  ... Done!

Downloading Complete

Do check that the sizes match with yours !

PS C:\Users\Your User\Documents\neo4j> dir .\install\

...    Length Name
...    ------ ----
... 246439343 neo4j-enterprise-4.4.40-windows.zip
...  51829203 neo4j-graph-data-science-2.6.8.zip
...  40413132 zulu11.76.21-ca-jre11.0.25-win_x64.zip

Next up ... unpacking the softwares ...

Three - Unpacking the softwares

In this step, everything that is compressed will be unpacked. Typically that's the Neo4j software, the Java software and the Graph Data Science zip.

PS C:\Users\Your User\Documents\neo4j> .\scripts\unpack.ps1
Unpacking the downloads...
Setting the versions ... Done!
Unpacking neo4j to: C:\Users\Your User\Documents\neo4j\  ... Done!
Unpacking jre to: C:\Users\Your User\Documents\neo4j\  ... Done!
Unpacking gds to: C:\Users\Your User\Documents\neo4j\install  ... Done!

Unpacking Complete

Four - Move plugins in place

With all the plugins now in jar form, it's time to move them into the plugins folder.

PS C:\Users\Your User\Documents\neo4j> .\scripts\move.ps1
Moving the plugins...
Setting the versions ... Done!
Moving gds to: C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\plugins  ... Done!
Moving apoc-core to: C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\plugins  ... Done!

Moving Complete

Do check that the sizes match with yours !

PS C:\Users\Your User\Documents\neo4j> dir .\neo4j-enterprise-4.4.40\plugins\

...   Length Name
...   ------ ----
... 16748882 apoc-4.4.0.34-core.jar
... 58520104 neo4j-graph-data-science-2.6.8.jar
...     2266 README.txt

Five - Settings

Most of the default settings of Neo4j are fine for the purposes of a training or experimentation, but not all. The script below fixes what needs fixing and also sets the initial password for the database to morpheus. Alternatively you can also modify the neo4j.conf file manually, the statement shows all the changes you need to make.

PS C:\Users\Your User\Documents\neo4j> .\scripts\settings.ps1
Changing Settings...
Setting the versions ... Done!
Adding config to  C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\conf\neo4j.conf
         * metrics.enabled=true
         * metrics.namespaces.enabled=true
         * metrics.filter=*
         * metrics.csv.enabled=false
         * metrics.prometheus.enabled=false
         * metrics.graphite.enabled=false
         * metrics.jmx.enabled=true
         * dbms.logs.query.enabled=off
         * dbms.security.procedures.unrestricted=apoc.*,gds.*
         * dbms.default_listen_address=0.0.0.0
         * dbms.memory.heap.initial_size=2g
         * dbms.memory.heap.max_size=2g
         * dbms.memory.pagecache.size=1g
         * dbms.memory.transaction.global_max_size=2000m
         * dbms.tx_log.rotation.retention_policy=1G size
         * dbms.db.timezone=SYSTEM
         * #dbms.logs.user.stdout_enabled=false
         * browser.remote_content_hostname_whitelist=*
Done!
Adding config to  C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\conf\apoc.conf
         * apoc.export.file.enabled=true
         * apoc.import.file.enabled=true
         * apoc.import.file.use_neo4j_config=true
Done!
Setting Java Environment for this session ... Done!
Importing Neo4j Modules ... Done!
Setting neo4j initial password ... Selecting JVM - Version:11.0.25+9-LTS, Name:OpenJDK 64-Bit Server VM, Vendor:Azul Systems, Inc.
Changed password for user 'neo4j'. IMPORTANT: this change will only take effect if performed before the database is started for the first time.
0
Done!

Settings Complete

It is important to note that if the changing of the password did not work, it's unlikely that the database start in the next step will.

Six - Starting

We are going to be running the database in console mode. That means that the command we are going to issue will continue running in the foreground (so do not close that terminal window unless you want to bring down the database).

PS C:\Users\Your User\Documents\neo4j> .\scripts\start.ps1
Starting Neo4j!
Setting the versions ... Done!
Setting Java Environment for this session ... Done!
Importing Neo4j Modules ... Done!
Directories in use:
home:         C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40
config:       C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\conf
logs:         C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\logs
plugins:      C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\plugins
import:       C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\import
data:         C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\data
certificates: C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\certificates
licenses:     C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\licenses
run:          C:\Users\Your User\Documents\neo4j\neo4j-enterprise-4.4.40\run
Starting Neo4j.
2024-12-27 09:35:01.212+0100 INFO  Starting...
2024-12-27 09:35:01.912+0100 INFO  This instance is ServerId{xxxxxxxx} (xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb)
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
SLF4J(W): Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J(W): Ignoring binding found at [jar:file:/C:/Users/Your User/Documents/neo4j/neo4j-enterprise-4.4.40/lib/slf4j-nop-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J(W): See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
2024-12-27 09:35:02.802+0100 INFO  ======== Neo4j 4.4.40 ========
2024-12-27 09:35:02.833+0100 INFO  Progress tracking: enabled
2024-12-27 09:35:02.833+0100 INFO  Memory usage guard: minimum estimate
2024-12-27 09:35:02.836+0100 INFO  GDS license file: null
2024-12-27 09:35:02.836+0100 INFO  GDS license state: unlicensed
2024-12-27 09:35:02.841+0100 INFO  Register GraphDataScience...
2024-12-27 09:35:02.852+0100 INFO  GraphDataScience registered.
2024-12-27 09:35:02.852+0100 INFO  Register GraphDataScienceExtras...
2024-12-27 09:35:02.852+0100 INFO  GraphDataScienceExtras registered.
2024-12-27 09:35:02.852+0100 INFO  Register MetricsFacade...
2024-12-27 09:35:02.852+0100 INFO  MetricsFacade registered.
2024-12-27 09:35:02.853+0100 INFO  Register legacy Task Store/ Registry...
2024-12-27 09:35:02.853+0100 INFO  Task Store/ Registry registered.
2024-12-27 09:35:02.853+0100 INFO  Register legacy User Log Registry...
2024-12-27 09:35:02.853+0100 INFO  User Log Registry registered.
2024-12-27 09:35:03.078+0100 INFO  GDS compatibility: for Neo4j Settings 5.x (placeholder) -- not available, for Neo4j Settings 4.4 -- available, selected: Neo4j Settings 4.4
2024-12-27 09:35:03.078+0100 INFO  GDS compatibility: for Neo4j 4.4 -- available, for Neo4j 5.11 (placeholder) -- not available, for Neo4j 5.12 (placeholder) -- not available, for Neo4j 5.13 (placeholder) -- not available, for Neo4j 5.14 (placeholder) -- not available, for Neo4j 5.15 (placeholder) -- not available, for Neo4j 5.16 (placeholder) -- not available, for Neo4j 5.17 (placeholder) -- not available, for Neo4j RC (placeholder) -- not available, for Neo4j 5.19 (placeholder) -- not available, for Neo4j 5.20 (placeholder) -- not available, selected: Neo4j 4.4
2024-12-27 09:35:12.291+0100 INFO  Bolt enabled on [0:0:0:0:0:0:0:0]:7687.
2024-12-27 09:35:12.827+0100 INFO  Remote interface available at http://localhost:7474/
2024-12-27 09:35:12.829+0100 INFO  id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2024-12-27 09:35:12.829+0100 INFO  name: system
2024-12-27 09:35:12.829+0100 INFO  creationDate: 2024-12-27T09:35:03.357+01:00
2024-12-27 09:35:12.830+0100 INFO  Started.

The SLF4J(W) is a known warning that can be ignored.

Enjoy!

Note that a CTRL-C will stop the database and that you obviously only have to repeat this final step to start the database again!

Appendix - Just the commands

The observation has been made that it can be hard to correctly cut-and-paste the commands from in between the output and the explanation. Below you'll therefore find just the necessary commands.

Setup

The assumption is that you have positioned yourself in the location where the self-contained setup needs to go

mkdir neo4j
mkdir .\neo4j\scripts
cd .\neo4j\
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy ByPass
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/version.ps1", (Get-Location).Path + "\scripts\version.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/download.ps1", (Get-Location).Path + "\scripts\download.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/functions.ps1", (Get-Location).Path + "\scripts\functions.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/unpack.ps1", (Get-Location).Path + "\scripts\unpack.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/move.ps1", (Get-Location).Path + "\scripts\move.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/settings.ps1", (Get-Location).Path + "\scripts\settings.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/start.ps1", (Get-Location).Path + "\scripts\start.ps1")
$WebClient.DownloadFile("https://raw.githubusercontent.com/tomgeudens/practical-neo4j/master/scripts/fourohandbeyond/windows/environment.ps1", (Get-Location).Path + "\scripts\environment.ps1")

Installation

The assumption is that you have positioned yourself in the neo4j folder (created in Setup)

.\scripts\download.ps1
.\scripts\unpack.ps1
.\scripts\move.ps1
.\scripts\settings.ps1

Running

Whereas Setup and Installation are only executed once, this one is repeated every time you want to start the database. The assumption is that you have positioned yourself in the neo4j folder (created in Setup)

.\scripts\start.ps1
⚠️ **GitHub.com Fallback** ⚠️