python - psycopg2.connect 失败,错误为 'connection refused'(Django app+db 托管在单独的虚拟机上)

标签 python django postgresql ubuntu azure

我有一个 Django 应用程序,其中应用程序和数据库驻留在两个单独的虚拟机中。我使用Azure。在尝试连接到单独的 Azure VM 中托管的 postgresql 后端时,我编写:conn = psycopg2.connect("dbname='dbname' host='dnsname'"),其中值主机已从此处脱离 Azure 门户:

enter image description here

我也尝试过使用上面的虚拟IP地址作为主机。两种方法都失败了,我收到连接错误:无法连接到服务器:连接被拒绝。服务器是否在主机“myapp.cloudapp.net”(23.132.341.192) 上运行并接受端口 5432 上的 TCP/IP 连接? 请注意,在此处粘贴错误时我更改了 IP 地址。

托管 postgresql 数据库的 Azure VM 已将端口 5432 添加到其端点。此外,我的这个 postgresql 后端所属的应用程序是一个 Django/Python 应用程序。我的虚拟机有 Ubuntu 14.04。在设置 postgresql 时,我分别在应用程序和数据库 VM 上运行了以下安装命令:

sudo apt-get update

sudo apt-get install PostgreSQL postgresql-contrib

sudo apt-get install postgresql-server-dev-all

sudo apt-get install libpq-dev

尽管应用和数据库虚拟机都安装了上述所有内容,但数据库本身仅在后一个虚拟机中创建。我没有创建单独的用户;相反,我做了: sudo su postgres

psql -d postgres -U postgres

然后

创建数据库dbname;

<小时/>

如何修复 psycopg2.connect 错误?如果需要,请询问更多信息。

最佳答案

为了将 PostgreSQL 分离到另一个 Azure VM 中,我们需要在 Azure VM 端和 PostgreSQL 服务上配置一些设置。

1、修改 /etc/postgresql/9.4/main/postgresql.conf 中的 listen_addresses="*" ,以允许本地以外的其他客户端请求您的 PostgreSQL服务。

2、添加以下行作为/etc/postgresql/9.4/main/pg_hba.conf的第一行。它允许所有用户使用加密密码访问所有数据库:

# 类型数据库用户 CIDR 地址方法 主机全部 全部 0.0.0.0/0 md5

3、运行命令sudo service postgresql restart重启服务

4、登录Azure管理门户,在虚拟机的Endpoints页面添加请求规则,将公共(public)端口5432配置为私有(private)端口5432: enter image description here

关于python - psycopg2.connect 失败,错误为 'connection refused'(Django app+db 托管在单独的虚拟机上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117970/

相关文章:

python - curses getch() 在 python 中为主窗口和填充返回不同的值

python - OAUTH2 - Fitbit 使用 requests_oauthlib

Django 单元测试 : South-migrated DB works in MySQL, 在 PostGreSQL 中抛出重复的 PK 错误。我错过了什么还是这是一个错误?

sql - 如何使用查询的起始值创建序列?

python - 使用python请求库将文件上传到谷歌云存储时出错

python - 滚动条件 Pandas DataFrame 列

Python:将列表中的一项变成两项

Django 管理员 |对象列表中的组数据

django - Django Tastypie 中 'obj_get' 的正确实现是什么?

python - 什么是执行 AND/OR 搜索 Django-Postgres 应用程序的有效方法?