Allen 3 месяцев назад
Родитель
Сommit
90c90be924

+ 92 - 0
README.md

@@ -0,0 +1,92 @@
+## 部署与上线指南
+
+本文记录 shudao-chat 项目前后端在生产环境的标准交付流程,包括 Vue 前端打包、产物合入 Go 服务、Linux 下编译后端以及上传、运行服务的步骤。
+
+---
+
+### 1. 前端(Vue 3 + Vite)打包
+
+**环境准备**
+- Node.js ≥ 20.19(建议与 `package.json` 中的 engines 保持一致)
+- npm(或 pnpm / yarn,以下以 npm 为例)
+- 在国内网络可替换源:`npm config set registry https://registry.npmmirror.com`
+
+**打包流程**
+```bash
+cd /path/to/shudao-chat(前端根目录)
+npm install
+npm run build
+```
+
+执行完成后会在根目录生成 `dist/`,结构类似:
+```
+dist/
+  index.html
+  assets/
+    *.js
+    *.css
+    ...
+```
+
+### 2. 将前端产物放入 `shudao-chat-go`
+
+1. 备份旧版本(可选):
+   ```bash
+   cd shudao-chat-go
+   mv views/index.html views/index_$(date +%Y%m%d%H%M%S).html
+   mv assets assets_$(date +%Y%m%d%H%M%S)
+   ```
+2. 拷贝新的 `dist` 产物:
+   ```bash
+   # 回到前端根目录
+   cp dist/index.html shudao-chat-go/views/
+   rsync -av --delete dist/assets/ shudao-chat-go/assets/
+   ```
+   - `views/index.html` 会被 `controllers/frontend.go` 用作模版。
+   - `assets/` 目录被 `main.go` 中的 `beego.SetStaticPath("/assets", "assets")` 映射,前端静态资源必须放在这里。
+3. 若有 `dist` 中的其他静态目录(如 `public` 下复制出的 favicon 等),放入 `shudao-chat-go/static/`,Beego 已映射 `/static` 路径。
+
+### 3. 在本地编译 Linux 版后端
+
+**环境要求**
+- Go 1.24+(与 `go.mod` 中声明一致)
+- 已配置好 GOPROXY(如国内:`https://goproxy.cn,direct`)
+
+**编译命令**
+```bash
+cd shudao-chat-go
+go mod download
+GOOS=linux GOARCH=amd64 go build -o bin/shudao-chat-go ./main.go
+
+或者安装bee框架:(go env -w GOPROXY=https://goproxy.cn)//如果下面命令安装不成功先执行这条命令
+go install github.com/beego/bee/v2@latest
+然后运行:bee pack -be GOOS=linux
+```
+
+输出文件:`shudao-chat-go/bin/shudao-chat-go`,为可在 Linux x86_64 上运行的二进制。请同时准备以下运行所需文件/目录:
+- `conf/app.conf`(按环境修改数据库、API、OSS 等配置)
+- `assets/`、`static/`、`views/`(包含打包后的前端)
+- 其他运行依赖(如 `scripts/`、`models/` 中需要的资源)
+
+### 4. 打包并上传到服务器
+
+**上传方式(示例)**
+```bash
+压缩包拖入/tmp/tmp
+```
+
+### 5. 服务器部署与运行
+
+cd /tmp
+cd tmp
+tar xvf shudao-chat-go.tar.gz
+chmod +x shudao-chat-go
+找到进程:ps -ef | grep shudao-chat-go
+杀死进程:kill -9 1029395   # 将 12345 替换为你找到的实际PID
+nohup ./shudao-chat-go &
+tail -f nohup.out #查看实时状态
+
+
+---
+
+

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/FileSaver.min-BXTVh8xq.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
dist/assets/index-CEyr_2JT.js


+ 1 - 1
dist/assets/jszip.min-D5L-YwUr.js → dist/assets/jszip.min-B8mxB0JC.js

@@ -1 +1 @@
-import{r as a,g as p}from"./index-Da_yc_YZ.js";function f(t,n){for(var o=0;o<n.length;o++){const e=n[o];if(typeof e!="string"&&!Array.isArray(e)){for(const r in e)if(r!=="default"&&!(r in t)){const i=Object.getOwnPropertyDescriptor(e,r);i&&Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:()=>e[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var s=a();const c=p(s),g=f({__proto__:null,default:c},[s]);export{c as J,g as j};
+import{r as a,g as p}from"./index-CEyr_2JT.js";function f(t,n){for(var o=0;o<n.length;o++){const e=n[o];if(typeof e!="string"&&!Array.isArray(e)){for(const r in e)if(r!=="default"&&!(r in t)){const i=Object.getOwnPropertyDescriptor(e,r);i&&Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:()=>e[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var s=a();const c=p(s),g=f({__proto__:null,default:c},[s]);export{c as J,g as j};

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
dist/assets/pptxgen.es-vaMfdmAr.js


+ 1 - 1
dist/index.html

@@ -6,7 +6,7 @@
     <link rel="icon" href="/favicon.ico" sizes="any">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
     <title>蜀道安全管理AI智能助手</title>
-    <script type="module" crossorigin src="/assets/index-Da_yc_YZ.js"></script>
+    <script type="module" crossorigin src="/assets/index-CEyr_2JT.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-do3o3H5j.css">
   </head>
   <body>

+ 1 - 1
shudao-chat-go/conf/app.conf

@@ -13,7 +13,7 @@ runmode = dev
 # shudao-chat-go配置
 mysqluser = "root"
 mysqlpass = "88888888"
-mysqlurls = "172.16.29.101"
+mysqlurls = "172.16.35.57"
 mysqlhttpport = "21000"
 mysqldb = "shudao"
 

+ 2 - 2
src/utils/auth.js

@@ -25,7 +25,7 @@ export function getRefreshToken() {
  * 获取令牌类型
  */
 export function getTokenType() {
-  return localStorage.getItem(TOKEN_TYPE_KEY) || 'bearer'
+  return localStorage.getItem(TOKEN_TYPE_KEY) || 'Bearer'
 }
 
 /**
@@ -38,7 +38,7 @@ export function getUsername() {
 /**
  * 设置令牌
  */
-export function setToken(refreshToken, tokenType = 'bearer') {
+export function setToken(refreshToken, tokenType = 'Bearer') {
   localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken)
   localStorage.setItem(TOKEN_TYPE_KEY, tokenType)
 }

Некоторые файлы не были показаны из-за большого количества измененных файлов