$ VER=$(docker exec moltbook-neo4j neo4j --version | awk '{print $NF}')
$ echo $VER
5.26.16$ docker exec moltbook-neo4j sh -c 'du -sh /data /data/databases /data/transactions 2>/dev/null'
1.1G /data
$ docker exec moltbook-neo4j sh -c 'du -sh /data/databases/neo4j /data/databases/system /data/transactions/neo4j /data/transactions/system 2>/dev/null'
312M /data/databases/neo4j
1.2M /data/databases/system
514M /data/transactions/neo4j
258M /data/transactions/system# 1) Get the exact Neo4j version running in your container
VER=$(docker exec moltbook-neo4j neo4j --version | awk '{print $NF}')
# 2) Make a local folder for dump files
mkdir -p "$HOME/neo4j_backups"
# 3) Stop the running Neo4j container (required for Community/offline dump)
docker stop moltbook-neo4j
# 4) Dump the main database
docker run --rm -it \
-v moltbook_neo4j_data:/data \
-v "$HOME/neo4j_backups":/backups \
neo4j/neo4j-admin:$VER \
neo4j-admin database dump neo4j --to-path=/backups --overwrite-destination=true
# 5) Dump the system database too
docker run --rm -it \
-v moltbook_neo4j_data:/data \
-v "$HOME/neo4j_backups":/backups \
neo4j/neo4j-admin:$VER \
neo4j-admin database dump system --to-path=/backups --overwrite-destination=true
# 6) Start Neo4j again
docker start moltbook-neo4j- If doesn't work due to permission issue:
# 1) Get the exact Neo4j version running in your container
VER=$(docker exec moltbook-neo4j neo4j --version | awk '{print $NF}')
# 2) Make a local folder for dump files
mkdir -p "$HOME/neo4j_backups"
# 3) Stop the running Neo4j container (required for Community/offline dump)
docker stop moltbook-neo4j
# 4) create /data/neo4j.dump inside the Neo4j data volume
docker run --rm -it \
--user=0:0 \
-v moltbook_neo4j_data:/data \
neo4j:${VER}-community \
sh -c 'neo4j-admin database dump neo4j --to-path=/data --overwrite-destination=true && ls -lh /data/*.dump'
# 5) Copy it out to your current directory
docker create --name neo4j-dump-copy -v moltbook_neo4j_data:/data alpine true
docker cp neo4j-dump-copy:/data/neo4j.dump ./neo4j.dump
docker rm neo4j-dump-copy
ls -lh ./neo4j.dump
# 6) Copy out the system database
docker run --rm -it \
--user=0:0 \
-v moltbook_neo4j_data:/data \
neo4j:${VER}-community \
sh -c 'neo4j-admin database dump system --to-path=/data --overwrite-destination=true && ls -lh /data/system.dump'
docker create --name neo4j-dump-copy -v moltbook_neo4j_data:/data alpine true
docker cp neo4j-dump-copy:/data/system.dump ./system.dump
docker rm neo4j-dump-copy
docker start moltbook-neo4j-
Backup location:
$HOME/neo4j_backups/neo4j.dumpand$HOME/neo4j_backups/system.dump -
To restore
docker stop moltbook-neo4j
docker run --rm -it \
--user=0:0 \
-v moltbook_neo4j_data:/data \
-v "$PWD:/backups:Z" \
neo4j:${VER}-community \
sh -c '
neo4j-admin database load system --from-path=/backups --overwrite-destination=true &&
neo4j-admin database load neo4j --from-path=/backups --overwrite-destination=true
'
docker start moltbook-neo4jTo add new indexes/constraints, just re-run schema. Because statements use IF NOT EXISTS, this is safe.
Option A (recommended): rerun init script
docker compose run --rm crawler python -m scripts.init_dbOption B: apply schema directly with cypher-shell inside the Neo4j container
# Find the Neo4j container name
docker ps --format '{{.Names}}' | grep neo4j
# Then apply schema
docker exec -i moltbook-neo4j cypher-shell -u neo4j -p "$NEO4J_PASSWORD" < crawler/cypher/schema.cypherRun in Neo4j Browser:
MATCH (n) DETACH DELETE n;Then re-run full crawl.
MATCH (n) RETURN labels(n) AS label, count(*) AS cnt ORDER BY cnt DESC;
MATCH ()-[r]->() RETURN type(r) AS rel, count(*) AS cnt ORDER BY cnt DESC;MATCH (s:Submolt)<-[:IN_SUBMOLT]-(p:Post)
RETURN s.name, count(p) AS posts
ORDER BY posts DESC
LIMIT 20;MATCH (a:Agent)
WHERE a.last_active IS NOT NULL
RETURN a.name, a.karma, a.last_active
ORDER BY a.last_active DESC
LIMIT 25;MATCH (a:Agent)
WHERE a.profile_last_fetched_at IS NULL
OR a.profile_last_fetched_at < datetime() - duration("P7D")
RETURN a.name, a.profile_last_fetched_at
ORDER BY a.profile_last_fetched_at ASC
LIMIT 200;