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
相关产品推荐
相关产品推荐

