我有一个Django应用程序,其中应用程序和数据库驻留在两个独立的VM中。我使用Azure。在尝试连接到单独的Azure VM中托管的postgresql后端时,我写的是conn = psycopg2.connect("dbname='dbname' host='dnsname'")
,其中host的值是从Azure门户获取的:
我还尝试使用上面的虚拟IP地址作为主机。两种方法都失败了,我收到连接错误:could not connect to server: Connection refused. Is the server running on host "myapp.cloudapp.net" (23.132.341.192) and accepting TCP/IP connections on port 5432?
请注意,我在此处粘贴错误时更改了IP地址。
托管postgresql数据库的Azure VM已将port 5432
添加到其端点。此外,我的这个postgresql后端所属的应用程序是一个Django / Python应用程序。我的VM有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
然后
CREATE DATABASE dbname;
如何解决psycopg2.connect
错误?如果需要,请询问更多信息。
答案 0 :(得分:2)
至于将PostgreSQL分离到另一个Azure VM,我们需要在Azure VM端和PostgreSQL服务上配置多个设置。
1,修改listen_addresses="*"
处的/etc/postgresql/9.4/main/postgresql.conf
,以允许本地旁边的其他客户端请求您的PostgreSQL服务。
2,将以下行添加为/etc/postgresql/9.4/main/pg_hba.conf
的第一行。它允许使用加密密码访问所有用户的所有数据库:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
3,运行命令sudo service postgresql restart
重启服务