Ubuntu 22.04服务器上Django无法读写db.sqlite3问题求助
Django部署Ubuntu 22.04后无法读写sqlite3数据库的解决办法
确认运行Django的进程用户
先明确Web服务(gunicorn、Apache等)实际运行的用户,执行对应命令:ps aux | grep gunicorn # 使用gunicorn时执行 # 或 ps aux | grep apache2 # 使用Apache时执行Ubuntu环境下Web服务进程用户通常为
www-data,这是后续权限调整的核心依据。修正数据库文件及目录权限
直接执行以下命令彻底修正权限问题:# 修改数据库文件的所属用户和组 sudo chown www-data:www-data /你的数据库绝对路径/db.sqlite3 # 赋予www-data读写权限 sudo chmod 664 /你的数据库绝对路径/db.sqlite3 # 修改数据库所在目录的所属用户和组(确保进程能访问目录) sudo chown www-data:www-data /数据库文件所在目录的绝对路径 # 设置目录权限为755(允许用户读写执行,组和其他用户读执行) sudo chmod 755 /数据库文件所在目录的绝对路径避免用root用户操作数据库
后续执行迁移、启动服务等操作时,切换到www-data用户执行,防止再次出现root创建文件的权限问题:# 执行数据库迁移 sudo -u www-data python manage.py migrate # 启动gunicorn服务(示例) sudo -u www-data gunicorn 你的项目名.wsgi:application --bind 127.0.0.1:8000检查SELinux(若手动启用)
Ubuntu 22.04默认SELinux为关闭状态,若你手动开启了,需调整文件安全上下文:sudo semanage fcontext -a -t httpd_sys_rw_content_t "/你的数据库绝对路径/db.sqlite3" sudo restorecon -v "/你的数据库绝对路径/db.sqlite3"验证权限有效性
切换到www-data用户测试数据库读写:sudo -u www-data sqlite3 /你的数据库绝对路径/db.sqlite3在sqlite交互界面执行
SELECT 1;,若能正常返回1,说明权限配置生效。
内容的提问来源于stack exchange,提问作者Tess
相关产品推荐
相关产品推荐

