[英]How to connect an Azure App services to Azure Database for MySQL Flexible Server
[英]Unable to connect NodeJS app in Azure App Services to Azure MySQL Database
我已將 NodeJS(使用 ExpressJS、Sequelize)部署到 Azure 應用服務。 沒有數據庫連接的簡單 API 可以工作,但是當我使用從 Azure MySQL 數據庫加載數據的應用程序部分時,證書出現問題。 我從應用服務日志 Stream 中收到此日志消息:
Unhandled rejection SequelizeConnectionError: unable to get local issuer certificate
我已按照此處關於如何啟用防火牆和使用證書 (BaltimoreCyberTrustRoot.crt.pem) 的步驟進行操作。
使用相同的指令,從我的筆記本電腦,我可以使用這個 CLI 連接到遠程 Azure MySQL 數據庫:
$ 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")
}
}
});
我是否需要在ssl
下設置額外的密鑰/證書?
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(Azure 應用服務中的節點 12.13),這是我的package.json
依賴項:
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1",
"faker": "^4.1.0",
"mysql2": "^2.1.0",
"sequelize": "^5.21.5"
}
根據我的測試,我可以連接到 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
。
希望它對你有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.