想要將自己的畢設放在自己買的伺服器上,該專案前端由vite+ts支援,後端使用python flask,資料庫是MySQL8.0;
部署分成以下步驟,前端UI部分,後端資料庫部分,伺服器命令除錯部分
目前專案已經完成部署,來我的網站看看吧:https://www.8765430.xyz/
前端UI部分
修改tsconfig.json 在build的時候不會報各種error,包括但不限於anyType、alias別名有可能在vite.config.ts或者tsconfig.json中都要配置,以下提供一份簡略的配置:
tsconfig.json
點選檢視程式碼
{
"compilerOptions": {
"noUncheckedIndexedAccess": false,
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"allowJs": true,
"noImplicitAny": false,
"moduleResolution": "Node",
"strict": false,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"lib": [
"ESNext",
"DOM"
],
"skipLibCheck": true,
"noEmit": true,
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
]
}
},
"include": [
"src/**/*.ts",
"src/**/*.d.ts",
"*.vue",
"*.ts",
"src/**/*.vue",
],
"exclude": [
"node_modules"
],
"references": [
{
"path": "./tsconfig.node.json"
}
]
}
vite.config.ts
點選檢視程式碼
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import VueSetupExtend from 'vite-plugin-vue-setup-extend'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import path from 'path'
export default defineConfig({
base: './',
resolve: {
alias: {
'@': path.resolve(__dirname,'./src'),
},
},
plugins: [
vue(),
VueSetupExtend(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
],
optimizeDeps: {
include: ['schart.js'],
},
})
額外的,在vite.config.ts 開啟了 gzip 壓縮(最佳化開啟時間達到毫秒級)
npm i vite-plugin-compression --save-dev
import { defineConfig } from 'vite';
import compression from 'vite-plugin-compression';
export default defineConfig({
plugins: [
compression({
verbose: true,
disable: false,
threshold: 10240, // 壓縮閾值,小於這個值的檔案將不會被壓縮(單位為位元組)這裡就是大於 10kb 菜壓縮
algorithm: 'gzip', // 壓縮演算法
ext: '.gz', // 壓縮檔案字尾名
}),
],
});
在執行 npm run build
後可以發現資料夾下多出了一個dist資料夾,裡面就是vite幫我們打包出來的
解決圖片無法顯示問題
- 換成變數載入
imageList: [
'view1.jpg',
'view2.jpg',
'view3.jpg',
],
getImageUrl(imageName) {
return require(`@/assets/img/${imageName}`);
},
- 提前require載入|
const imageList = [
require('@/assets/img/view1.jpg'),
require('@/assets/img/view2.jpg'),
require('@/assets/img/view3.jpg'),
];
- 靜態載入
'/assets/img/view1.jpg',
'/assets/img/view2.jpg',
'/assets/img/view3.jpg',
後端資料庫部分
事前準備:
- 資料庫首先匯出sql可執行語句檔案,方便我們在雲端資料庫執行
- 執行
pip freeze > requirements.txt
生成 requirements.txt方便docker打包容器
這裡踩了個雷,在開始專案的時候沒有用venv去隔離環境,導致最後生成的全域性pip依賴,最後為了優雅,重新隔離開安裝了一次
- 編寫Dockerfile (最後還沒部署docker,因Windows10版本問題) 暫時用nohup去代替
- 最後遇到ttf字型確實用下面這個方法解決
https://blog.csdn.net/weixin_39929377/article/details/110547982 - 最後成功部署,但部署後仍有問題,時間也已經不早啦,該下班咯~