我目前真的很沮喪,因為無法將我的應用程式部署到 Heroku 并將我的資料庫連接到 Google Cloud SQL。
我已經做了什么?
- 我已經設定了 SSL 來連接它們
- 我已設定 Cloud SQL Auth 代理( 在 IAM 管理器中設定 Cloud SQL 客戶端角色)
- 我已經通過 Heroku 方法等進行了構建包。
并且總體失敗了。
這是我在 Nestjs 中通過 Typeorm 配置的資料庫。
import { TypeOrmModuleOptions } from "@nestjs/typeorm"
const fs = require("fs");
require('dotenv').config()
export class OrmConfig {
// Config TypeOrm
getConfig() {
const ormConfig: TypeOrmModuleOptions = {
type: 'postgres',
url: 'postgres://myusername:mypassword@myhostincloudsql(publicip):5432/mydb',
// host: 'myhostincloudsql(public ip)',
// port: 5432,
// username: 'myusername',
// password: 'mypassword',
// database: 'mydb',
entities: ['dist/**/*.entity{.js,.ts}'],
synchronize: false,
migrationsRun: true,
logging: false,
logger: 'file',
migrations: [
'dist/database/migrations/**/*{.js, .ts}'
],
cli: {
migrationsDir: 'database/migrations'
},
ssl: true,
extra: {
ssl: {
ca: fs.readFileSync('./src/config/server-ca.pem'),
cert: fs.readFileSync('./src/config/client-cert.pem'),
key: fs.readFileSync('./src/config/client-key.pem'),
// rejectUnauthorized: false
}
}
}
return ormConfig
}
}
export default new OrmConfig().getConfig()
這是我的 app.module.ts
import { SendGridModule } from '@anchan828/nest-sendgrid';
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
// import { BlogModule } from './blog/blog.module';
import OrmConfig from './config/ormConfig';
import { BusinessContactModule } from './contact/business/business.module';
import { InvestorNotificationController } from './contact/investor/investment-recommendation/investor-notification.controller';
import { InvestmentRecommendationModule } from './contact/investor/investment-recommendation/investor-notification.module';
import { InvestorContactModule } from './contact/investor/angel-investor/investor.module';
import { EmitenCampaignModule } from './emiten-campaign/emiten-campaign.module';
import { EmitenModule } from './emiten/emiten.module';
import { FlashMobileModule } from './flash-mobile/flash-mobile.module';
import { CoreModule } from './global/core.module';
import { Agent } from './middleware/agent';
import { AuthModule } from './middleware/auth.module';
import { TekenajaModule } from './tekenaja/tekenaja.module';
import { UserModule } from './user/user.module';
require('dotenv').config();
@Module({
imports: [
/**
* ================================
* Typeorm Config
* ================================
*/
SendGridModule.forRoot({
apikey: process.env.SENDGRID_API_KEY,
}),
TypeOrmModule.forRoot(OrmConfig), // This is I call it
ConfigModule.forRoot(),
AuthModule,
TekenajaModule,
FlashMobileModule,
CoreModule,
EmitenModule,
EmitenCampaignModule,
// InvestorContactModule,
// BusinessContactModule,
UserModule,
// BlogModule
InvestmentRecommendationModule
]
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(Agent)
.forRoutes('/');
}
}
注意:無論如何,我在 Google Cloud SQL 中使用公共 ip
我已經嘗試從 Heroku Postgres 連接它,并且可以正常作業。我嘗試使用 Cloud SQL 欄位,得到類似這樣的錯誤

現在,我應該怎么做才能在它們之間建立聯系?我希望回答我的問題伙計們。非常感謝。
uj5u.com熱心網友回復:
在 CloudSQL 中 - 您的實體必須具有公共 IP 地址(連接部分),并且您需要授權網路中的地址 IP,您將從該網路嘗試連接。Ofc 你可以設定 0.0.0.0 但不要這樣做。更好的方法是設定 ssh 連接。

uj5u.com熱心網友回復:
除了您的應用之外,請嘗試在同一個發電機中運行 Cloud SQL 代理。
例如:
web: trap '' SIGTERM; ./cloud_sql_proxy -credential_file sa.json -instances=INSTANCE_CONN_NAME=tcp:5432 & npm start & wait -n; kill -SIGTERM -$$; wait
請注意,您需要確保 Cloud SQL 代理二進制檔案和憑據檔案包含在您的應用中。而且您不想將它們檢查到源代碼控制中。
請參閱
非常感謝大家
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414165.html
標籤:
