Я пытаюсь развернуть приложение django на AWS с установкой, в которой у меня есть один экземпляр EC2, на котором запущен nginx / uwsgi, и второй экземпляр EC2, где у меня установлен MySQL 5.5. Оба принадлежат к группе по умолчанию (включены SSH, HTTP, HTTPS и MYSQL). В конце концов, я разделю группы для БД и приложения / веб-сервера, но пока я хочу, чтобы приложение работало.
Мои настройки django db выглядят так:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db',
'USER': 'db_user',
'PASSWORD': 'db_pwd',
'HOST': '<public dns of MySQL EC2 instance(tried also private ip)>',
'PORT': '3306',
}
}
Каждый раз, когда я пытаюсь запустить syncdb, я получаю следующую ошибку:
_mysql_exceptions.OperationalError: (1130, «Хосту 'ip-xx-xx-xx-xxx.ec2.internal' не разрешено подключаться к этому серверу MySQL»)
Обратите внимание, когда я устанавливаю MySQL в том же экземпляре EC2, что и сервер веб-приложений / приложений, приложение работает. В этом случае мой файл настроек db settings выглядел так:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db',
'USER': 'db_user',
'PASSWORD': 'db_pwd',
'HOST': '',
'PORT': '',
}
}
Я закомментировал привязку 127.0.0.1 в файле /etc/mysql/my.cnf, как было предложено в одном сообщении, и даже установил его на 0.0.0.0 (перезапустил MySQL после изменений), но это не помогло.
Какие-либо предложения?
Спасибо
Бинарный лабиринт
[Составление этого ответа из потока комментариев.]
При настройке группы безопасности не включайте порт MySQL (3306) для общего Интернета (0.0.0.0/0), так как это опасно. Вместо этого включите порт 3306 только для группы безопасности в вашей учетной записи, чтобы к ней могли подключаться только ваши экземпляры.
Вам нужно будет использовать внутренний IP-адрес сервера базы данных, а не общедоступный IP-адрес при подключении от клиента к другому экземпляру.
"bind-address = 0.0.0.0" позволяет MySQL принимать соединения от других хостов (в соответствии с правилами группы безопасности и iptables).
Предоставление разрешений для 'someuser' @ '%' позволяет этому пользователю подключаться с любого хоста с учетом ограничений группы безопасности.