镜像制作
This commit is contained in:
40
schoolNewsWeb/docker/start.sh
Normal file
40
schoolNewsWeb/docker/start.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
echo "========================================"
|
||||
echo "校园新闻管理系统 - 前端服务启动"
|
||||
echo "========================================"
|
||||
|
||||
# 确保日志目录存在
|
||||
mkdir -p /app/logs
|
||||
|
||||
# 处理配置文件
|
||||
CONFIG_TARGET="/usr/share/nginx/html/schoolNewsWeb/app-config.js"
|
||||
|
||||
if [ -f /app/config/app-config.js ]; then
|
||||
echo "[INFO] 检测到外部配置文件,替换默认配置"
|
||||
cp /app/config/app-config.js $CONFIG_TARGET
|
||||
echo "[INFO] ✅ 使用自定义配置: /app/config/app-config.js"
|
||||
|
||||
# 显示配置摘要
|
||||
echo "[INFO] 配置摘要:"
|
||||
grep -E "(env|baseUrl|api)" /app/config/app-config.js | head -5 || true
|
||||
else
|
||||
echo "[INFO] 未检测到外部配置文件"
|
||||
if [ ! -f $CONFIG_TARGET ]; then
|
||||
echo "[WARN] 默认配置不存在,复制模板"
|
||||
cp /app/config/app-config.js.template $CONFIG_TARGET
|
||||
fi
|
||||
echo "[INFO] ✅ 使用默认配置"
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "[INFO] Nginx版本: $(nginx -v 2>&1)"
|
||||
echo "[INFO] 前端路径: /usr/share/nginx/html/schoolNewsWeb"
|
||||
echo "[INFO] 配置文件: $CONFIG_TARGET"
|
||||
echo "[INFO] 日志路径: /app/logs"
|
||||
echo "========================================"
|
||||
echo "[INFO] 启动Nginx..."
|
||||
|
||||
# 启动Nginx
|
||||
exec nginx -g "daemon off;"
|
||||
@@ -6,6 +6,8 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="/schoolNewsWeb/favicon.ico">
|
||||
<title>校园新闻管理系统</title>
|
||||
<!-- 运行时配置文件:必须在main.ts之前加载 -->
|
||||
<script src="/schoolNewsWeb/app-config.js"></script>
|
||||
<style>
|
||||
body{
|
||||
height: 100vh;
|
||||
|
||||
75
schoolNewsWeb/public/app-config.js
Normal file
75
schoolNewsWeb/public/app-config.js
Normal file
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* 应用配置文件 - 可独立替换
|
||||
*
|
||||
* 此文件与 src/config/index.ts 的配置结构完全对应
|
||||
* 可以整个替换此文件来修改配置,无需重新构建镜像
|
||||
*
|
||||
* Docker部署:
|
||||
* 1. 修改此文件
|
||||
* 2. 挂载到容器:-v ./app-config.js:/app/config/app-config.js
|
||||
* 3. 重启容器即可生效
|
||||
*/
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// ============================================
|
||||
// 配置定义
|
||||
// ============================================
|
||||
window.APP_RUNTIME_CONFIG = {
|
||||
// 环境标识
|
||||
env: 'production',
|
||||
|
||||
// API 配置
|
||||
api: {
|
||||
baseUrl: '/schoolNewsServ', // API基础路径
|
||||
timeout: 30000 // 请求超时(毫秒)
|
||||
},
|
||||
|
||||
// 应用基础路径
|
||||
baseUrl: '/schoolNewsWeb/',
|
||||
|
||||
// 文件配置
|
||||
file: {
|
||||
downloadUrl: '/schoolNewsServ/file/download/',
|
||||
uploadUrl: '/schoolNewsServ/file/upload',
|
||||
maxSize: {
|
||||
image: 5, // MB
|
||||
video: 100, // MB
|
||||
document: 10 // MB
|
||||
},
|
||||
acceptTypes: {
|
||||
image: 'image/*',
|
||||
video: 'video/*',
|
||||
document: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
|
||||
}
|
||||
},
|
||||
|
||||
// Token 配置
|
||||
token: {
|
||||
key: 'token',
|
||||
refreshThreshold: 300000 // 5分钟(毫秒)
|
||||
},
|
||||
|
||||
// 公共路径
|
||||
publicImgPath: '/schoolNewsWeb/img',
|
||||
publicWebPath: '/schoolNewsWeb',
|
||||
|
||||
// 功能开关(可自由扩展)
|
||||
features: {
|
||||
enableDebug: false,
|
||||
enableMockData: false
|
||||
// 你可以添加更多功能开关
|
||||
// enableXXX: false
|
||||
}
|
||||
};
|
||||
|
||||
// 配置加载完成标记
|
||||
window.__CONFIG_LOADED__ = true;
|
||||
|
||||
// 控制台输出配置信息(可选)
|
||||
if (console && console.log) {
|
||||
console.log('%c[配置]%c app-config.js 已加载', 'color: green; font-weight: bold', 'color: inherit');
|
||||
console.log('[配置] 环境:', window.APP_RUNTIME_CONFIG.env);
|
||||
console.log('[配置] API地址:', window.APP_RUNTIME_CONFIG.api.baseUrl);
|
||||
}
|
||||
})();
|
||||
@@ -2,41 +2,77 @@
|
||||
* @description 应用配置
|
||||
* @author yslg
|
||||
* @since 2025-10-18
|
||||
*
|
||||
* 配置加载策略:
|
||||
* 1. 开发环境:使用下面定义的开发配置
|
||||
* 2. 生产环境:从 window.APP_RUNTIME_CONFIG 读取(来自 app-config.js)
|
||||
* 3. Docker部署:替换 app-config.js 文件实现配置外挂
|
||||
*
|
||||
* 配置结构说明:
|
||||
* 此文件的配置结构与 app-config.js 完全对应
|
||||
* 修改 app-config.js 后,这里的配置会自动应用
|
||||
*/
|
||||
|
||||
// 开发环境和生产环境的配置
|
||||
// ============================================
|
||||
// 类型定义
|
||||
// ============================================
|
||||
export interface AppRuntimeConfig {
|
||||
env?: string;
|
||||
api: {
|
||||
baseUrl: string;
|
||||
timeout: number;
|
||||
};
|
||||
baseUrl: string;
|
||||
file: {
|
||||
downloadUrl: string;
|
||||
uploadUrl: string;
|
||||
maxSize: {
|
||||
image: number;
|
||||
video: number;
|
||||
document: number;
|
||||
};
|
||||
acceptTypes: {
|
||||
image: string;
|
||||
video: string;
|
||||
document: string;
|
||||
};
|
||||
};
|
||||
token: {
|
||||
key: string;
|
||||
refreshThreshold: number;
|
||||
};
|
||||
publicImgPath: string;
|
||||
publicWebPath: string;
|
||||
features?: {
|
||||
enableDebug?: boolean;
|
||||
enableMockData?: boolean;
|
||||
[key: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
// ============================================
|
||||
// 配置定义(与 app-config.js 结构一致)
|
||||
// ============================================
|
||||
const isDev = import.meta.env.DEV;
|
||||
|
||||
// API 基础路径
|
||||
export const API_BASE_URL = isDev
|
||||
? 'http://127.0.0.1:8081/schoolNewsServ'
|
||||
: '/schoolNewsServ';
|
||||
|
||||
// 文件下载路径
|
||||
export const FILE_DOWNLOAD_URL = `${API_BASE_URL}/file/download/`;
|
||||
|
||||
// 应用配置
|
||||
export const APP_CONFIG = {
|
||||
// 应用标题
|
||||
title: '校园新闻管理系统',
|
||||
// 开发环境配置
|
||||
const devConfig: AppRuntimeConfig = {
|
||||
env: 'development',
|
||||
|
||||
// 基础路径
|
||||
baseUrl: '/schoolNewsWeb/',
|
||||
|
||||
// API 配置
|
||||
api: {
|
||||
baseUrl: API_BASE_URL,
|
||||
baseUrl: 'http://127.0.0.1:8081/schoolNewsServ',
|
||||
timeout: 30000
|
||||
},
|
||||
|
||||
// 文件配置
|
||||
baseUrl: '/schoolNewsWeb/',
|
||||
|
||||
file: {
|
||||
downloadUrl: FILE_DOWNLOAD_URL,
|
||||
uploadUrl: `${API_BASE_URL}/file/upload`,
|
||||
downloadUrl: 'http://127.0.0.1:8081/schoolNewsServ/file/download/',
|
||||
uploadUrl: 'http://127.0.0.1:8081/schoolNewsServ/file/upload',
|
||||
maxSize: {
|
||||
image: 5, // MB
|
||||
video: 100, // MB
|
||||
document: 10 // MB
|
||||
image: 5,
|
||||
video: 100,
|
||||
document: 10
|
||||
},
|
||||
acceptTypes: {
|
||||
image: 'image/*',
|
||||
@@ -45,13 +81,142 @@ export const APP_CONFIG = {
|
||||
}
|
||||
},
|
||||
|
||||
// Token 配置
|
||||
token: {
|
||||
key: 'token',
|
||||
refreshThreshold: 5 * 60 * 1000 // 提前5分钟刷新
|
||||
refreshThreshold: 300000
|
||||
},
|
||||
|
||||
publicImgPath: 'http://localhost:8080/schoolNewsWeb/img',
|
||||
publicWebPath: 'http://localhost:8080/schoolNewsWeb',
|
||||
|
||||
features: {
|
||||
enableDebug: true,
|
||||
enableMockData: false
|
||||
}
|
||||
};
|
||||
export const PUBLIC_IMG_PATH = 'http://localhost:8080/schoolNewsWeb/img';
|
||||
export const PUBLIC_WEB_PATH = 'http://localhost:8080/schoolNewsWeb';
|
||||
export default APP_CONFIG;
|
||||
|
||||
// 生产环境默认配置(兜底)
|
||||
const prodDefaultConfig: AppRuntimeConfig = {
|
||||
env: 'production',
|
||||
|
||||
api: {
|
||||
baseUrl: '/schoolNewsServ',
|
||||
timeout: 30000
|
||||
},
|
||||
|
||||
baseUrl: '/schoolNewsWeb/',
|
||||
|
||||
file: {
|
||||
downloadUrl: '/schoolNewsServ/file/download/',
|
||||
uploadUrl: '/schoolNewsServ/file/upload',
|
||||
maxSize: {
|
||||
image: 5,
|
||||
video: 100,
|
||||
document: 10
|
||||
},
|
||||
acceptTypes: {
|
||||
image: 'image/*',
|
||||
video: 'video/*',
|
||||
document: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
|
||||
}
|
||||
},
|
||||
|
||||
token: {
|
||||
key: 'token',
|
||||
refreshThreshold: 300000
|
||||
},
|
||||
|
||||
publicImgPath: '/schoolNewsWeb/img',
|
||||
publicWebPath: '/schoolNewsWeb',
|
||||
|
||||
features: {
|
||||
enableDebug: false,
|
||||
enableMockData: false
|
||||
}
|
||||
};
|
||||
|
||||
// ============================================
|
||||
// 配置加载
|
||||
// ============================================
|
||||
|
||||
/**
|
||||
* 获取运行时配置
|
||||
* 生产环境优先从 window.APP_RUNTIME_CONFIG 读取(app-config.js 注入)
|
||||
*/
|
||||
const getRuntimeConfig = (): AppRuntimeConfig => {
|
||||
if (isDev) {
|
||||
console.log('[配置] 开发环境,使用内置配置');
|
||||
return devConfig;
|
||||
}
|
||||
|
||||
// 生产环境:尝试读取外部配置
|
||||
try {
|
||||
const runtimeConfig = (window as any).APP_RUNTIME_CONFIG;
|
||||
if (runtimeConfig && typeof runtimeConfig === 'object') {
|
||||
console.log('[配置] 加载外部配置 app-config.js');
|
||||
console.log('[配置] API地址:', runtimeConfig.api?.baseUrl);
|
||||
console.log('[配置] 环境:', runtimeConfig.env || 'production');
|
||||
return runtimeConfig as AppRuntimeConfig;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('[配置] 无法读取外部配置,使用默认配置', e);
|
||||
}
|
||||
|
||||
console.log('[配置] 使用默认生产配置');
|
||||
return prodDefaultConfig;
|
||||
};
|
||||
|
||||
// 当前应用配置
|
||||
const config = getRuntimeConfig();
|
||||
|
||||
// ============================================
|
||||
// 导出配置(向后兼容)
|
||||
// ============================================
|
||||
|
||||
// 单独导出常用配置项
|
||||
export const API_BASE_URL = config.api.baseUrl;
|
||||
export const FILE_DOWNLOAD_URL = config.file.downloadUrl;
|
||||
export const PUBLIC_IMG_PATH = config.publicImgPath;
|
||||
export const PUBLIC_WEB_PATH = config.publicWebPath;
|
||||
|
||||
// 导出完整配置对象
|
||||
export const APP_CONFIG = {
|
||||
// 应用标题
|
||||
title: '校园新闻管理系统',
|
||||
|
||||
// 环境标识
|
||||
env: config.env || 'production',
|
||||
|
||||
// 应用基础路径
|
||||
baseUrl: config.baseUrl,
|
||||
|
||||
// API 配置
|
||||
api: {
|
||||
baseUrl: config.api.baseUrl,
|
||||
timeout: config.api.timeout
|
||||
},
|
||||
|
||||
// 文件配置
|
||||
file: {
|
||||
downloadUrl: config.file.downloadUrl,
|
||||
uploadUrl: config.file.uploadUrl,
|
||||
maxSize: config.file.maxSize,
|
||||
acceptTypes: config.file.acceptTypes
|
||||
},
|
||||
|
||||
// Token 配置
|
||||
token: {
|
||||
key: config.token.key,
|
||||
refreshThreshold: config.token.refreshThreshold
|
||||
},
|
||||
|
||||
// 公共路径
|
||||
publicImgPath: config.publicImgPath,
|
||||
publicWebPath: config.publicWebPath,
|
||||
|
||||
// 功能开关
|
||||
features: config.features || {}
|
||||
};
|
||||
|
||||
// 默认导出
|
||||
export default APP_CONFIG;
|
||||
|
||||
Reference in New Issue
Block a user