蘇州做公司郵箱企業(yè)網(wǎng)站營銷網(wǎng)站做的好的公司
-
背景:上一篇吧nest-vben-admin項目,再開發(fā)環(huán)境上跑通了,并且build出來了dist文件,接下來再部署到linux試試吧
-
dist文件夾是干嘛的??一個
pnpn install
?直接生成了兩個dist文件夾,前端admin項目一個(vue的),后端server項目一個(nestjs的)- 前端容易理解,就是靜態(tài)頁面,放nginx上就行了
- 那么nestjs的dist文件呢?按照java springboot的經(jīng)驗吧打包出來的文件放服務器上啟動就行了,java用jdk啟動,那么nestjs應該是用node啟動吧
-
嘗試:于是生產(chǎn)環(huán)境的linux上,安裝node pnpm等環(huán)境
- dist中有個關鍵的main.js文件,網(wǎng)上說用
node main.js
就可以啟動,但是啟動后報錯 node_modules 缺失。。感情node_modules的依賴不會打包呀,這個和springboot打jar包挺不一樣的
- dist中有個關鍵的main.js文件,網(wǎng)上說用
-
node_modules如何部署??網(wǎng)上查了一些帖子,竟然很多人要把整個項目代碼 git下載到生產(chǎn)環(huán)境,在服務器上安裝依賴包的。。。這個挺出乎意料的。先按照這種方法試試吧,之后再優(yōu)化部署方式(「技術教程」Nestjs 與Prisma打包部署 – Eswlnk Blog)
-
? - 跟幾個人交流后,他們說
-
-
開始部署:把整個項目放到了linux上,然后再install把
node_modules
安裝了下來,這時候因為是生產(chǎn)環(huán)境就不能run dev
了,需要start:prod
- 這時候發(fā)現(xiàn)原來
start:prod
的命令是需要用到dist文件的,這大概就是build的作用吧 - 然后
pnpm build
,報錯:pnpm add turbo -g
?安裝下 - 繼續(xù)build,報錯 找不到
node_modules
?看了下目錄,基本空的,看來沒安裝成功 -
- 重新install,仔細看日志:"resolutions"這個錯誤本地開發(fā)環(huán)境也有,主要是安裝進程被kill的問題:嘗試 chmod -R 775 給目錄賦予下權限,不行;重新安裝配置了下pnpm 好了,install成功!
- 繼續(xù)build,成功了(這里我在整個項目下build,前端打包報錯了,然后前端在開發(fā)環(huán)境下build了下,拿了過來;應該都可以在開發(fā)環(huán)境build好,唯獨是
node_modules
需要在生產(chǎn)環(huán)境安裝)
- 這時候發(fā)現(xiàn)原來
-
啟動調(diào)試:前端就是放nginx上,后端cd到server目錄下,
pnpm start:prod &
- 測試后端啟動成功;測試前端啟動成功,登陸報405
- 發(fā)現(xiàn)找不到啟動日志,準備用nohup記錄一下,但是如何關閉掉nestjs程序呢?按照java的思路,直接kill掉進程就行,于是嘗試kill掉nestjs進程:不行;再試著kill掉node進程:也不行
- 如何關閉node程序?網(wǎng)上找了個
killall node
,可以了 - nohup啟動后,看到啟動日志并沒有變化,說明沒請求到后端,檢查nginx配置,補上后端接口配置
- 繼續(xù)測試登陸,報錯404,這時候請求到后端了,不過請求路徑配錯了,少了/api,改下nginx配置
- 啟動成功了!
- 測試后端啟動成功;測試前端啟動成功,登陸報405
-
nginx配置:
server {listen 5173;charset utf-8;location / {root /home/project/wangc-nest-admin/apps/admin/dist;try_files $uri $uri/ /index.html;index index.html index.htm;}location /api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:5001/api/;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
- 總結:nestjs項目部署流程走通了,以下是可以優(yōu)化的地方
- 源碼應該并不需要全部放生產(chǎn)環(huán)境:首先前端項目直接打包放服務器就行,而后端的
node_modules
是需要在生產(chǎn)環(huán)境安裝的,所以后端的package.json是需要的,dist文件應該也是可以打包好放服務器的。 - 但
node_modules
也比較占資源,并且如果能把代碼和依賴一起打包就好了,這方面之后看看webpack,vercel(ncc)這些的前端構建工具,之后在用docker部署下試試(不同于maven管理構建一套生命周期全管下,前端得npm webpack等一起用)
- 源碼應該并不需要全部放生產(chǎn)環(huán)境:首先前端項目直接打包放服務器就行,而后端的