Vapor Framework: настроить соединение postgres с SSL

Я пытаюсь подключиться к своей базе данных Heroku PostgreSQL, но у меня возникает следующая ошибка:

cannotEstablishConnection("FATAL:  no pg_hba.conf entry for host \"37.167.93.189\", user \"clpnkpyttmdtyq\", database \"d3h6147v73mgtu\", SSL off\n")

Я знаю, что базы данных Heroku postgres должны использовать SSL-соединение, но я не знаю, как настроить соединение для моего объекта Droplet.

Это мой файл конфигурации postgresql.json:

{
    "host": "ec2-54-163-224-108.compute-1.amazonaws.com",
    "user": "clpnkpyttmdtyq",
    "password": "99201aa07c48e18e7bdf210937857b85bee37cd8d8cb904381b1ddff934c7a4f",
    "database": "d3h6147v73mgtu",
    "port": 5432
}

Может быть, есть параметр ssl, о котором я не знаю?

Как я добавляю VaporPostgresSQLProvider :

let drop = Droplet()

// Tell the droplet to use our SQL provider service
try drop.addProvider(VaporPostgreSQL.Provider.self)

Любые идеи ?

Когда я пытаюсь использовать свою локальную базу данных postgres, она работает, потому что ей не требуется ssl-соединение.


person AnthonyR    schedule 20.12.2016    source источник
comment
github.com/vapor/postgresql/issues/15   -  person Vao Tsun    schedule 20.12.2016
comment
Это все еще продолжается?   -  person AnthonyR    schedule 20.12.2016
comment
не знаю - просто интересно, что вы используете, и нашел ссылку   -  person Vao Tsun    schedule 20.12.2016
comment
Я попытался удаленно получить доступ к Heroku PostgreSQL с локального Mac, и произошло то же самое.   -  person Genki    schedule 02.01.2017


Ответы (3)


Для Heroku нам нужен непроверенный транспорт TLS. https://api.vapor.codes/postgresql/latest/PostgreSQL/Classes/PostgreSQLConnection/TransportConfig.html

let pgURL = Environment.get("DATABASE_URL") ?? "postgres://user:password@host:port/database"

let pgConfig = PostgreSQLDatabaseConfig(url: pgURL, transport: PostgreSQLConnection.TransportConfig.unverifiedTLS)!
person Rigel David    schedule 31.12.2019
comment
Это сэкономило мне много времени: с марта 2021 года все подключения к базе данных Heroku должны использовать TLS/SSL. - person idej1234; 05.04.2021

это процесс, который лично мне дорого обошелся, это решение работает для меня, попробуйте это


В файле Config > secrets > postgresql.json добавьте эту конфигурацию (для использования локально или удаленно, если этот файл не существует, создайте его)

{
   "host": "127.0.0.1",
   "user": "your_user_pc", 
   "password": "",
   "database": "your_user_pc",
   "port": 5432
}

Пользователь может получить его из терминала

$ cd ~

В вашем файле Procfile (находится в вашем проекте, показать через Finder) отредактируйте и добавьте этот код

web: App --env=production --workdir="./"
web: App --env=production --workdir=./ --config:servers.default.port=$PORT --config:postgresql.url=$DATABASE_URL

Теперь вы можете перезапустить свое приложение в heroku, вам следует рассмотреть возможность правильной настройки сервера из heroku со всеми его учетными данными и надстройками Postgresql из интерфейса Heroku

Примечание. И не забывайте после каждого внесенного изменения запускать "vapor build" или "vapor build --clean"

person Lito    schedule 04.01.2017

Vapor 4 + build stack heroku-20 + стандартный план Heroku Postgres

Предложение Риджела Дэвида помогло мне

Но синтаксис unverifiedTLS немного изменился

if let databaseURL = Environment.get("DATABASE_URL"), var postgresConfig = PostgresConfiguration(url: databaseURL) {
    postgresConfig.tlsConfiguration = .forClient(certificateVerification: .none)
    app.databases.use(.postgres(
        configuration: postgresConfig
    ), as: .psql)
} else {
    // ...
}

Ознакомьтесь с документацией Vapor — https://docs.vapor.codes/4.0/deploy/heroku/

person Tanin    schedule 07.02.2021