This commit is contained in:
xion 2025-02-25 10:01:12 +08:00
parent b3c2587903
commit 6a4ff85683
9 changed files with 64 additions and 45 deletions

View File

@ -1,10 +1,12 @@
{
port: 3005,
api: {
host: 'localhost:4002', // 后台代理
path: '/api/router',
},
allowedOrigins: ['localhost', 'xiongxiao.me', 'zxj.im'],
domain: 'kevisual.xiongxiao.me',
resources: 'minio.xiongxiao.me/resources',
proxy: {
port: 3005,
domain: 'kevisual.xiongxiao.me',
resources: 'minio.xiongxiao.me/resources',
allowedOrigins: ['localhost', 'xiongxiao.me', 'zxj.im', 'silkyai.cn'],
},
}

View File

@ -7,7 +7,7 @@
"app": {
"key": "page-proxy",
"entry": "dist/app.mjs",
"type": "micro-app",
"type": "pm2-system-app",
"files": [
"dist"
]
@ -18,12 +18,14 @@
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon --ignore upload --exec tsx src/index.ts",
"build": "rimraf dist && rollup -c",
"deploy": "rsync -avz dist/ light:~/apps/var-proxy/backend",
"deploy:light": "rsync -avz dist/ light:~/apps/var-proxy/backend",
"reload": "ssh light pm2 restart proxy",
"pub": "npm run build && npm run deploy && npm run reload",
"pub:light": "npm run build && npm run deploy && npm run reload",
"demo": "rsync -avz dist/ on:~/docker/page-proxy/dist",
"start": "pm2 start dist/app.mjs --name page-proxy",
"release": "node ./scripts/release/index.mjs"
"release": "node ./scripts/release/index.mjs",
"deploy": "envision switch root && envision pack -p -u",
"pub": "npm run build && npm run deploy"
},
"keywords": [],
"author": "",

View File

@ -1,8 +1,8 @@
import { handleRequest } from './module/index.ts';
import { useConfig } from '@kevisual/use-config';
import { config } from './module/config.ts';
import { app } from './app.ts';
import './route/route.ts'
const { port } = useConfig<{ port: number }>();
import './route/route.ts';
const port = config?.proxy?.port || 3005;
app
.route({

33
src/module/config.ts Normal file
View File

@ -0,0 +1,33 @@
import { useConfig } from '@kevisual/use-config';
import { useFileStore } from '@kevisual/use-config/file-store';
export const fileStore = useFileStore('proxy-upload');
type ConfigType = {
api: {
/**
* API host address
*/
host: string;
path?: string;
port?: number;
};
proxy: {
port?: number;
/**
* self domain kevisual.xiongxiao.me
*/
domain: string;
/**
* resources path
* https://minio.xiongxiao.me/resources
*/
resources: string;
/**
* allow origin xiongxiao.me zxj.im silkyai.cn
* 访
*/
allowOrigin: string[];
};
};
export const config = useConfig<ConfigType>();

View File

@ -1,7 +1,6 @@
import path from 'path';
import { redis, subscriber } from './redis/redis.ts';
import { useFileStore } from '@kevisual/use-config/file-store';
import { useConfig } from '@kevisual/use-config';
import { config, fileStore } from '../module/config.ts';
import fs from 'fs';
import crypto from 'crypto';
import { nanoid } from 'nanoid';
@ -10,8 +9,7 @@ import { promisify } from 'util';
import { fetchApp, fetchDomain, fetchTest } from './query/get-router.ts';
const pipelineAsync = promisify(pipeline);
const { resources, api } = useConfig<{ resources: string; api: { host: string; path: string } }>();
const fileStore = useFileStore('upload');
const { resources } = config?.proxy || { resources: 'https://minio.xiongxiao.me/resources' };
const status: { [key: string]: boolean } = {};
const demoData = {
user: 'root',
@ -255,10 +253,7 @@ export const downloadUserAppFiles = async (user: string, app: string, data: type
};
}
if (data.type === 'oss') {
let serverPath = 'https://' + resources + '/';
if(resources.includes('localhost')) {
serverPath = 'http://' + resources + '/';
}
let serverPath = new URL(resources).href + '/';
// server download file
for (let i = 0; i < files.length; i++) {
const file = files[i];

View File

@ -1,22 +1,17 @@
import { getDNS, isLocalhost } from '@/utils/dns.ts';
import http from 'http';
import { UserApp } from './get-user-app.ts';
import { useFileStore } from '@kevisual/use-config/file-store';
import { config, fileStore } from '../module/config.ts';
import path from 'path';
import fs from 'fs';
import { useConfig } from '@kevisual/use-config';
import { getContentType } from './get-content-type.ts';
import { sleep } from '@/utils/sleep.ts';
const { api, domain, allowedOrigins } = useConfig<{
api: {
host: string;
port?: number;
};
domain: string;
allowedOrigins: string[];
}>();
const fileStore = useFileStore('upload');
const api = config?.api || { host: 'kevisual.xiongxiao.me', path: '/api/router' };
const domain = config?.proxy?.domain || 'kevisual.xiongxiao.me';
const allowedOrigins = config?.proxy?.allowOrigin || [];
const noProxyUrl = ['/', '/favicon.ico'];
export const handleRequest = async (req: http.IncomingMessage, res: http.ServerResponse) => {
if (req.url === '/favicon.ico') {
@ -34,7 +29,7 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR
let header: any = {};
if (req.headers?.['Authorization']) {
header.authorization = req.headers['Authorization'];
} else if(req.headers?.['authorization']) {
} else if (req.headers?.['authorization']) {
header.authorization = req.headers['authorization'];
}
if (req.headers?.['Content-Type']) {

View File

@ -1,11 +1,6 @@
import { useConfig } from '@kevisual/use-config';
const { resources, api } = useConfig<{
resources: string;
api: { host: string; path: string };
ƒ;
}>();
import { config } from '../config.ts';
const api = config?.api || { host: 'kevisual.xiongxiao.me', path: '/api/router' };
const apiPath = api.path || '/api/router';
export const fetchTest = async (id: string) => {
const fetchUrl = 'http://' + api.host + apiPath;

View File

@ -2,8 +2,7 @@ import { UserApp } from '@/module/get-user-app.ts';
import { app } from '../../app.ts';
import { redis } from '@/module/redis/redis.ts';
import fs from 'fs';
import { useFileStore } from '@kevisual/use-config/file-store';
const fileStore = useFileStore('upload');
import { fileStore } from '../../module/config.ts';
app
.route({

View File

@ -1,8 +1,7 @@
import { UserApp, clearAllUserApp } from '../module/get-user-app.ts';
import { redis } from '../module/redis/redis.ts';
import path from 'path';
import { useFileStore } from '@kevisual/use-config/file-store';
const filePath = useFileStore('upload');
import { config, fileStore } from '../module/config.ts';
const main = async () => {
const userApp = new UserApp({ user: 'root', app: 'codeflow' });
@ -33,7 +32,6 @@ const clearData = async () => {
// clearData();
// clearAllUserApp();
const expireData = async () => {
await redis.set('user:app:exist:' + 'codeflow:root', 'value', 'EX', 2);
process.exit(0);
@ -45,5 +43,5 @@ const keysData = async () => {
const keys = await redis.keys('user:app:exist:*');
console.log('keys', keys);
process.exit(0);
}
};
keysData();