django не удалось подключиться к серверу: Отказано в разрешении серверу, работающему на хосте и принимающему соединения TCP / IP на удаленном порту хост

#django #postgresql

#django #postgresql

Вопрос:

У меня странная проблема. Я могу подключиться к удаленному хосту с помощью psql из командной строки, но не могу использовать те же учетные данные в файле настроек django. Я получаю сообщение об ошибке:

Не удалось подключиться к серверу: Отказано в разрешении серверу, работающему на хосте «удаленный ip» и принимающему соединения TCP / IP на порту port_number порта?

Если я могу подключиться с помощью psql, а не с помощью django, чего мне здесь не хватает? Я также проверил через интерпретатор python, что я могу загрузить psycopg2.

Любая помощь приветствуется, поскольку не помогло то, что я нашел в Интернете.

Приветствия,

D

Вот db conf в settings.py

 'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': '<db name goes here>', # Or path to database file if using sqlite3.
        'USER': '<db user>', # Not used with sqlite3.
        'PASSWORD': '<pswd goes here>', # Not used with sqlite3.
        'HOST': '<remote ip goes here>', 
        'PORT': '5432', 
}
  

Комментарии:

1. Вам нужно будет опубликовать некоторый пример кода / конфигурации.

2. Я мог бы это сделать … но вот кое-что более интересное… Я могу запустить команду python manage.py запустите сервер, и я могу использовать site…it должно быть что-то с apache, но какое отношение apache имеет к подключениям к БД?

3. Конечно, это так. Apache запускает ваш сервер приложений (mod_wsgi) в качестве модуля. У вас может не быть разрешения на подключение к базе данных как у пользователя, работающего под управлением wsgi / apache, если postgres разрешает подключения только от определенного пользователя

Ответ №1:

Судя по вашему описанию, это как-то связано с Apache и его разрешениями на доступ к базе данных. Вы не упомянули, какую ОС вы используете, но если на ней запущен SELinux, правила по умолчанию запрещают apache подключаться к БД. Если это так, вы можете временно включить его, выполнив:

 setsebool httpd_can_network_connect_db
  

Здесь приведены более подробные инструкции.

Комментарии:

1. Ах да, извините за это … это в Red Hat.

2. Это сделало свое дело … после перезагрузки все было в порядке. Приветствия.

Ответ №2:

Чтобы изменения сохранялись при перезагрузках (протестировано на Centos):

 setsebool -P httpd_can_network_connect_db on
  

подробнее здесь

Ответ №3:

Протестировано на CentOS.

 service httpd stop

service postgresql stop

setsebool -P httpd_can_network_connect 1

service httpd start

service postgresql start
  

Ответ №4:

Предоставление неверных учетных данных для аутентификации приложению Django может привести к этой проблеме. Чтобы решить эту проблему, вы можете выполнить следующие шаги:

  1. Убедитесь, что Postgres установлен:

    apt show postgresql

  2. Проверьте, запущен ли PostgreSQL:

    sudo service postgresql status

  3. Убедитесь, что вы действительно можете подключиться к PostgreSQL

    sudo su - postgres

  4. После того, как в пользовательском postgres запустите командный интерфейс

    psql

  5. Проверьте информацию о подключении, выполнив:

    conninfo

В моем случае я давно установил Postgres и просто забыл информацию о доступе, такую как имя пользователя, пароль, название базы данных или доступ к порту.