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

Django部署到DigitalOcean后,使用.env文件配置PostgreSQL出现密码验证失败问题求助

Django部署到DigitalOcean后,使用.env文件配置PostgreSQL出现密码验证失败问题求助

看起来你遇到了部署后数据库认证失败的典型问题,别着急,咱们一步步排查:

首先先明确你的错误场景:本地开发完全正常,部署到DigitalOcean后出现:

port 5432 failed: FATAL: password authentication failed for user "username" connection to server at "localhost"

你的配置文件我已经看到了,settings.py里用environ读取.env的方式是没问题的,那咱们从几个常见的坑入手:

1. 先确认服务器上有没有.env文件

很多人部署的时候会因为.gitignore排除了.env,导致服务器上根本没有这个文件!你可以登录DigitalOcean的服务器,进入项目目录,用ls -a看看有没有.env文件。如果没有,手动上传一份,或者用服务器上的编辑器创建一个,把本地的内容复制进去。

2. 验证PostgreSQL用户和密码是否匹配

有时候本地的数据库用户密码和服务器上的不一样,或者服务器上的用户根本没权限访问数据库:

  • 登录服务器的PostgreSQL:sudo -u postgres psql
  • 先检查用户dc_user是否存在:SELECT usename FROM pg_user;
  • 如果存在,重置密码确保和.env里的一致(注意特殊字符要加单引号):ALTER USER dc_user WITH PASSWORD '#$#$$%#$#%$###$';
  • 还要确保这个用户有权限访问polymath_core数据库:GRANT ALL PRIVILEGES ON DATABASE polymath_core TO dc_user;

3. 检查PostgreSQL的认证配置文件pg_hba.conf

这个文件控制着谁能怎么连接数据库,默认路径是/etc/postgresql/<你的PostgreSQL版本>/main/pg_hba.conf:

  • 找到本地连接的配置项,确保是md5认证(需要密码),而不是peer或trust:
    local   all             all                                     md5
    host    all             all             127.0.0.1/32            md5
    
  • 修改后记得重启PostgreSQL服务:sudo systemctl restart postgresql

4. 确认环境变量是否被正确加载

有时候Django运行的服务(比如Gunicorn、uWSGI)可能没读到.env文件的变量:

  • 你可以在服务器上直接打印环境变量测试:echo $DB_PASSWORD,看看输出的是不是你设置的密码
  • 或者临时在settings.py里加一行print(config("DB_PASSWORD")),运行一下Django的命令(比如python manage.py check),看看控制台输出的密码是否正确

5. 排查密码里的特殊字符问题

你的密码有很多特殊符号,有可能在读取的时候被转义了。可以先把密码改成一个简单的字符串(比如test123456)测试,如果能正常连接,再逐步替换回原来的密码,找出哪个特殊字符出了问题,或者尝试给.env里的密码加上双引号试试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:19:34