2015-12-06 16 views
1

我有一個Django應用程序,其中應用程序和數據庫駐留在兩個單獨的虛擬機中。我使用Azure。在嘗試連接到單獨的天青VM託管,我正在寫一個PostgreSQL後端:conn = psycopg2.connect("dbname='dbname' host='dnsname'"),其中主機值下車在Azure門戶網站從這裏:psycopg2.connect因錯誤'連接被拒絕'而失敗(Django app + db託管在單獨的虛擬機上)

enter image description here

我也曾嘗試作爲主機的虛擬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虛擬機已將port 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

而且即使應用和數據庫虛擬機都安裝了上述所有內容,即數據庫本身只在後面的VM中創建。我沒有創建一個單獨的用戶;我不是做: sudo su postgres

psql -d postgres -U postgres

然後

CREATE DATABASE dbname;


如何解決psycopg2.connect錯誤?如果需要,請索取更多信息。

+0

只是好奇,你有沒有試圖手動訪問這個Postgres實例?這意味着從django機器,你可以手動連接到Postgres? –

+0

如在?我登錄到Django機器,並在shell中編寫'psycopg2.connect(「dbname ='dbname'host ='dnsname'」)',以連接到另一臺機器上的數據庫。如果這就是你的意思,是的,我試過了,不起作用。 –

+0

不,我的意思是打開一個Postgres客戶端並遠程連接到本機,同時嘗試ping並查看是否可以從Django機器到達Postgres機器。 –

回答

2

至於將PostgreSQL分離到另一個Azure虛擬機中,我們需要在Azure虛擬機端和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重新啓動該服務

4,登錄Azure的管理門戶,加入終端頁面的請求規則的虛擬機,配置公共端口5432私人端口5432enter image description here

+0

不,您只能在虛擬機上運行postgresql服務器作爲數據庫層 –

+0

嗯,我需要做的其他事情,以確保兩個經典虛擬機可以'看到'彼此,除了他們在同一資源組? –

+0

Azure將在附近的一些數據中心部署虛擬機,如果它們位於相同的資源組中,將優化網絡。我想你可以首先確保你可以從本地連接到虛擬機上的PostgreSQL。如果它工作正常,然後嘗試在另一臺虛擬機上連接 –

相關問題