Python psycopg2.connect失败,出现错误';连接被拒绝';(Django应用程序和数据库托管在单独的虚拟机上)
我有一个Django应用程序,其中应用程序和数据库位于两个单独的虚拟机中。我使用Azure。在尝试连接到单独Azure VM中托管的postgresql后端时,我在写: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
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,请参阅。此外,您还可以通过以下网址获得更多信息: