You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plesk上Docker部署的Neo4j不使用指定SSL证书,自行生成证书问题

解决Neo4j Docker容器替换自定义SSL证书被删除/权限拒绝的问题

嘿,这个问题我之前帮朋友排查过类似的,咱们先理清楚核心原因,再一步步解决:

问题拆解

你现在遇到的两个核心问题其实是连锁的:

  • 没设775权限时,Neo4j容器里的运行用户读不动你挂载的证书目录,卡在清理自签文件那步报权限错误
  • 设了775后虽然能读写,但Neo4j不认这个证书的所有权,直接给你删了生成自签的
    而且之前正常、VPS暂停恢复后出问题,大概率是暂停期间挂载目录的所有者/权限被Plesk或者系统重置了

核心原因

Neo4j Docker容器默认是用neo4j普通用户(UID/GID一般是1000)跑的,不是root。当你把宿主机的证书目录挂载进去:

  1. 如果目录/文件的所有者不是容器里的neo4j用户,就会触发权限拒绝,连清理自签文件的权限都没有
  2. 要是权限开成775但所有者不对,Neo4j能写目录,但会觉得这个证书不是它“合法拥有”的,直接删了重新生成自签的

一步步解决

1. 把宿主机证书目录的所有者改成容器的neo4j用户

首先得确认容器里neo4j用户的UID/GID,一般都是1000,保险起见可以先查一下:

docker run --rm neo4j:3.5.13 id neo4j

输出应该是uid=1000(neo4j) gid=1000(neo4j)这类的,然后修改你宿主机上证书目录的所有者(假设你的目录是/var/www/your-site/neo4j-ssl):

chown -R 1000:1000 /var/www/your-site/neo4j-ssl

2. 设置严格的证书文件权限

Neo4j对私钥的权限要求很严,不能太开放,按下面的命令改:

# 目录权限设为755,保证neo4j能进入
chmod 755 /var/www/your-site/neo4j-ssl
# 证书文件设为644,保证可读即可
chmod 644 /var/www/your-site/neo4j-ssl/neo4j.cert
# 私钥必须设为600,只有所有者能读写,不然Neo4j会拒绝使用
chmod 600 /var/www/your-site/neo4j-ssl/neo4j.key

3. 修改Neo4j配置,强制使用自定义证书

找到你挂载的Neo4j配置文件neo4j.conf(一般挂载在容器的/var/lib/neo4j/conf/路径下),添加或修改以下配置:

# 开启HTTPS连接
dbms.connector.https.enabled=true
# 指定证书目录为挂载的/ssl路径
dbms.directories.certificates=/ssl
# 关键:禁止自动生成自签证书
dbms.security.self_signed_certificate_autogenerate=false
# 指定使用你提供的证书文件名
dbms.security.ssl.policy.https.certificate=neo4j.cert
dbms.security.ssl.policy.https.private_key=neo4j.key

4. 重启容器验证

重启你的Neo4j容器,然后查看日志确认配置生效:

docker logs <你的容器名或者容器ID>

如果日志里出现Loaded SSL certificate from /ssl/neo4j.cert这类信息,就说明配置成功了,再去宿主机的证书目录看看,你的正规证书肯定不会被删除。

额外提醒

Plesk有时候会自动调整文件权限,要是以后VPS再暂停恢复,可能又会重置目录所有者。你可以写个简单的启动脚本,在容器启动前自动执行chown和chmod命令,省得每次手动修改。

内容的提问来源于stack exchange,提问作者SebastianG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:57:52