Python psycopg2.connect失败,出现错误';连接被拒绝';(Django应用程序和数据库托管在单独的虚拟机上)

Python psycopg2.connect失败,出现错误';连接被拒绝';(Django应用程序和数据库托管在单独的虚拟机上),python,django,postgresql,ubuntu,azure,Python,Django,Postgresql,Ubuntu,Azure,我有一个Django应用程序,其中应用程序和数据库位于两个单独的虚拟机中。我使用Azure。在尝试连接到单独Azure VM中托管的postgresql后端时,我在写:conn=psycopg2.connect(“dbname='dbname'host='dnsname')),其中主机的值是从这里从Azure门户获取的: 我还尝试了上面的虚拟IP地址作为主机。两种方法都失败了,我收到一个连接错误:无法连接到服务器:连接被拒绝。服务器是否在主机“myapp.cloudapp.net”(23.13

我有一个Django应用程序,其中应用程序和数据库位于两个单独的虚拟机中。我使用Azure。在尝试连接到单独Azure VM中托管的postgresql后端时,我在写:
conn=psycopg2.connect(“dbname='dbname'host='dnsname'))
,其中主机的值是从这里从Azure门户获取的:

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

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

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-ADDRESS方法
托管所有0.0.0.0/0 md5

3、运行命令
sudo service postgrestart
重新启动服务

4、登录Azure管理门户,在虚拟机的端点页面中添加请求规则,将公共端口
5432
配置为专用端口
5432

只是好奇,您是否尝试手动访问此Postgres实例?这意味着从django机器上,您可以手动连接到Postgres吗?我登录到Django机器,并在shell上编写了
psycopg2.connect(“dbname='dbname'host='dnsname'))
,以便连接到另一台机器中的数据库。如果这是你的意思,是的,我试过了,不起作用。不,我的意思是打开一个Postgres客户端并远程连接到机器,也尝试ping,看看你是否可以从Django Machone访问Postgres机器。不,你只能在VM上运行postgresql server作为数据库tierHmm,我还需要做些什么来确保这两个经典虚拟机可以彼此“看到”,而不是它们在同一个资源组中?如果它们在同一个资源组中,Azure将在附近的一些数据中心部署虚拟机,这将优化网络。我认为您可以首先确保您可以从本地连接到您的PostgreSQL on VM。如果工作正常,请尝试在另一个虚拟机上连接。问题可能是我没有提供密码?我尝试在
localhost
上连接;最终得到
fe\u sendauth:没有提供密码
。然后,我尝试在未提供主机的情况下连接
localhost
(这迫使psycopg2使用Unix套接字以与
psql
相同的方式进行连接,因此不需要密码),我成功地建立了连接。也许你也可以在你的答案中加入这一点;同时,我将进一步测试它,如果它确实解决了这个问题,我将接受答案。您可以尝试将密码设置为默认用户postgres,请参阅。此外,您还可以通过以下网址获得更多信息: