Can't get the example movie project to do anything

I've spent most of the afternoon trying to get my newly-installed Neo4J environment to show that it's able to either support the example movie project or at least let me run cypher queries against the underlying database. So far, I'm hitting blank walls and what seems to be circular documentation.

I want to see the movie project running inside a conventional web browser (Chrome or Firefox). Failing that, I want to at least be able to run curl scripts or any other shell command line so that I can see results from cypher queries.

So far, I'm getting nowhere. I've installed Neo4J 4.0.0, using yum (according to the directions). I've confirmed (using systemctl) that it's running. I think it's listening on 7474, and I think that "Bolt" (whatever that is) is listening on 7687. At least, that's what I see in the neo4j logs.

I've opened port 7474 using firewall-cmd. The guest VM has httpd running on port 80, and I can access that from a browser running on the Windows 10 host. When I attempt to connect to either port 7687 or port 7474 from the browser, the browser complains that it is unable to connect. I've turned off authentication in neo4j.conf, and turned on the "7474" line. Those are the only changes I've made. I've confirmed that various directories are all present. The guest VM is running the desired version of Java. The guest VM has a valid IP address (192.168.242.128) and is accessible via ping from the host. According to netstat (on the guest), port 7474 is available and java is listening on that port.

I'm able to get a little bit of life from wget in an SSH shell on the guest:

$ wget http://localhost:7474/
--2020-02-25 19:08:16-- http://localhost:7474/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:7474... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:7474... connected.
HTTP request sent, awaiting response... 200 OK
Length: 216 [application/json]
Saving to: ‘index.html’

The resulting index.html contains some moderately interesting JSON:

{
"bolt_routing" : "neo4j://localhost:7687",
"transaction" : "http://localhost:7474/db/{databaseName}/tx",
"bolt_direct" : "bolt://localhost:7687",
"neo4j_version" : "4.0.0",
"neo4j_edition" : "community"
}

I see various references to "neobrowser" -- that's not helpful, because I don't run desktop tools on the guest VM.

I'm hoping someone can help me get through this bottleneck. In a more perfect world, there would be a "DigitalOcean"-style tutorial that provides a step-by-step recipe that starts from nothing, installs Neo4J, does whatever configuration is needed, and ends up with the movie database example running in a browser (Chrome or Firefox) running on the host system.

I'm installing this in a CentOS 7 guest vm running on a vmware hypervisor on a reasonably robust Windows 10 pro host system. So far as I know, I have ample RAM, disk, network bandwidth, CPU cycles, and so on.

I appreciate your patience with my newbie stumbles.

Looks like there might be something unusual going on with how CentOS is handling requests to localhost.

Try changing Neo4j listen_address from localhost (default) to the loopback IP in neo4j.conf:

dbms.connectors.default_listen_address=127.0.0.1

Success! I now see a "Connect to Neo4j" screen asking me for various things like Username and Password. I call that a win.

I've encountered this before using CentOS in a VM, where localhost and 127.0.0.1 behave differently. I appreciate the tip.

Sigh. Well, it seems to have worked just once, and now it's back to being catatonic.

I got one screen that was complaining about a "WebSocket connection failure" while trying to connect to bolt (on 7687). I edited neo4j.conf to set dbms.connector.bolt.tls_level=OPTIONAL and restarted, and got the original screen. I undid those changes and restarted, and I'm back where I started.

I think this is probably headed in the right direction, but no joy yet.

Meta-comment: I don't see an effective way to turn off the "Solution" checkbox. All I've managed to do so far is to incorrectly mark my own replies as solutions.

Okay, there's two good ways to solve this.

  • Brute force, manually set all the listen addresses.
  • Use the hosts-file to make everything play a little nicer.

https://neo4j.com/docs/operations-manual/current/configuration/connectors/

Set all the listen addresses

// dbms.connectors.default_listen_address=127.0.0.1
dbms.connector.bolt.listen_address=127.0.0.1:7687
dbms.connector.bolt.advertised_address=127.0.0.1:7687
dbms.connectors.http.listen_address=127.0.0.1:7474
dbms.connectors.http.advertised_address=127.0.0.1:7474
dbms.connectors.https.listen_address=127.0.0.1:7473
dbms.connectors.https.advertised_address=127.0.0.1:7473

Hosts file

CLI

$ sudo echo "127.0.0.1 myneo.local" >> /etc/hosts

neo4j.conf

dbms.connectors.default_listen_address=127.0.0.1
dbms.connectors.default_advertised_address=myneo.local

Then connect via http://myneo.local:7474

I'll try this and see if it helps.

On a different thread, I'm seeing a credible suggestion that I'm seeing a certificate issue apparently introduced with v4.0.0 of neo4j.

I've turned on httpd logging in neo4j.conf, and yet I see no indication that any of these browser requests are even hitting the port (7474).

I may try uninstalling 4.0.0 then reverting to the most recent prior version. I guess I can always generate some self-signed certs, perhaps I can force neo4j to use them.

No joy.

BTW, I don't see how the change to /etc/hosts on the guest has any effect on the browser, because it's using the Windows 10 hosts file (C:\windows\system32\drivers\etc\hosts).

It appears to me that the neo4j server listening on 7474 is refusing to connect to anything from the host. Here's what happens in an elevated command prompt running on the host (192.168.242.128 is IP address of the guest VM on the host's network):

C:\WINDOWS\system32>curl http://192.168.242.128:80
<h1>Hello world</h1>

C:\WINDOWS\system32>curl http://192.168.242.128:7474
curl: (7) Failed to connect to 192.168.242.128 port 7474: Connection refused

I think I'll muck about with certificates for a bit.

I found and fixed the problem. It was cockpit error elsewhere in neo4j.conf.

I reverted to the unmodified version, then made the following changes:

...
dbms.security.auth_enabled=false
...
dbms.connectors.default_listen_address=0.0.0.0
...
dbms.connector.bolt.enabled=true
...
dbms.connector.http.enabled=true

The last line was the key. I'm not sure how that got commented out, but I turned it back on and the neo browser is now working in both Chrome and Firefox.

I appreciate your assistance!

1 Like