Hello StackOverFlowers :)到目前为止,我一直在同一个微EC2实例上运行我的Django后端和我的PostgreSQL数据库。
我已经设置了两个EC2实例,一个用我的django后端,另一个用我的PostgreSQL数据库,我使用pgadminII来管理它。两个实例都使用相同的安全组,并打开所有相同的端口。我已将弹性IP附加到我的Django实例,并将另一个弹性IP附加到我的Postgresql实例。
现在我知道在settings.py中我需要将'HOST'更改为PostgreSQL实例的地址。但我不太清楚该放什么。我是否放置了PostgreSQL实例的弹性IP?
我做了一些研究,许多消息来源说我需要输入PostgreSQL实例的内部服务器IP地址。如果是这种情况,我怎样才能找到内部服务器IP地址并将其输入“主机”?为清楚起见,我复制并粘贴了下面的settings.py代码。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db',
'USER': 'django_login',
'PASSWORD': 'password',
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
感谢您的帮助,如果我不够清楚,请发表评论并告诉我,以便我能为您和其他人更清楚地说明:)
答案 0 :(得分:8)
所以在David Wolever回复之后,我最终还是和亚马逊的那些人谈话。万一你们中的任何人再次遇到这篇文章。仅使用内部服务器IP是不够的,但它是一个良好的开端。如果您正在为Postgresql实例(最好是Natty Narwhal)运行Ubuntu,请确保编辑pg_hba.conf和postgresql.conf文件。
您通常可以在以下位置找到这两个文件:/etc/postgresql/8.4/main/(pg_hba.conf或postgresql.conf)
请注意,我们在我们的堆栈中使用Postgresql 8.4,它被证明是在我们的测试期间在Natty Narwhal上运行的Postgresql最稳定和最稳定的版本。
对于不同版本的Postgresql(9.1,9.0等..),您可以找到这两个文件的目录与上面列出的不同。确保您知道这些文件的正确目录。
转到Amazon Management Console并确保两个实例位于同一安全组下。 Postgresql和Django默认使用5432和8000,所以请确保打开这两个端口!
(在postgresql实例的终端上执行此操作)
sudo vim postgresql.conf
按键盘上的“i”开始进行更改。使用向下箭头键直到遇到
LISTEN_ADDRESSES:'localhost'
删除前面的哈希标记,而不是'localhost',添加postgresql实例的私有IP (你可以在EC2管理控制台上找到私有IP)然后你还必须添加127.0.0.1。
示例:强>
LISTEN_ADDRESSES:'private ip,127.0.0.1'
请确保用逗号分隔私人IP和本地主机地址,并将其全部保留在一个引号内。
完成更改后,按ESC并按ZZ(两次加盖以保存更改)
sudo vim pg_hba.conf
使用向下箭头键,直到遇到如下所示的内容:
Database administrative login by UNIX sockets
local all postgres ident
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5
local django_db django_login md5
host replication postgres 127.0.0.1/32 md5
host replication postgres ::1/128 md5
再次按下键盘上的“i”并按照我上面的方式对其进行更改。
您会注意到在IPv6下,我有django_db和django_login,将其更改为您的postgresql数据库的名称和您分别用于postgresql数据库的用户登录。
完成更改后,按ESC并按ZZ(两次加盖以保存更改)
在终端中使用以下命令重新启动postgresql服务器:
sudo /etc/init.d/postgresql restart
恭喜!服务器已启动并运行,但还有最后一步。
启动你的Django EC2实例,转到你的settings.py并查找:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db',
'USER': 'django_login',
'PASSWORD': 'password',
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
在'HOST':''下,将其更改为'HOST':'无论Postgresql实例的私有IP是什么'
保存更改。打开终端并找到manage.py文件所在的目录。 进入该目录后,运行以下命令: ./ manage.py syncdb
这些将为您在Django中创建的模型创建所有必需的表。恭喜,您已成功在Database实例和Django实例之间创建了一个链接。
如果您有任何疑问,我将非常乐意为您提供帮助!在下面留下评论,我会尽快给你回复! :)
答案 1 :(得分:4)
您的Postgres实例不需要弹性IP。只需使用其内部IP。内部IP可从管理控制台获得,也可以运行ifconfig
。