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

Ubuntu服务器执行Django createsuperuser时报错django.db.utils.OperationalError: attempt to write a readonly database求助

Ubuntu服务器执行Django createsuperuser时报错django.db.utils.OperationalError: attempt to write a readonly database求助

嗨,我来帮你捋捋这个问题哈!

你遇到的这个报错核心原因其实很明确:你手动执行python3 manage.py createsuperuser时,当前登录的用户(应该是ubuntu用户)没有对sqlite3数据库文件的写入权限。虽然你把NGINX的运行用户设为了www-data,而且数据库文件和目录的权限也属于www-data,但你自己跑命令的时候是用当前用户身份操作的,这个用户没权限写数据库,所以就报错啦。

给你两个可行的解决方案:

方案一:用www-data身份执行创建命令

因为数据库的权限是归www-data的,直接切换到这个用户来运行命令就行:

sudo -u www-data python3 manage.py createsuperuser

这样就用有写入权限的身份操作数据库,应该就能顺利创建超级用户了。

方案二:临时调整权限让当前用户可写入

这个方法要注意安全,用完建议还原权限:

  1. 先给数据库文件添加其他用户的写入权限:
chmod o+w /home/ubuntu/.ssh/project/db.sqlite3
  1. 确保上级目录有执行权限(不然连进入目录都做不到):
chmod o+x /home/ubuntu/.ssh/project/

执行完这两步再跑python3 manage.py createsuperuser应该就没问题了。如果担心安全,创建完成后可以把权限改回去:

chmod o-w /home/ubuntu/.ssh/project/db.sqlite3

另外还有个小建议:把数据库放在.ssh目录里其实不太合适,.ssh主要是用来存SSH密钥的,建议把数据库移到项目的专属目录下,比如/home/ubuntu/project/db.sqlite3,这样权限管理更清晰,也更安全哦。

备注:内容来源于stack exchange,提问作者user1114030

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:44:39