почему мой удаленный сервер не может подключиться к экземпляру postgres на другом сервере Django?

#django #postgresql #celery

Вопрос:

У меня есть два сервера Ubuntu A и B.

  • Изначально у меня были Django, postgres, сельдерей на одном сервере A. Все работало нормально.
  • Теперь у A есть Django, postgres, а у B установлены celery и проект Django.
  • Миграции БД выполняются на A, а подключение к базе данных является правильным на A. Это я могу сказать, потому что, когда я пытаюсь запустить сервер сельдерея на сервере А, я могу успешно запустить сельдерей через командную строку. Без проблем.
  • В соответствии с требованиями я должен запускать Django и postgres только на сервере A, а Сельдерей-на сервере B.
  • Поскольку я использую те же настройки сервера Django на сервере B, что и на сервере A, поэтому настройки Django.py имеет те же настройки подключения к БД, что и показано ниже. т. Е. настройки БД одинаковы для A и B
     DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'xyz',
            'USER': 'smthing',
            'PASSWORD': 'smthing',
            'HOST': 'some_IP',
            'PORT': '5432',
        }
    }
     
  • Чтобы узнать, работает ли postgres или нет на сервере A. Я выполнил команду service

$ статус службы postgresql

 ● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2021-06-10 10:57:11 IST; 1 weeks 4 days ago
 Main PID: 1276 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/postgresql.service
 
  • Чтобы узнать, есть ли список postgres на 5432, я выполнил команду netstat:
     $ netstat -nl | grep postgres
    
    unix  2      [ ACC ]     STREAM     LISTENING     17357    /var/run/postgresql/.s.PGSQL.5432
     

Если все это происходит, то почему сервер B выдает ошибку, как показано ниже, когда я пытаюсь запустить сельдерей?

 django.db.utils.OperationalError: could not connect to server: Connection refused
        Is the server running on host "server A" and accepting
        TCP/IP connections on port 5432?
 
  • Одна вещь, которую я заметил, когда я попытался связаться с сервером A по telnet с сервера B, я получил неудачный вывод.
     telnet server A 5432
    [sudo] password for username:
    Trying server A...
    telnet: Unable to connect to remote host: Connection refused
     

_ Кроме того, пожалуйста, дайте мне знать, нужно ли мне также создать имя пользователя и пароль на сервере B? т. е. имя пользователя и пароль, которые присутствуют в качестве пользователя postgres на сервере A.

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

1. По умолчанию установка Postgres доступна только через локальный хост. Вам нужно будет как-то настроить его (google), чтобы он был доступен извне. В качестве альтернативы вы можете использовать размещенное решение, такое как AWS RDS.

2. @AlexandrTatarinov, у меня нет облачной зависти. Они находятся на двух разных рабочих столах.