java部署項目流程幾種常見方式詳解
java部署有幾種方式,這里說一個比較簡單的
方式一:Docker 容器化部署
Docker:將Java應(yīng)用程序及其運行時環(huán)境打包成一個Docker鏡像。Docker容器提供了隔離的運行環(huán)境,確保應(yīng)用程序在不同環(huán)境中具有一致的行為。可以通過Docker Compose或Kubernetes等工具來管理和部署多個容器化應(yīng)用。(后續(xù)會出教程)
方式二:云平臺部署
PaaS (Platform as a Service):如Heroku、Google App Engine、AWS Elastic Beanstalk等云平臺提供了Java應(yīng)用的托管服務(wù)。開發(fā)者只需上傳代碼或WAR/JAR文件,平臺會自動處理應(yīng)用的部署、擴展和管理。
IaaS (Infrastructure as a Service):如AWS EC2、Azure VM、Google Compute Engine等云平臺允許您創(chuàng)建虛擬機并在其上部署Java應(yīng)用。您可以完全控制服務(wù)器的配置和環(huán)境設(shè)置。
Serverless:如AWS Lambda、Google Cloud Functions等無服務(wù)器計算平臺允許您以函數(shù)的形式部署Java代碼,按需執(zhí)行并自動擴展。
這里為了方便使用寶塔進行部署
寶塔面板(BT Panel)是一款基于Web的Linux服務(wù)器管理工具,旨在簡化Linux服務(wù)器的管理和部署過程。它提供了圖形化的用戶界面,寶塔面板支持多種操作系統(tǒng),如CentOS、Ubuntu、Debian等,并且提供了豐富的功能來幫助用戶部署和管理網(wǎng)站、數(shù)據(jù)庫、郵件服務(wù)等。
涉及到具體的部署方式,前端要遵循 Next.is 服務(wù)端渲染的部署模式,基于 Node.is 運行;后端可以直接運行 jar 包。
也可使用docker進行部署,有空了會出過程
部署計劃
前端:通過 Nginx 進行部署,訪問地址為 http://{域名}。由于是 Node 服務(wù),實際運行在 3000 端口。
后端:通過 Nginx 進行轉(zhuǎn)發(fā),訪問地址為 http://{域名}/api 。實際運行在 8101 端口。JDK 建議選擇 17 版本!
為什么要用 Nginx 轉(zhuǎn)發(fā)?
前端和后端域名一致,保證不會出現(xiàn)跨域問題。
Nginx:服務(wù)器 80 端口,默認(rèn)已安裝,
數(shù)據(jù)庫:服務(wù)器 3306 端口,默認(rèn)已安裝。
Redis:服務(wù)器 6379 端口,需要手動安裝
做好規(guī)劃后,我們需要在騰訊云控制臺的防火墻中開通需要外網(wǎng)訪問的服務(wù)端口:
添加自己需要開放的防火墻即可
環(huán)境準(zhǔn)備
mysql,這里使用docker進行安裝
docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ -v /root/mysql/conf:/etc/mysql/conf.d \ -v /root/mysql/data:/var/lib/mysql \ -v /root/mysql/init:/docker-entrypoint-initdb.d \ mysql
里面的賬號密碼可以自行設(shè)置
寶塔也可進行直接安裝mysql,這里不做演示,redis使用寶塔進行演示
redis安裝,搜索直接安裝即可
要部署 Java 項目,必須安裝 JDK。在寶塔面板中,可以通過下圖的方式快速安裝指定版本的 JDK。
建議多安裝幾個版本,比如 JDK8、11、17,需要用哪個版本的時候可以隨時切換。
后端代碼打包
修改 application-prod 生產(chǎn)環(huán)境配置,包括數(shù)據(jù)庫、Redis 等,替換為上述安裝依賴時指定的配置(如用戶名、密碼)
以下僅供參考,總之就是把數(shù)據(jù)庫連接等配置改為線上地址 改之前可以手動進行連接測試
# 線上配置文件 server: port: 8101 spring: # 數(shù)據(jù)庫配置 # todo 需替換配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://你自己的服務(wù)器地址:3306/mianshiniu username: root password: 你自己的數(shù)據(jù)庫密碼 # Redis 配置 # todo 需替換配置 redis: database: 1 host: 你自己的服務(wù)器地址 port: 6379 timeout: 5000 password: 你自己的數(shù)據(jù)庫密碼 # Elasticsearch 配置 # todo 需替換配置 elasticsearch: uris: http://你自己的服務(wù)器地址:9200 # username: root # password: 你自己的es密碼 mybatis-plus: configuration: # 生產(chǎn)環(huán)境關(guān)閉日志 log-impl: '' #mybatis-plus: # configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 接口文檔配置 knife4j: basic: enable: true username: root password: 自己設(shè)置 sa-token: # token 名稱(同時也是 cookie 名稱) token-name: token # token 有效期(單位:秒) 默認(rèn)30天,-1 代表永久有效 timeout: 2592000 # token 最低活躍頻率(單位:秒),如果 token 超過此時間沒有訪問系統(tǒng)就會被凍結(jié),默認(rèn)-1 代表不限制,永不凍結(jié) active-timeout: -1 # 是否允許同一賬號多地同時登錄 (為 true 時允許一起登錄, 為 false 時新登錄擠掉舊登錄) is-concurrent: false # 在多人登錄同一賬號時,是否共用一個 token (為 true 時所有登錄共用一個 token, 為 false 時每次登錄新建一個 token) is-share: true # token 風(fēng)格(默認(rèn)可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) token-style: uuid # 是否輸出操作日志 is-log: true
打包即可
打包成功后會得到一個jar包
上傳jar包到服務(wù)器
上傳完成后,運行jar包即可
啟動成功后即可看到
如果失敗了可查看項目運行日志
但是現(xiàn)在我們無法通過ip地址加接口文檔地址訪問到測試文檔
這是因為我們的服務(wù)器防火墻沒有放開 8101端口。這里我們故意不放開,因為在之前的部署規(guī)劃中,后端需要通過 Nginx 進行轉(zhuǎn)發(fā),從而解決跨域問題。
nginx配置
新建一個php(只是使用Nginx進行代理轉(zhuǎn)發(fā),并不寫代碼)
如果訪問的是后端接口(地址有 /api 前綴),則 Nginx 將請求轉(zhuǎn)發(fā)到后端服務(wù),對應(yīng)配置代碼如下:
location /api { proxy_pass http://127.0.0.1:8101; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_set_header Connection ""; }
添加代理規(guī)則
一定要注釋掉下列配置!**否則訪問接口文檔時,靜態(tài)資源的加載可能會出錯:
服務(wù)器ip地址加/api/doc.html即可訪問到接口文檔
前端
環(huán)境準(zhǔn)備
要選擇穩(wěn)定的版本進行安裝
打包
- 線上的前端需要請求線上的后端接口,所以需要修改 libs/request.ts 文件中的請求地址為線上:
改為線上地址,因為Next.js在構(gòu)建時需要調(diào)用后端接口,所以后端必須啟動才能完成構(gòu)建
- 修改 Nextjs 配置文件 next.config.mjs ,使用 standalone 模式部署,這樣上傳到服務(wù)器的時候可以不用上傳 nodemodules 目錄。
ignoreBuildErrors: true, 忽略構(gòu)建時的語法錯誤
- 執(zhí)行打包命令,注意node.js版本要大于18.18,否則報錯
如果構(gòu)建過程中出現(xiàn)其他錯誤,需要根據(jù)錯誤信息排查并處理。比如下面這個示例,顯然是 TypeScript 類型錯誤:
找到 fileController 文件,加個 // @ts-ignore 就好了:
可能還會遇到其他因為類型的錯誤,這類錯誤不影響運行,但是會在 Next,js 打包時被檢測,可以根據(jù)實際情況修改?;蛘咧苯釉诖虬鼤r忽略 TypeScript錯誤,參考官方文檔:Configuration: TypeScript | Next.js
注意,如果后端接口沒啟動,也可能會導(dǎo)致打包錯誤!
打包成功后,看到下圖信息,能夠很直觀地看到哪些頁面用到了靜態(tài)渲染和服務(wù)端渲染:
然后在 .next 日錄下會生成 standalone 目錄,該目錄就是可以獨立部署的前端包。但是必須按照如下模式組織目錄,一定不能有錯!
- 1.將項目根目錄下的 public 日錄移動到.next/standalone 內(nèi)
- 2.將.next/static日錄移動到.next/standalone/.next內(nèi)
目錄結(jié)構(gòu)如下
3.上傳服務(wù)器,只需要上傳standalone下的文件即可,建議打成壓縮包上傳,解壓即可
4.新建一個node項目
修改配置
可以查看啟動時的項目日志,快速定位問題
5 nginx轉(zhuǎn)發(fā)
當(dāng)用戶訪問除了后端之外的任何地址時,都找到前端的node服務(wù) http://127.0.0.1:3000;,從而訪問到頁面
location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_set_header Connection ""; }
完整的nginx代理如下
訪問即可 ip或域名即可
總結(jié)
到此這篇關(guān)于java部署項目流程幾種常見方式詳解的文章就介紹到這了,更多相關(guān)java部署項目流程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot如何為web層添加統(tǒng)一請求前綴
這篇文章主要介紹了springboot如何為web層添加統(tǒng)一請求前綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Python實現(xiàn)filter函數(shù)實現(xiàn)字符串切分
這篇文章主要介紹了Python實現(xiàn)filter函數(shù)實現(xiàn)字符串切分,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作
這篇文章主要介紹了Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09idea?maven?經(jīng)常主目錄自動變回默認(rèn)的解決方法
很多朋友反映idea?maven?經(jīng)常主目錄自動變回默認(rèn),遇到這樣的問題真的很頭疼,該如何解決呢?下面小編給大家介紹下idea?maven目錄變回默認(rèn)的解決方法,需要的朋友可以參考下2022-08-08