Невозможно подключить приложение NodeJS в Azure Служб приложений к базе данных Azure MySQL - PullRequest
1 голос
/ 03 апреля 2020

Я развернул NodeJS (с ExpressJS, Sequelize) для Azure Служб приложений. Работают простые API без подключения к базе данных, однако, когда я использую часть приложения, в которую загружаю данные из моей базы данных Azure MySQL, возникают проблемы с сертификатом. Я получаю это сообщение журнала из потока службы приложений. чтобы включить брандмауэр и использовать сертификат (BaltimoreCyberTrust Root .crt.pem).

Используя ту же инструкцию, с моего ноутбука я могу подключиться к удаленной базе данных Azure MySQL, используя этот CLI :

$ mysql -h <my-db>.mysql.database.azure.com -u <my-user> --ssl-mode=REQUIRED --ssl-ca=.\BaltimoreCyberTrustRoot.crt.pem -p

Я следил за другими вопросами StackOverflow / Github, связанными с этим, и следовал их настройкам следующим образом:

const mysql = require('mysql2');
...
var sequelize = new Sequelize(config.db, config.username, config.password, {
    host:    "<my-db>.mysql.database.azure.com",
    port:    3306,
    dialect: 'mysql',
    dialectOptions: {
        ssl: {
            ca: fs.readFileSync(__dirname + "/ssl/BaltimoreCyberTrustRoot.crt.pem")
        }
    }
});

Нужно ли устанавливать дополнительный ключ / сертификат в * 1019? *?

ssl: {
    key: fs.readFileSync(__dirname + "./certs/client-key.pem"),
    cert: fs.readFileSync(__dirname + "./certs/client-cert.pem"),
    ca: fs.readFileSync(__dirname + "/ssl/BaltimoreCyberTrustRoot.crt.pem")
}

Я использую Узел 12 (Узел 12.13 в Azure Служба приложений) и вот мои package.json зависимости:

"dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "faker": "^4.1.0",
    "mysql2": "^2.1.0",
    "sequelize": "^5.21.5"
}

1 Ответ

1 голос
/ 07 апреля 2020

Согласно моему тесту, я могу подключиться к mysql. Вы можете добавить дополнительный ключ / сертификат да или нет.

Если вы добавите, вы можете увидеть мой код, как показано ниже,

/*configuration*/
const sequelizeInstance  = new Sequelize("***db", "azure_root@***mysql", "Ja***.****20", {
host: "***mysql.mysql.database.azure.com",
dialect: 'mysql',
dialectOptions: {
    ssl: {
        ca: fs.readFileSync(path.resolve(__dirname, 'BaltimoreCyberTrustRoot.crt.pem'));
    }
}
});

/*test connection*/
try
{
    sequelizeInstance.authenticate();
    console.log('Connection has been established successfully.');
} 
catch (error) {
    console.error('Unable to connect to the database:', error);
}

Если нет, вы просто установите ssl=true, как документ .

Надеюсь, это полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...