直接上代码,configuration文件内容,在onConfigLoad声明周期中,创建好隧道
import { Configuration, App, IMidwayContainer } from '@midwayjs/core'
import * as koa from '@midwayjs/koa'
import * as validate from '@midwayjs/validate'
import * as info from '@midwayjs/info'
import * as orm from '@midwayjs/typeorm'
import { join } from 'path'
// import { DefaultErrorFilter } from './filter/default.filter';
// import { NotFoundFilter } from './filter/notfound.filter';
import { ReportMiddleware } from './middleware/report.middleware'
import { createTunnel } from 'tunnel-ssh'
@Configuration({
imports: [
koa,
validate,
{
component: info,
enabledEnvironment: ['local'],
},
orm
],
importConfigs: [join(__dirname, './config')],
})
export class ContainerLifeCycle {
@App()
app: koa.Application
async onConfigLoad() {
// 在本地开发时,启动ssh隧道,去连接数据库
process.env.MIDWAY_SERVER_ENV === 'local' && await this.getTunnel()
}
async onReady(container: IMidwayContainer) {
// add middleware
this.app.useMiddleware([ReportMiddleware])
// add filter
// this.app.useFilter([NotFoundFilter, DefaultErrorFilter]);
}
async getTunnel() {
const tunnelOptions = {
autoClose: true
}
const serverOptions = {
// 本地端口
port: 3307
}
// 隧道机配置
const sshOptions = {
host: 'xxxxxxxx',
port: 22,
username: 'xxx',
password: 'xxxx'
}
const forwardOptions = {
srcAddr: '0.0.0.0',
srcPort: 3307,
// 目标机器ip和端口
dstAddr: 'xxxxx',
dstPort: 3306
}
await createTunnel(tunnelOptions, serverOptions, sshOptions, forwardOptions)
}
}
下图是数据库连接配置,端口和创建隧道时映射的端口保持一致即可