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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:15:30