Определение Sequelize в google cloud sql nodejs

Привет, у меня возникла проблема с подключением к Google Cloud SQL из GAE.

Мое приложение работает внутри контейнера докеров, вот файл докера.

FROM node:8.10.0-alpine

ARG NODE_ENV=production
ENV NODE_ENV=$NODE_ENV

# env like sql user db instance connection name
# Set a working directory
WORKDIR /usr/src/app
COPY ./build/package.json .
COPY ./build/yarn.lock .

# Install Node.js dependencies
RUN yarn install --production --no-progress
# Copy application files
COPY ./build .
COPY ./src/db/seeders ./seeds
COPY ./src/db/migrations ./migrations
COPY ./scripts ./scripts

RUN yarn run db:seed # -> failed to run this line
RUN yarn run db:migrate
# Run the container under "node" user by default
USER node

CMD [ "node", "server.js" ]

для подключения к базе данных я использую Sequealize, это моя конфигурация подключения

module.exports = {
  production: {
    dialect: 'postgres',
    seederStorage: 'sequelize',
    seederStorageTableName: 'sequelize_seeder',
    username: process.env.SQL_USER,
    password: process.env.SQL_PASSWORD,
    database: process.env.SQL_DATABASE,
    host: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`,
    logging: true,
    dialectOptions: {
      socketPath: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`,
      supportBigNumbers: true,
      bigNumberStrings: true,
      ssl: false,
    },
    pool: {
      max: 5,
      idle: 30000,
      acquire: 60000,
    },
    operatorsAliases: false,
    define: {
      freezeTableName: true,
    },
  },
};

Я пробовал почти все, от настройки хоста до localhost / 127.0.0.1. При этом я получаю SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:5432

Если я устанавливаю хост: host: / cloudsql / $ {process.env.INSTANCE_CONNECTION_NAME} ''

У меня другая ошибка SequelizeConnectionError: connect ENOENT {MY_INSTANCE_CONNECTION_NAME}.s.PGSQL.5432

мой файл app.yaml

env: flex
runtime: custom
env_variables:
   #env db user etc..
beta_settings:
  cloud_sql_instances: MY_INSTANCE_CONNECTION_NAME

Я попытался войти в систему с помощью knex, и мне удалось подключиться, поэтому я предполагаю, что что-то не так с моей конфигурацией


person Or Frenkel    schedule 06.07.2018    source источник
comment
Привет! У меня такая же проблема. Как вы ее решили? не могли бы вы помочь. Я использую NodeJS + Postgres + Sequelize + GoogleCloudRUN + Typesript. Я перепробовал почти все варианты, но не смог.   -  person ruyamonis346    schedule 02.07.2021


Ответы (2)


Сегодня потратил целый день, пытаясь подключиться из приложения Google App Engine к Google Cloud SQL (PostreSQL) при развертывании через конвейеры Bitbucket.

Вот конфиги, которые у меня сработали (может быть, кому-то они сэкономят несколько часов жизни):

const sequelize = new Sequelize(DB_NAME, USERNAME, PASSWORD, {
    dialect: 'postgres',
    // e.g. host: '/cloudsql/my-awesome-project:us-central1:my-cloud-sql-instance'
    host: '/cloudsql/${INSTANCE_CONNECTION_NAME}',
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    },
    dialectOptions: {
        // e.g. socketPath: '/cloudsql/my-awesome-project:us-central1:my-cloud-sql-instance'
        // same as host string above
        socketPath: '/cloudsql/${INSTANCE_CONNECTION_NAME}'
    },
    logging: false,
    operatorsAliases: false
});

app.yaml файл:

runtime: nodejs
env: flex

# make sure to include code below
beta_settings:
    cloud_sql_instances: my-awesome-project:us-central1:my-cloud-sql-instance

В моем случае, когда я не предоставил host, это не помогло, как и все другие варианты со строкой подключения при подключении к Google Cloud SQL.

Ваше здоровье!

person Oleksandr Oliynyk    schedule 08.10.2018
comment
Похоже, что Sequalize подключается через localhost, если вы указываете имя пользователя / пароль, даже если указан socketPath. Согласно этому [суть] [1] варианты должны либо иметь нулевого пользователя и передать, либо указать хост (похоже, что socketPath потенциально не используется?). Я не могу найти никаких разъяснений в документации Sequalize. [1]: gist.github.com/myndzi/03eb5c42e8385470403c - person kurtisvg; 23.10.2018
comment
да, проверил исходный код продолжения [1] (строка 56, 153), localhost действительно значение по умолчанию для host. Также можно найти больше о подключении через сокеты UNIX здесь [2]. [1]: github.com/sequelize/sequelize/blob/master/ lib / sequelize.js, [2]: - person Oleksandr Oliynyk; 23.10.2018

Похоже, что-то не так с параметрами, переданными в sequlize. Попробуйте использовать простую строку подключения var conString = "postgres: // Имя пользователя: Пароль @ Host: 5432 / YourDatabase";

person iKatalan    schedule 10.07.2018