網(wǎng)站icp備案電商培訓(xùn)心得體會(huì)
待部署的項(xiàng)目包括:前端front,服務(wù)提供者backend,服務(wù)消費(fèi)者gateway,注冊(cè)中心nacos
服務(wù)器信息:騰訊云入門級(jí)服務(wù)器2核2G(后續(xù)有對(duì)服務(wù)器進(jìn)行升級(jí))
部署工具:前端使用寶塔部署,消費(fèi)者和服務(wù)者使用打包jar的方式部署,其他后端項(xiàng)目使用docker部署
基于rpc框架項(xiàng)目的部署相對(duì)于只有一個(gè)后端程序的項(xiàng)目部署會(huì)要復(fù)雜很多,博主在這里踩了很多坑,耗費(fèi)了很多時(shí)間,本篇博客記錄下一些大大小小的坑,希望對(duì)讀者有所幫助~
nacos部署
- 在部署nacos之前需要先部署java jdk 和 maven環(huán)境
- 先把服務(wù)器上自帶的javaopenjdk全部刪除
- 按照本地環(huán)境的jdk版本下載linux的jdk,并且配置好java的環(huán)境變量
- 直接把linux版本的nacos解壓到服務(wù)器上即可,注意版本要和項(xiàng)目中的版本一致
- sh startup.sh -m standalone 單機(jī)運(yùn)行nacos,此時(shí)只會(huì)顯示正在starting,但是不會(huì)本地一樣打印出詳細(xì)的啟動(dòng)信息,具體的啟動(dòng)信息在nacos/logs/start.out里面
- 如果報(bào)內(nèi)存不夠無(wú)法啟動(dòng)的錯(cuò)誤,可以調(diào)整startup.sh里面的jvm內(nèi)存,具體看自己的服務(wù)器調(diào)小一點(diǎn):JAVA_OPT=“${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m”
- 如果是報(bào)其他錯(cuò)誤,可以指定一下startup.sh里面的 JAVA_HOME為剛剛裝的jdk(因?yàn)閷毸谔砑诱军c(diǎn)的時(shí)候會(huì)要求再裝一個(gè)Tomcat和jdk)
- 如果日志里面顯示正常啟動(dòng),但是無(wú)法在自己的電腦上訪問(wèn)nacos主頁(yè),需要檢查一下application.yml里面配置的address: nacos://ip:8848是不是外網(wǎng)的ip,然后按照外網(wǎng)ip訪問(wèn)主頁(yè):http://外網(wǎng)ip:8848/nacos/。如果是順利啟動(dòng)會(huì)很快訪問(wèn)到主頁(yè),如果一直在nacos頁(yè)面上轉(zhuǎn)圈加載說(shuō)明肯定啟動(dòng)有問(wèn)題,檢查日志中是不是有錯(cuò)誤
- 如果顯示無(wú)法訪問(wèn),檢查防火墻是不是開放了端口,注意有兩層防火墻,一個(gè)是直接在騰訊云設(shè)置的防火墻規(guī)則,一個(gè)是服務(wù)器自己的防火墻服務(wù)。端口要開齊,9848 9849,8848等
提供者部署(backend)
- 注意把a(bǔ)pplication.yml中的數(shù)據(jù)庫(kù)信息和nacos地址修改為服務(wù)器的外網(wǎng)信息
- 把client-sdk項(xiàng)目中的網(wǎng)關(guān)地址改外外網(wǎng)地址,重新打包c(diǎn)lient-sdk和backend
- 把打包好的backend jar包傳到服務(wù)器上直接java -jar運(yùn)行 (先確保nacos能正確啟動(dòng)再運(yùn)行backend項(xiàng)目)
- 如果有問(wèn)題的話注意觀察日志
消費(fèi)者部署(gateway)
-
修改gateway中的白名單以及interface_host,打包成jar之后傳到服務(wù)器
-
先啟動(dòng)naocs,再啟動(dòng)backend,確保正確之后啟動(dòng)gateway
-
此時(shí)發(fā)現(xiàn)gateway一直啟動(dòng)錯(cuò)誤,日志顯示客戶端無(wú)法連接,dubbo實(shí)例創(chuàng)建失敗(在這一步上花了很多時(shí)間!)
-
啟動(dòng)gateway失敗之后,我嘗試關(guān)閉nacos,先ps -ef | grep nacos查看nacos的運(yùn)行狀態(tài),此時(shí)顯示有一條nacos項(xiàng)目,我便判斷nacos是正常運(yùn)行的,然后使用sh shutdown.sh關(guān)閉nacos,但是卻顯示目前沒(méi)有正在運(yùn)行的nacos
-
此時(shí)我恍然大悟,重新開啟nacos,再啟動(dòng)backend,檢查到此時(shí)是可以運(yùn)行sh shutdown.sh成功,說(shuō)明backend啟動(dòng)之后nacos正常,隨后啟動(dòng)gateway,發(fā)現(xiàn)此時(shí)使用sh shutdown.sh已經(jīng)會(huì)提示沒(méi)有運(yùn)行的nacos了,說(shuō)明在啟動(dòng)gateway的過(guò)程中,nacos掛掉了。
-
回到寶塔面板主頁(yè),顯示內(nèi)存已經(jīng)爆紅了。我再一次嘗試調(diào)整startup.sh里面的jvm內(nèi)存,不過(guò)調(diào)小了之后連backend都啟動(dòng)不了,顯然問(wèn)題出在了硬件上
-
我實(shí)在是太貧窮了,貪小便宜買了2G的服務(wù)器,加了200塊錢升到了4G,里面就啟動(dòng)成功了
-
果然,錢能解決大部分問(wèn)題!
前端部署
- 安裝工作:
- 在服務(wù)器上安裝寶塔
- 在寶塔上安裝Tomcat(為了裝java),Nginx, Mysql,docker
- 安裝完畢之后停止tomcat,在服務(wù)器防火墻中放行8888(寶塔),8080(后端項(xiàng)目),和 3306(數(shù)據(jù)庫(kù))
- 寶塔部署前端:添加網(wǎng)站,PHP項(xiàng)目添加站點(diǎn),在根目錄下上傳前端npm build 后dist目錄中的所有內(nèi)容
- docker部署除了消費(fèi)者和提供者之外的其他后端項(xiàng)目:本地maven package生成jar包,將項(xiàng)目傳到服務(wù)器上,根據(jù)Dockerfile build后端鏡像,并啟動(dòng)該鏡像
- 數(shù)據(jù)庫(kù)準(zhǔn)備:創(chuàng)建一個(gè)mysql超級(jí)用戶(允許遠(yuǎn)程訪問(wèn),并賦予所有權(quán)限),創(chuàng)建數(shù)據(jù)庫(kù)和用戶表
- 域名配置:由于域名注冊(cè)和備案需要一段時(shí)間,暫時(shí)用ip訪問(wèn)
- 跨域配置:在站點(diǎn)配置文件中設(shè)置允許跨域
DockerFile
# Docker 鏡像構(gòu)建
FROM maven:3.5-jdk-8-alpine as builder
# Copy local code to the container image. # test
WORKDIR /app
COPY pom.xml .
COPY src ./src# Build a release artifact.
RUN mvn package -DskipTests# Run the web service on container startup.
CMD ["java","-jar","/app/target/user-center-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
docker相關(guān)命令:
# 創(chuàng)建鏡像
docker build -t user-center-frontend:v0.0.1 .
# 顯示已經(jīng)安裝的鏡像
docker images
# 前端啟動(dòng)鏡像
docker run -p 80:80 -d user-center-frontend:v0.0.1
# 后端啟動(dòng)鏡像
docker run -p 8080:8080 user-center-backend:v0.0.1