Commit 7b3aafd7 authored by 王曜嵚 Wang Yaoqin's avatar 王曜嵚 Wang Yaoqin

Merge branch 'dev-temp' into 'dev'

dev: 调整代码,适配本地化部署

See merge request !1
parents c713c968 bd502e44
# 说明 ## 说明
该项目是方便前端开发者快速启动后端服务,切换服务分支。 该项目是方便前端开发者快速启动后端服务,切换服务分支。
如果前端本地开发要同时启动 `IDEA` 以及后端服务,电脑性能不足时会很卡,通过将后端服务部署在 `192.168.0.4` 服务器上,前端通过接口调用的方式获取后端数据,这样前端仅需要启动前端服务即可。 如果前端本地开发要同时启动 `IDEA` 以及后端服务,电脑性能不足时会很卡,通过将后端服务部署在 `192.168.0.4` 服务器上,前端通过接口调用的方式获取后端数据,这样前端仅需要启动前端服务即可。
# 备注 当前端开发电脑性能足够时,仍然可以使用本程序,帮助快速启动后端服务,避免前端开发人员操作 `Java` `IDEA` `Maven` 时造成的各种问题。**在本地使用此项目时,请将后续文档中的 `192.168.0.4` 替换为你的本机地址**
[安装文档](./docs/安装.md)
## 功能特性
- 容器化部署
- 一键编译、运行 `v2``v1` 后端
- 自定义 `properties` 文件参数
- 浏览器端 `Vscode` 窗口显示容器内容
### 环境要求
- `Docker`
- `Node v22 及以上版本`
- `Git Bash` 或其他类 Unix 环境仿真与命令行交互软件
### 安装及部署
运行 npm 命令安装依赖及编译项目产物
```bash
npm install
npm run build
```
使用 `Docker` 命令生成主容器,用于存放、运行辅助程序
```bash
docker run -d \
--name logwire_backend_helper.main \
-p 30000:3000 \
--add-host=host.docker.internal:host-gateway \
node:22 \
sh -c "(cd /var/nuxt-backend-helper/.output && PORT=8080 node ./server/index.mjs) & sleep infinity"
```
创建主容器成功后,需要自行下载 `openlogic-openjdk-8u442-b06-linux-x64.tar.gz``openlogic-openjdk-17.0.10+7-linux-x64.tar.gz` 作为切换 `v1``v2` 时的 `Java` 环境,[点击跳转下载地址](https://www.openlogic.com/openjdk-downloads)
> 如果发现版本发生变化,或网站上已不存在某版本时,咨询后端人员需要哪个版本,并全文检索替换版本号,然后重新打包编译
```bash
docker cp openlogic-openjdk-8u442-b06-linux-x64.tar.gz logwire_backend_helper.main:/var/openlogic-openjdk-8u442-b06-linux-x64.tar.gz
docker cp openlogic-openjdk-17.0.10+7-linux-x64.tar.gz logwire_backend_helper.main:/var/openlogic-openjdk-17.0.10+7-linux-x64.tar.gz
```
调用 `deploy.sh` 命令,将项目产物复制到主容器内部
```bash
bash deploy.sh
```
进入容器后调用 `node` 命令,启动项目产物,启动后可以通过 `192.168.0.4:30000` 访问到辅助程序界面
```bash
docker exec -it logwire_backend_helper.main bash
```
```bash
# 在服务器环境下
cd /var/nuxt-backend-helper/.output && node ./server/index.mjs
# 在本机环境下,设置 NUXT_ENV 参数后,会额外安装 redis, zookeeper, rocket mq 等容器
cd /var/nuxt-backend-helper/.output && NUXT_PG_HOST=host.docker.internal NUXT_PUBLIC_DOCKER_HOST=host.docker.internal NUXT_ENV=dev node /var/nuxt-backend-helper/.output/server/index.mjs
```
### 使用
#### 登录界面
在访问 `192.168.0.4:30000` 后,可以看到以下界面,在输入框内输入用户名,点击登录。
> 用户名随意,只要不与其他开发人员重复即可,往往采用开发人员姓名拼音
![登录页](./docs/images/登录页.png)
#### 项目界面
首次登录用户,进入首页后如图
![首次登录页](./docs/images/首页.png)
此时 `logwire-v1``logwire-v2` 系统都还未初始化,点击 `logwire-v2` 旁的初始化按钮
> 因为开发的先后顺序,所以必须先初始化 `logwire-v2` ,再初始化 `logwire-v1`
![初始化](./docs/images/初始化.png)
在初次初始化时,**肯定**会失败,这是因为 `gitlab` 的用户没有和容器内的 `git` 环境关联,现在需要将提示中的**加粗字体**,放入到 `gitlab ssh` 设置中,并重新点击初始化,耗时较久
![ssh密钥](./docs/images/ssh密钥.png)
全部初始化后,右侧按钮会变为 `编译``运行`
> `运行` 按钮需要在执行一次编译后才会显示
![初始化结束](./docs/images/初始化结束.png)
##### logwire-v2 操作
除了常规的 `编译` `运行` 按钮,对于 `logwire-v2` 系统还具有以下操作:
* `切换分支`:跳转到[切换分支](./docs/分支.md)页面
* `修改配置`:跳转到[修改配置](./docs/配置.md)页面
* `打开 Vscode`: 打开容器内 `logwire-v2` 的目录页
* `调试`:执行调试程序。
* `打包微信压缩文件`:为了方便设计器打包小程序文件后,快速的下载打包文件。在设计器内,点击了 `打包微信小程序` 后,执行对应程序,打包结束后,点击此按钮,可以将小程序所需要的页面文件打包,然后下载后放置到小程序目录,就可以在本地开发小程序时,看到设计器内更改后的页面效果。
##### 编译
点击 `编译` 按钮后,会打包后端程序。首次点击时耗费时间久,是为了下载后端打包所需要的文件。
##### 运行
点击 `运行` 按钮后,等待一段时间,出现提示后,设置对应的配置即可启动服务
![运行](./docs/images/运行.png)
此时提示内容如下
> TIP: 请代理后端请求到 192.168.0.4:30001, 开发环境域名和端口号为 a.test.com:23335,a.test.com:23336,a.test.com:29000
需要前端开发者将 `vue.config.js` 配置文件中,关于 `devServer` 的接口代理到 `http://192.168.0.4:30001` 地址上。并且只有 `a.test.com:23335,a.test.com:23336,a.test.com:29000` 这些 `host` 地址可以访问该后端程序,这是 `logwire` 的后端框架决定的。
##### 调试
调试需要在 [配置](./docs/配置.md) 页面,输入后端开发者的 ip 地址。在编译 `logwire-v2` 系统后,点击调试按钮。会将后端的 `IDEA` 的远程调试工具连接到容器内的 `java` 程序。
> 如果系统正在运行,必须先停止!
##### logwire-v1 操作
除了常规的 `编译` `运行` 按钮,对于 `logwire-v1` 系统还具有以下操作:
* `切换分支`:跳转到切换分支页面
* `修改配置`:跳转到修改配置页面
* `打开 Vscode`: 打开容器内 `logwire-v1` 的目录页
[使用文档](./docs/登录.md)
#!/bin/bash
CONTAINER="logwire_backend_helper.main"
echo "=== 1. 关键:先把所有软链接转换成真实文件(模仿7-Zip)==="
# 递归复制 .output 为新目录,自动把软链接变成真实文件
cp -rL .output .output_real
echo -e "\n=== 2. 打包真实文件目录(无任何软链接)==="
tar -cf .output.tar .output_real
echo -e "\n=== 3. 复制到容器 ==="
docker cp .output.tar "${CONTAINER}:/var/"
echo -e "\n=== 4. 容器内解压并重命名为标准目录 ==="
docker exec "${CONTAINER}" sh -c '
cd /var
rm -rf nuxt-backend-helper
mkdir -p nuxt-backend-helper
mv .output.tar nuxt-backend-helper/
cd nuxt-backend-helper
# 解压
tar -xf .output.tar
# 把复制后的目录重命名回标准名称 .output
mv .output_real .output
# 清理
rm -f .output.tar
echo -e "\n✅ 部署完成!所有软链接已转为真实文件(和7-Zip一致)"
'
# 本地清理
rm -rf .output_real .output.tar
echo -e "\n🎉 成功!"
\ No newline at end of file
...@@ -10,13 +10,13 @@ export default defineNuxtConfig({ ...@@ -10,13 +10,13 @@ export default defineNuxtConfig({
} }
}, },
runtimeConfig: { runtimeConfig: {
pgUser: '', pgUser: 'postgres',
pgPort: '', pgPort: '25556',
pgHost: '', pgHost: '192.168.0.4',
pgPassword: '', pgPassword: 'postgres',
pgDatabase: '', pgDatabase: 'postgres',
public: { public: {
dockerHost: '' dockerHost: '192.168.0.4'
} }
} }
}) })
UPDATE v2
SET status = CASE
WHEN status IN ('running', 'launched', 'compiling', 'compiled', 'created') THEN 'created'
ELSE NULL
END;
UPDATE v1
SET status = CASE
WHEN status IN ('running', 'launched', 'compiling', 'compiled', 'created') THEN 'created'
ELSE NULL
END;
\ No newline at end of file
...@@ -4,6 +4,24 @@ ...@@ -4,6 +4,24 @@
http://maven.apache.org/xsd/settings-1.0.0.xsd"> http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors> <mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror> <mirror>
<id>nexus.grea.member</id> <id>nexus.grea.member</id>
<mirrorOf>*</mirrorOf> <mirrorOf>*</mirrorOf>
......
...@@ -34,7 +34,7 @@ logging.level.org.springframework.boot.autoconfigure.logging=error ...@@ -34,7 +34,7 @@ logging.level.org.springframework.boot.autoconfigure.logging=error
gateway.mq.name-srv-address=192.168.0.190:9876 gateway.mq.name-srv-address=192.168.0.190:9876
# Gateway 请求 Backend 超时时间; 默认值:60000; 单位:毫秒 # Gateway 请求 Backend 超时时间; 默认值:60000; 单位:毫秒
gateway.router-timeout=60000 #gateway.router-timeout=60000
# 环境类型; 默认值:dev; 可选值:dev; uat; prod; # 环境类型; 默认值:dev; 可选值:dev; uat; prod;
gateway.environment-type=dev gateway.environment-type=dev
# 是否开启 WebSocket 服务 # 是否开启 WebSocket 服务
......
...@@ -18,7 +18,7 @@ export default defineEventHandler(async (event) => { ...@@ -18,7 +18,7 @@ export default defineEventHandler(async (event) => {
} }
// 创建 postgres 不一定要在本机,即使是 dev 环境也可以联远程的容器 // 创建 postgres 不一定要在本机,即使是 dev 环境也可以联远程的容器
await LogUtil.run(username, 'v1-创建 postgres 容器', async () => { await LogUtil.run(username, 'v1-创建 postgres 容器', async () => {
if (process.env.NODE_ENV?.trim() !== 'production') { if (process.env.NUXT_ENV?.trim() !== 'production') {
let postgresInfo = await docker.checkContainer('postgres_12') let postgresInfo = await docker.checkContainer('postgres_12')
if (!postgresInfo) { if (!postgresInfo) {
let postgres = await docker.checkAndCreateContainer({ name: 'postgres_12', img: 'postgres:12', env: ["POSTGRES_PASSWORD=postgres"], portBindings: { '5432/tcp': [{ HostPort: PgPort.toString() }] } }) let postgres = await docker.checkAndCreateContainer({ name: 'postgres_12', img: 'postgres:12', env: ["POSTGRES_PASSWORD=postgres"], portBindings: { '5432/tcp': [{ HostPort: PgPort.toString() }] } })
...@@ -40,7 +40,7 @@ export default defineEventHandler(async (event) => { ...@@ -40,7 +40,7 @@ export default defineEventHandler(async (event) => {
}) })
await LogUtil.run(username, 'v1-创建 redis 容器', async () => { await LogUtil.run(username, 'v1-创建 redis 容器', async () => {
if (process.env.NODE_ENV?.trim() !== 'production') { if (process.env.NUXT_ENV?.trim() !== 'production') {
let redisInfo = await docker.checkContainer('redis') let redisInfo = await docker.checkContainer('redis')
if (!redisInfo) { if (!redisInfo) {
let redis = await docker.checkAndCreateContainer({ name: 'redis', img: 'redis', portBindings: { '6379/tcp': [{ HostPort: '6379' }] } }) let redis = await docker.checkAndCreateContainer({ name: 'redis', img: 'redis', portBindings: { '6379/tcp': [{ HostPort: '6379' }] } })
...@@ -64,9 +64,9 @@ export default defineEventHandler(async (event) => { ...@@ -64,9 +64,9 @@ export default defineEventHandler(async (event) => {
await LogUtil.run(username, 'v1-安装 openjdk ', async () => { await LogUtil.run(username, 'v1-安装 openjdk ', async () => {
// 文件过大,已存储到容器 /var 目录下 // 文件过大,已存储到容器 /var 目录下
await docker.putArchive({ container, tarPath: path.resolve('/var/openlogic-openjdk-8u402-b06-linux-x64.tar.gz'), targetPath: '/var' }) await docker.putArchive({ container, tarPath: path.resolve('/var/openlogic-openjdk-8u442-b06-linux-x64.tar.gz'), targetPath: '/var' })
await docker.execContainerCommand({ container, cmd: 'cp -r openlogic-openjdk-8u402-b06-linux-x64/ java-8-openjdk', dir: '/var' }) await docker.execContainerCommand({ container, cmd: 'cp -r openlogic-openjdk-8u442-b06-linux-x64/ java-8-openjdk', dir: '/var' })
await docker.execContainerCommand({ container, cmd: 'rm -rf openlogic-openjdk-8u402-b06-linux-x64', dir: '/var' }) await docker.execContainerCommand({ container, cmd: 'rm -rf openlogic-openjdk-8u442-b06-linux-x64', dir: '/var' })
}) })
await LogUtil.run(username, 'v1-下载字符集', async () => { await LogUtil.run(username, 'v1-下载字符集', async () => {
......
...@@ -28,10 +28,12 @@ export default defineEventHandler(async (event) => { ...@@ -28,10 +28,12 @@ export default defineEventHandler(async (event) => {
} catch (err) { } catch (err) {
} }
LogUtil.print(username, `[progress] [[1;34mInfo[m] 编译中..... \n`) LogUtil.print(username, `[progress] [[1;34mInfo[m] 编译中..... \n`)
await docker.execContainerCommand({ container, cmd: 'bash build-release.sh --module=logwire', dir: '/var/logwire-backend', quiet: true }) await docker.execContainerCommand({ container, cmd: 'bash build.sh backend', dir: '/var/logwire-backend/logwire-parent', quiet: true })
await docker.execContainerCommand({ container, cmd: 'bash build-release.sh --module=assemble', dir: '/var/logwire-backend', quiet: true }) // await docker.execContainerCommand({ container, cmd: 'bash build-release.sh --module=assemble', dir: '/var/logwire-backend', quiet: true })
try { try {
// 打包完成后,移动默认配置文件, 修改配置文件信息 // 打包完成后,移动默认配置文件, 修改配置文件信息
await docker.execContainerCommand({ container, cmd: 'mkdir frontend frontend/main', dir: '/var/logwire-backend/build-output/backend' })
await docker.execContainerCommand({ container, cmd: 'touch index.html', dir: '/var/logwire-backend/build-output/backend/frontend/main' })
await docker.execContainerCommand({ container, cmd: 'mv -f ../tenants_config build-output/backend/', dir: '/var/logwire-backend' }) await docker.execContainerCommand({ container, cmd: 'mv -f ../tenants_config build-output/backend/', dir: '/var/logwire-backend' })
await docker.execContainerCommand({ container, cmd: 'chmod 755 build-output/backend/transform-miniapp.sh', dir: '/var/logwire-backend' }) await docker.execContainerCommand({ container, cmd: 'chmod 755 build-output/backend/transform-miniapp.sh', dir: '/var/logwire-backend' })
} catch (err) { } catch (err) {
......
...@@ -22,6 +22,13 @@ export default defineEventHandler(async (event) => { ...@@ -22,6 +22,13 @@ export default defineEventHandler(async (event) => {
container = await docker.checkAndCreateContainer({ container = await docker.checkAndCreateContainer({
name: username + '.node', name: username + '.node',
img: 'node:16-bullseye', img: 'node:16-bullseye',
cmd: [
'sh', '-c', `
(code-server --bind-addr 127.0.0.1:8000 --auth none) &
(nginx) &
sleep infinity
`
],
exposedPorts: { '8080/tcp': {} }, exposedPorts: { '8080/tcp': {} },
portBindings: { '8080/tcp': [{ HostPort: port }] } portBindings: { '8080/tcp': [{ HostPort: port }] }
}) })
...@@ -50,32 +57,41 @@ export default defineEventHandler(async (event) => { ...@@ -50,32 +57,41 @@ export default defineEventHandler(async (event) => {
await stopPgClient(client) await stopPgClient(client)
} }
}) })
console.log('process.env.NUXT_ENV ', process.env.NUXT_ENV)
await LogUtil.run(username, '创建 redis 容器', async () => { await LogUtil.run(username, '创建 redis 容器', async () => {
if (process.env.NODE_ENV?.trim() !== 'production') { try {
let redisInfo = await docker.checkContainer('redis') if (process.env.NUXT_ENV?.trim() !== 'production') {
if (!redisInfo) { let redisInfo = await docker.checkContainer('redis')
let redis = await docker.checkAndCreateContainer({ name: 'redis', img: 'redis', portBindings: { '6379/tcp': [{ HostPort: '6379' }] } }) if (!redisInfo) {
await docker.startContainer({ container: redis }) let redis = await docker.checkAndCreateContainer({ name: 'redis', img: 'redis', portBindings: { '6379/tcp': [{ HostPort: '6379' }] } })
await docker.startContainer({ container: redis })
}
} }
} catch(err) {
console.log('创建 redis 容器异常: ' + err)
} }
}) })
await LogUtil.run(username, '创建 zookeeper 容器', async () => { await LogUtil.run(username, '创建 zookeeper 容器', async () => {
if (process.env.NODE_ENV?.trim() !== 'production') { try {
let zookeeper = await docker.checkAndCreateContainer({ name: 'zookeeper', img: 'zookeeper', portBindings: { '2181/tcp': [{ HostPort: '2181' }] } }) if (process.env.NUXT_ENV?.trim() !== 'production') {
await docker.startContainer({ container: zookeeper }) let zookeeper = await docker.checkAndCreateContainer({ name: 'zookeeper', img: 'zookeeper', portBindings: { '2181/tcp': [{ HostPort: '2181' }] } })
await docker.startContainer({ container: zookeeper })
}
} catch (err) {
console.log('创建 zookeeper 容器异常: ' + err)
} }
}) })
// 检查本机 rocketmq 端口是否被占用,被占用说明已经有 rockqtmq 服务启动,这时候就不安装容器了 // 检查本机 rocketmq 端口是否被占用,被占用说明已经有 rockqtmq 服务启动,这时候就不安装容器了
await LogUtil.run(username, '创建 rocketmq serv 容器', async () => { await LogUtil.run(username, '创建 rocketmq serv 容器', async () => {
if (process.env.NODE_ENV?.trim() !== 'production') { if (process.env.NUXT_ENV?.trim() !== 'production') {
let rockermqsrv = await docker.checkAndCreateContainer({ name: 'rocketmq.srv', img: 'foxiswho/rocketmq:4.8.0', portBindings: { '9876/tcp': [{ 'HostPort': '9876' }] /** , '10909/tcp': [], '10911/tcp': [], '10912/tcp': []*/ }, env: ['JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m'] , cmd: ['bash', '-c', 'mqnamesrv'] }) let rockermqsrv = await docker.checkAndCreateContainer({ name: 'rocketmq.srv', img: 'foxiswho/rocketmq:4.8.0', portBindings: { '9876/tcp': [{ 'HostPort': '9876' }] /** , '10909/tcp': [], '10911/tcp': [], '10912/tcp': []*/ }, env: ['JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m'] , cmd: ['bash', '-c', 'mqnamesrv'] })
await docker.startContainer({ container: rockermqsrv }) await docker.startContainer({ container: rockermqsrv })
} }
}) })
await LogUtil.run(username, '创建 rocketmq broker 容器', async () => { await LogUtil.run(username, '创建 rocketmq broker 容器', async () => {
if (process.env.NODE_ENV?.trim() !== 'production') { if (process.env.NUXT_ENV?.trim() !== 'production') {
let rocketmqbroker = await docker.checkAndCreateContainer({ name: 'rocketmq.broker', img: 'foxiswho/rocketmq:4.8.0', portBindings: { '10909/tcp': [{ 'HostPort': '10909' }], '10911/tcp': [{ 'HostPort': '10911' }] /** , '9876/tcp': [],'10912/tcp': [] */ }, env: ['JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m'] }) let rocketmqbroker = await docker.checkAndCreateContainer({ name: 'rocketmq.broker', img: 'foxiswho/rocketmq:4.8.0', portBindings: { '10909/tcp': [{ 'HostPort': '10909' }], '10911/tcp': [{ 'HostPort': '10911' }] /** , '9876/tcp': [],'10912/tcp': [] */ }, env: ['JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m'] })
await docker.startContainer({ container: rocketmqbroker }) await docker.startContainer({ container: rocketmqbroker })
......
...@@ -12,6 +12,7 @@ export default defineEventHandler(async (event) => { ...@@ -12,6 +12,7 @@ export default defineEventHandler(async (event) => {
await changeProjectStatus( 'v2', username, 'status', 'stopping') await changeProjectStatus( 'v2', username, 'status', 'stopping')
await docker.execContainerCommand({ container, cmd: 'pm2 delete backend', quiet: true }) await docker.execContainerCommand({ container, cmd: 'pm2 delete backend', quiet: true })
await docker.execContainerCommand({ container, cmd: 'pm2 delete gateway', quiet: true }) await docker.execContainerCommand({ container, cmd: 'pm2 delete gateway', quiet: true })
await docker.execContainerCommand({ container, cmd: 'pm2 delete compile', quiet: true })
LogUtil.print(username, `程序已停止`) LogUtil.print(username, `程序已停止`)
await changeProjectStatus( 'v2', username, 'status', 'compiled') await changeProjectStatus( 'v2', username, 'status', 'compiled')
......
...@@ -7,7 +7,22 @@ export default defineNitroPlugin(async (nitroApp) => { ...@@ -7,7 +7,22 @@ export default defineNitroPlugin(async (nitroApp) => {
if (!postgres) { if (!postgres) {
postgres = await docker.checkAndCreateContainer({ name: 'postgres_12', img: 'postgres:12', env: ["POSTGRES_PASSWORD=postgres"], portBindings: { '5432/tcp': [{ HostPort: PgPort.toString() }] } }) postgres = await docker.checkAndCreateContainer({ name: 'postgres_12', img: 'postgres:12', env: ["POSTGRES_PASSWORD=postgres"], portBindings: { '5432/tcp': [{ HostPort: PgPort.toString() }] } })
await docker.startContainer({ container: postgres }) await docker.startContainer({ container: postgres })
await sleep(3000) // 在初次创建 Postgres 容器时,容器启动会等待20s左右,此时连接会报错
// 循环十次创建客户端
let temp
for (let i=1; i <= 20;i++) {
try {
await sleep(3000)
temp = await createPgClientFactory()
} catch (err) {
console.log('[ERROR] 第' + i + '次连接 POSTGRES 失败')
if (i === 20) {
console.log('[ERROR] 所有轮询失败,请检查代码及IP配置')
}
} finally {
temp && await stopPgClient(temp)
}
}
} else { } else {
await docker.startContainer({ container: postgres }) await docker.startContainer({ container: postgres })
await sleep(3000) await sleep(3000)
...@@ -23,5 +38,10 @@ export default defineNitroPlugin(async (nitroApp) => { ...@@ -23,5 +38,10 @@ export default defineNitroPlugin(async (nitroApp) => {
await executePgQuery({ client, query: fs.readFileSync(path.resolve('./public/files/postgres/create_v2.sql'), { encoding: 'utf-8' })}) await executePgQuery({ client, query: fs.readFileSync(path.resolve('./public/files/postgres/create_v2.sql'), { encoding: 'utf-8' })})
await executePgQuery({ client, query: fs.readFileSync(path.resolve('./public/files/postgres/create_v1.sql'), { encoding: 'utf-8'})}) await executePgQuery({ client, query: fs.readFileSync(path.resolve('./public/files/postgres/create_v1.sql'), { encoding: 'utf-8'})})
await stopPgClient(client) await stopPgClient(client)
} else {
await stopPgClient(client)
client = await createPgClientFactory('backend_helper')
await executePgQuery({ client, query: fs.readFileSync(path.resolve('./public/files/postgres/update_status.sql'), { encoding: 'utf-8' })})
await stopPgClient(client)
} }
}) })
\ No newline at end of file
...@@ -182,5 +182,5 @@ class Docker { ...@@ -182,5 +182,5 @@ class Docker {
export function createDockerFactory (username: string) { export function createDockerFactory (username: string) {
const DOCKERHOST = useRuntimeConfig().public.dockerHost const DOCKERHOST = useRuntimeConfig().public.dockerHost
return new Docker(process.env.NODE_ENV === 'development' ? 'localhost': DOCKERHOST, username) return new Docker(process.env.NUXT_ENV === 'development' ? 'localhost': DOCKERHOST, username)
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import lodash from 'lodash' ...@@ -4,6 +4,7 @@ import lodash from 'lodash'
import { Telnet } from 'telnet-client' import { Telnet } from 'telnet-client'
import { getPgTableData } from './postgres' import { getPgTableData } from './postgres'
const config = useRuntimeConfig()
// 在目标服务器上,获取 node 可用的端口 // 在目标服务器上,获取 node 可用的端口
export async function getAvailableNodePort (ip: string, startPort = 30000) { export async function getAvailableNodePort (ip: string, startPort = 30000) {
...@@ -60,6 +61,8 @@ export async function copyAndCreateServerPropertiesV2InDocker (username: string) ...@@ -60,6 +61,8 @@ export async function copyAndCreateServerPropertiesV2InDocker (username: string)
const userDefaultSetting = JSON.parse(userDefaultSettingStr) const userDefaultSetting = JSON.parse(userDefaultSettingStr)
const fn = (f: (obj: Record<string, any>) => string) => f(userConfigs!) || f(userDefaultSetting) const fn = (f: (obj: Record<string, any>) => string) => f(userConfigs!) || f(userDefaultSetting)
// 替换所有 192.168.0.4 地址为参数地址
backendText = backendText.replaceAll('192.168.0.4', config.public.dockerHost)
// postgres config // postgres config
backendText = backendText.replace(/spring.datasource.url=(.*?)\r?\n/, `spring.datasource.url=jdbc:postgresql://${PgHost}:${PgPort}/${username}\n`) backendText = backendText.replace(/spring.datasource.url=(.*?)\r?\n/, `spring.datasource.url=jdbc:postgresql://${PgHost}:${PgPort}/${username}\n`)
...@@ -107,6 +110,9 @@ export async function copyAndCreateGatewayPropertiesV2InDocker (username: string ...@@ -107,6 +110,9 @@ export async function copyAndCreateGatewayPropertiesV2InDocker (username: string
throw new Error('没有创建容器,请先初始化容器') throw new Error('没有创建容器,请先初始化容器')
} }
let gatewayText = fs.readFileSync(path.resolve('./public/files/v2/application-gateway.properties'), { encoding: 'utf-8' }) let gatewayText = fs.readFileSync(path.resolve('./public/files/v2/application-gateway.properties'), { encoding: 'utf-8' })
// 替换容器地址
gatewayText = gatewayText.replaceAll('192.168.0.4', config.public.dockerHost)
// zookeeper config // zookeeper config
gatewayText = gatewayText.replace(/gateway.register-center-server-list=(.*?)\r?\n/, `gateway.register-center-server-list=${HOST}:2181\n`) gatewayText = gatewayText.replace(/gateway.register-center-server-list=(.*?)\r?\n/, `gateway.register-center-server-list=${HOST}:2181\n`)
// rocketmq config // rocketmq config
...@@ -123,6 +129,8 @@ export async function copyAndCreateServerPropertiesV1InDocker (username: string) ...@@ -123,6 +129,8 @@ export async function copyAndCreateServerPropertiesV1InDocker (username: string)
} }
let backendText = fs.readFileSync(path.resolve('./public/files/v1/application.properties'), { encoding: 'utf-8' }) let backendText = fs.readFileSync(path.resolve('./public/files/v1/application.properties'), { encoding: 'utf-8' })
const userConfigs = await getPgTableData('v1', username) const userConfigs = await getPgTableData('v1', username)
// 替换所有 192.168.0.4 地址为参数地址
backendText = backendText.replaceAll('192.168.0.4', config.public.dockerHost)
// postgres config // postgres config
backendText = backendText.replace(/spring.datasource.url=(.*?)\r?\n/, `spring.datasource.url=jdbc:postgresql://${PgHost}:${PgPort}/${username + '_v1'}\n`) backendText = backendText.replace(/spring.datasource.url=(.*?)\r?\n/, `spring.datasource.url=jdbc:postgresql://${PgHost}:${PgPort}/${username + '_v1'}\n`)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment