我有一个 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 时,我分别在应用程序和数据库 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
:
关于python - psycopg2.connect 失败,错误为 'connection refused'(Django app+db 托管在单独的虚拟机上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117970/