国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署

這篇具有很好參考價(jià)值的文章主要介紹了微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署

1 什么是DevOps

一個(gè)軟件的生命周期包括:需求分析階、設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、上線、維護(hù)、升級(jí)、廢棄。

通過(guò)示例說(shuō)明如下:

1、產(chǎn)品人員進(jìn)行需求分析

2、設(shè)計(jì)人員進(jìn)行軟件架構(gòu)設(shè)計(jì)和模塊設(shè)計(jì)。

3、每個(gè)模塊的開(kāi)發(fā)人員并行開(kāi)發(fā),設(shè)計(jì)接口、進(jìn)行編碼,并進(jìn)行單元測(cè)試

4、開(kāi)發(fā)完畢,將代碼集成部署到測(cè)試服務(wù)器,測(cè)試人員進(jìn)行測(cè)試。

5、測(cè)試人員發(fā)現(xiàn)bug,提交bug、開(kāi)發(fā)人員修改bug

6、bug修改完畢再次集成、測(cè)試。

7、測(cè)試完畢,項(xiàng)目上線。

8、運(yùn)維人員進(jìn)行安裝部署、培訓(xùn)。

9、用戶提出問(wèn)題,返回給運(yùn)維人員。

10、運(yùn)維人員反饋給開(kāi)發(fā)人員,開(kāi)發(fā)人員進(jìn)行問(wèn)題處理。

11、再次提交測(cè)試。

12、測(cè)試完畢再次部署升級(jí)。

最后軟件下線。

所以,在整體生命周期中比較核心的兩個(gè)階段是:開(kāi)發(fā)階段、維護(hù)階段,開(kāi)發(fā)階段的成果是軟件開(kāi)發(fā)完成并成功上線,運(yùn)維階段則負(fù)責(zé)對(duì)軟件進(jìn)行維護(hù)和升級(jí),而運(yùn)維階段通常在一個(gè)軟件
的生命周期中占比最多。

提高開(kāi)發(fā)階段、運(yùn)維階段的工作效率是企業(yè)在進(jìn)行軟件項(xiàng)目管理的重點(diǎn)。

因此,專家提出了DevOps,DevOps是什么呢?

下邊是摘自百度百科的定義:

DevOps(Development和Operations的組合詞)是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)開(kāi)發(fā)(應(yīng)用程序/軟件工程)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障(QA)部門之間的溝通、協(xié)作與整合。

它是一種重視"軟件開(kāi)發(fā)人員(Dev)"和"IT運(yùn)維技術(shù)人員(Ops)"之間溝通合作的文化、運(yùn)動(dòng)或慣例。透過(guò)自動(dòng)化"軟件交付"和"架構(gòu)變更"的流程,來(lái)使得構(gòu)建、測(cè)試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。

它的出現(xiàn)是由于軟件行業(yè)日益清晰地認(rèn)識(shí)到:為了按時(shí)交付軟件產(chǎn)品和服務(wù),開(kāi)發(fā)和運(yùn)維工作必須緊密合作。

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

DevOps是一個(gè)工具嗎?

DevOps是一個(gè)工作職位嗎?

都不是。

DevOps是一種思想理念,它涵蓋開(kāi)發(fā)、測(cè)試、運(yùn)維的整個(gè)過(guò)程。DevOps追求的目標(biāo)是提高軟件開(kāi)發(fā)、測(cè)試、運(yùn)維、運(yùn)營(yíng)等各部門的溝通與協(xié)作質(zhì)量,DevOps強(qiáng)調(diào)軟件開(kāi)發(fā)人員與軟件測(cè)試、軟件運(yùn)維、質(zhì)量保障(QA)部門之間有效的溝通與協(xié)作,強(qiáng)調(diào)通過(guò)自動(dòng)化的方法去管理軟件變更、軟件集成,使軟件從構(gòu)建到測(cè)試、發(fā)布更加快捷、可靠,最終按時(shí)交付軟件。

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

2 什么是CI/CD

如何來(lái)落地實(shí)現(xiàn)DevOps呢?

DevOps興起于2009年,近年來(lái)由于云計(jì)算、互聯(lián)網(wǎng)的發(fā)展,促進(jìn)了DevOps的基礎(chǔ)設(shè)施及工具鏈的發(fā)展,涌現(xiàn)了一大批優(yōu)秀的工具,這些工具包括開(kāi)發(fā)、測(cè)試、運(yùn)維的各各領(lǐng)域,例如:GitHub、Docker、Jenkins、Hudson、K8S、Ant/Maven/Gradle、Selenium、QUnit、JMeter等。下圖是DevOps相關(guān)的工具集:

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

好的工具有利于DevOps的實(shí)施,但并不代表實(shí)施DevOps就一定需要去引入一堆工具。

問(wèn)題的關(guān)鍵:如何解決問(wèn)題,而不是具體應(yīng)用工具。

CI/CD 是近年來(lái)企業(yè)有效實(shí)施DevOps的具體方案。

CI/CD 包含了一個(gè) CI 和兩個(gè) CD,CI全稱 Continuous
Integration,表示持續(xù)集成,CD包含 Continuous Delivery和 Continuous
Deployment,分別是持續(xù)交付和持續(xù)部署,三者具有前后依賴關(guān)系。

CI 持續(xù)集成:

持續(xù)集成倡導(dǎo)團(tuán)隊(duì)成員需要頻繁的集成他們的工作,將開(kāi)發(fā)分支合并到主分支,每次集成都通過(guò)自動(dòng)化構(gòu)建(包括編譯、構(gòu)建、自動(dòng)化測(cè)試)來(lái)驗(yàn)證,從而盡快地發(fā)現(xiàn)集成中的錯(cuò)誤,讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量。

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

CD持續(xù)交付:

持續(xù)交付將集成后的代碼部署到類生產(chǎn)環(huán)境(預(yù)發(fā)布),除了交付到類生產(chǎn)環(huán)境之外,還會(huì)執(zhí)行一些集成測(cè)試、API測(cè)試。持續(xù)交付強(qiáng)調(diào)的是"交付",交付給測(cè)試、產(chǎn)品驗(yàn)收,不管怎么更新,軟件是隨時(shí)隨地可以交付的。

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

CD持續(xù)部署:

在持續(xù)交付的基礎(chǔ)上由開(kāi)發(fā)人員或運(yùn)維人員自助式的定期向生產(chǎn)環(huán)境部署穩(wěn)定的構(gòu)建版本,持續(xù)部署的目標(biāo)是代碼在任何時(shí)刻都是可部署的,并可自動(dòng)進(jìn)入到生產(chǎn)環(huán)境。

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

3 DevOps實(shí)戰(zhàn)

3.1 技術(shù)方案

下圖是比較流行的一種CI/CD的技術(shù)方案:

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

下邊我們參考該技術(shù)方案將學(xué)成在線項(xiàng)目使用Docker進(jìn)行部署。

本次項(xiàng)目部署實(shí)戰(zhàn)旨在理解CI/CD的流程,考慮Kubernates的復(fù)雜性課堂上我們用Jenkins代替Kubernates完成容器部署。

3.2 準(zhǔn)備環(huán)境

準(zhǔn)備一臺(tái)Centos7
虛擬機(jī),安裝Docker、jdk、maven,通過(guò)Docker容器安裝jenkins、Docker私服軟件,其它軟件為學(xué)成在線項(xiàng)目所需要的,如下:

Mysql 8.x docker
nacos 1.4.1 docker
rabbitmq 3.8.34 docker
redis 6.2.7 docker
xxl-job-admin 2.3.1 docker
minio RELEASE.2022-09-07 docker
elasticsearch 7.12.1 docker
kibana 7.12.1 docker
gogs 0.13.0 docker
nginx 1.12.2 docker

在課堂資料中提供了安裝以上軟件的虛擬機(jī),使用VMware導(dǎo)入即可使用。

3.3 人工部署方式

如果不使用CI/CD則需要人工手動(dòng)對(duì)工程進(jìn)行測(cè)試、打包、部署。使用CI/CD后通過(guò)自動(dòng)化的工具去完成。

下邊先演示手動(dòng)部署方式,之后采用工具進(jìn)行部署。

3.3.1 項(xiàng)目打包

1、在父工程聚合各模塊

首先在父工程添加models,聚合各各模塊

<modules>
    <module>../xuecheng-plus-base</module>
    <module>../xuecheng-plus-checkcode</module>
    <module>../xuecheng-plus-gateway</module>
    <module>../xuecheng-plus-auth</module>
    <module>../xuecheng-plus-content</module>
    <module>../xuecheng-plus-learning</module>
    <module>../xuecheng-plus-media</module>
    <module>../xuecheng-plus-orders</module>
    <module>../xuecheng-plus-message-sdk</module>
    <module>../xuecheng-plus-search</module>
    <module>../xuecheng-plus-system</module>
</modules>

2、配置打包插件

使用springboot打包插件進(jìn)行打包,在需要打可執(zhí)行包的工程中配置spring-boot-maven-plugin插件否則報(bào)
“jar中沒(méi)有主清單屬性” 。

注意:在要打可執(zhí)行jar包的工程中配置該插件。

<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
                 

說(shuō)明:

配置了springboot打包插件即可在maven窗口顯示如下:

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

功能說(shuō)明:

build-info:生成項(xiàng)目的構(gòu)建信息文件 build-info.properties

repackage:這個(gè)是默認(rèn) goal,在 mvn package
執(zhí)行之后,這個(gè)命令再次打包生成可執(zhí)行的 jar,同時(shí)將 mvn package 生成的
jar 重命名為 *.origin

run:這個(gè)可以用來(lái)運(yùn)行 Spring Boot 應(yīng)用

start:這個(gè)在 mvn integration-test 階段,進(jìn)行 Spring Boot
應(yīng)用生命周期的管理

stop:這個(gè)在 mvn integration-test 階段,進(jìn)行 Spring Boot
應(yīng)用生命周期的管理

在父工程執(zhí)行:clean install -DskipTests -f pom.xml 對(duì)所有工程進(jìn)行打包

打包完成可在本地通過(guò)java -jar 運(yùn)行jar包觀察是否可以正常運(yùn)行。

下邊測(cè)試驗(yàn)證碼服務(wù):

進(jìn)入驗(yàn)證碼服務(wù)的target目錄,cmd運(yùn)行:

java -Dfile.encoding=utf-8 -jar
xuecheng-plus-checkcode-0.0.1-SNAPSHOT.jar

如下圖:

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

使用httpclient測(cè)試申請(qǐng)驗(yàn)證碼:

### 申請(qǐng)驗(yàn)證碼
POST localhost:63075/checkcode/pic
3.3.2 部署到Linux

將打成的jar包拷貝到Linux,生成鏡像,并創(chuàng)建容器。

1、編寫Dockerfile文件

FROM java:8u20
MAINTAINER docker_maven docker_maven@email.com
WORKDIR /ROOT
ADD xuecheng-plus-checkcode-0.0.1-SNAPSHOT.jar xuecheng-plus-checkcode.jar
CMD ["java", "-version"]
ENTRYPOINT ["java", "-Dfile.encoding=utf-8","-jar", "xuecheng-plus-checkcode.jar"]
EXPOSE 63075

2、創(chuàng)建鏡像

docker build -t checkcode:1.0 .

創(chuàng)建成功,查詢鏡像:

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

3、創(chuàng)建容器

docker run --name xuecheng-plus-checkcode -p 63075:63075 -idt checkcode:1.0

再次測(cè)試

### 申請(qǐng)驗(yàn)證碼
POST 192.168.101.65:63075/checkcode/pic

3.5 自動(dòng)部署

3.5.1 實(shí)戰(zhàn)流程

下邊使用jenkins實(shí)現(xiàn)CI/CD的流程。
微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

1、將代碼 使用Git托管

2、在jenkins創(chuàng)建任務(wù),從Git拉取代碼。

3、拉取代碼后進(jìn)行自動(dòng)構(gòu)建:測(cè)試、打包、部署。

首先將代碼打成鏡像包上傳到docker私服。

自動(dòng)創(chuàng)建容器、啟動(dòng)容器。

4、當(dāng)有代碼push到git實(shí)現(xiàn)自動(dòng)構(gòu)建。

3.5.2 代碼提交至Git

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

3.5.3 修改pom.xml文件

在pom.xml添加docker-maven-plugin插件實(shí)現(xiàn)將springboot工程創(chuàng)建鏡像,
此pom.xml添加docker-maven-plugin插件用于生成鏡像。

分別修改system-api、content-api、media-api、gateway、auth、checkcode服務(wù)的pom.xml文件。

插件的坐標(biāo)如下:

<dependency>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
</dependency>

修改pom.xml文件,以xuecheng-plus-checkcode為例,如下:

Bash
<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <!--修改imageName節(jié)點(diǎn)的內(nèi)容,改為私有倉(cāng)庫(kù)地址和端口,再加上鏡像id和 TAG,我們要直接傳到私服-->
                <!--配置最后生成的鏡像名,docker images里的,我們這邊取項(xiàng)目名:版本-->
                <!--<imageName>${project.artifactId}:${project.version}</imageName>-->
                <imageName>192.168.101.65:5000/${project.artifactId}:${project.version}</imageName>
                <!--也可以通過(guò)以下方式定義image的tag信息。 -->
                <!-- <imageTags>
                     <imageTag>${project.version}</imageTag>
                     &lt;!&ndash;build 時(shí)強(qiáng)制覆蓋 tag,配合 imageTags 使用&ndash;&gt;
                     <forceTags>true</forceTags>
                     &lt;!&ndash;build 完成后,push 指定 tag 的鏡像,配合 imageTags 使用&ndash;&gt;
                     <pushImageTag>true</pushImageTag>
                 </imageTags>-->
                <baseImage>java:8u20</baseImage>
                <maintainer>docker_maven docker_maven@email.com</maintainer>
                <workdir>/root</workdir>
                <cmd>["java", "-version"]</cmd>
                <!--來(lái)指明Dockerfile文件的所在目錄,如果配置了dockerDirectory則忽略baseImage,maintainer等配置-->
                <!--<dockerDirectory>./</dockerDirectory>-->
                <!--2375是docker的遠(yuǎn)程端口,插件生成鏡像時(shí)連接docker,這里需要指定docker遠(yuǎn)程端口-->
                <dockerHost>http://192.168.101.65:2375</dockerHost>
                <!--入口點(diǎn),project.build.finalName就是project標(biāo)簽下的build標(biāo)簽下 的filename標(biāo)簽內(nèi)容,testDocker-->
                <!--相當(dāng)于啟動(dòng)容器后,會(huì)自動(dòng)執(zhí)行java -jar ...-->
                <entryPoint>["java", "-Dfile.encoding=utf-8","-jar", "/root/${project.build.finalName}.jar"]</entryPoint>
                <!--是否推送到docker私有倉(cāng)庫(kù),舊版本插件要配置maven的settings文件。 -->
                <pushImage>true</pushImage>
                <registryUrl>192.168.101.65:5000</registryUrl>  <!-- 這里是復(fù)制 jar 包到 docker 容器指定目錄配置 -->
                <resources>
                    <resource>
                        <targetPath>/root</targetPath>
                        <directory>${project.build.directory}</directory>
                        <!--把哪個(gè)文件上傳到docker,相當(dāng)于Dockerfile里的add app.jar /-->
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

其中system-api服務(wù)的bootstrap.yml修改如下:

server:
  servlet:
    context-path: /system
  port: 63110
#微服務(wù)配置
spring:
  application:
    name: system-api
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.101.65:3306/xcplus_system?serverTimezone=UTC&userUnicode=true&useSSL=false&
    username: root
    password: mysql
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev166
        group: xuecheng-plus-project
# 日志文件配置路徑
logging:
  config: classpath:log4j2-dev.xml

# swagger 文檔配置
swagger:
  title: "學(xué)成在線系統(tǒng)管理"
  description: "系統(tǒng)管理接口"
  base-package: com.xuecheng.system
  enabled: true
  version: 1.0.0

在system-api工程添加nacos的依賴:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

刪除system-service工程下的配置文件。

以上內(nèi)容修改完畢再次提交Git.

3.5.4 自動(dòng)構(gòu)建測(cè)試

找到j(luò)enkins_02任務(wù),配置源碼管理

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

配置完畢,開(kāi)始構(gòu)建

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式
)

通過(guò)控制臺(tái)輸出日志觀察構(gòu)建情況

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

如果控制臺(tái)有報(bào)錯(cuò),根據(jù)錯(cuò)誤信息進(jìn)行調(diào)試。

部署成功后,進(jìn)入服務(wù)器查看docker容器是否啟動(dòng)成功

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

3.5.5 部署前端門戶

在虛擬機(jī)的docker中已經(jīng)部署了nginx,修改nginx.conf的配置文件


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
     server_names_hash_bucket_size 64;
     client_max_body_size 100M; # 設(shè)置客戶端請(qǐng)求體最大值
     client_body_buffer_size 128k; # 設(shè)置請(qǐng)求體緩存區(qū)大小
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
   #文件服務(wù)
  upstream fileserver{
    server 192.168.101.65:9000 weight=10;
  } 
     #后臺(tái)網(wǎng)關(guān)
  upstream gatewayserver{
    server 192.168.101.65:63010 weight=10;
  } 
    #gzip  on;

    server {
        listen       80;
        server_name  www.51xuecheng.cn localhost;
        #rewrite ^(.*) https://$server_name$1 permanent;
        #charset koi8-r;
        ssi on;
        ssi_silent_errors on;
        #access_log  logs/host.access.log  main;

        location / {
            alias   /etc/nginx/html/;
            index  index.html index.htm;
        }
        #api
        location /api/ {
                proxy_pass http://gatewayserver/;
        } 
        #靜態(tài)資源
        location /static/img/ {  
                alias  /etc/nginx/html/img/;
        } 
        location /static/css/ {  
                alias   /etc/nginx/html/css/;
        } 
        location /static/js/ {  
                alias   /etc/nginx/html/js/;
        } 
        location /static/plugins/ {  
                alias   /etc/nginx/html/plugins/;
                add_header Access-Control-Allow-Origin http://ucenter.51xuecheng.cn;  
                add_header Access-Control-Allow-Credentials true;  
                add_header Access-Control-Allow-Methods GET;
        } 
        location /plugins/ {  
                alias   /etc/nginx/html/plugins/;
        } 
        location /course/preview/learning.html {
                alias /etc/nginx/html/course/learning.html;
        } 
        location /course/search.html {  
                root   /etc/nginx/html;
        } 
        location /course/learning.html {  
                root   /etc/nginx/html;
        } 
        location /course/ {  
                proxy_pass http://fileserver/mediafiles/course/;
        } 
        #openapi
        location /open/content/ {
                proxy_pass http://gatewayserver/content/open/;
        } 
        location /open/media/ {
                proxy_pass http://gatewayserver/media/open/;
        } 

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

   server {
        listen       80;
        server_name  file.51xuecheng.cn;
        #charset koi8-r;
        ssi on;
        ssi_silent_errors on;
        #access_log  logs/host.access.log  main;
        location /video {
            proxy_pass   http://fileserver;
        }

        location /mediafiles {
            proxy_pass   http://fileserver;
        }
   }
 
   server {
        listen       80;
        server_name  teacher.51xuecheng.cn;
        #charset koi8-r;
        ssi on;
        ssi_silent_errors on;
        #access_log  logs/host.access.log  main;
        location / {
            alias   /etc/nginx/html/dist/;
            index  index.html index.htm;
        }
        #location / {
        #    proxy_pass   http://uidevserver;
        #}

        location /api/ {
                proxy_pass http://gatewayserver/;
        } 
        
        
   }

    server {
        listen       80;
        server_name  ucenter.51xuecheng.cn;
        #charset koi8-r;
        ssi on;
        ssi_silent_errors on;
        #access_log  logs/host.access.log  main;
        location / {
            alias   /etc/nginx/html/ucenter/;
            index  index.html index.htm;
        }
        location /include {
            proxy_pass   http://192.168.101.65;
        }
        location /img/ {
            proxy_pass   http://192.168.101.65/static/img/;
        }
        location /api/ {
                proxy_pass http://gatewayserver/;
        } 
   }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

將前端門戶的靜態(tài)頁(yè)面拷貝到 /data/soft/nginx/xuecheng_portal_static

啟動(dòng)nginx容器:

docker start nginx

修改本機(jī)hosts文件:

192.168.101.65   www.51xuecheng.cn 51xuecheng.cn ucenter.51xuecheng.cn teacher.51xuecheng.cn file.51xuecheng.cn

將本機(jī)的nginx服務(wù)停掉,訪問(wèn)www.51xuecheng.cn。

3.5.6 部署機(jī)構(gòu)端前端

將機(jī)構(gòu)端的前端工程打包,運(yùn)行yarn build

打包成功在工程目錄生成dist目錄

將此目錄的內(nèi)容拷貝到虛擬機(jī)的/data/soft/nginx/xuecheng_portal_static/dist

3.5.7 配置觸發(fā)器

當(dāng)向gogs提交代碼時(shí)進(jìn)行自動(dòng)構(gòu)建

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

在gogs配置鉤子

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

推送地址設(shè)置jenkins的接口:

http://192.168.101.65:8888/gogs-webhook/?job=jenkins_02

配置好可以測(cè)試一下:

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

測(cè)試后觀察jenkina是否重新構(gòu)建任務(wù)。

提交代碼測(cè)試:

修改代碼提交到gogs,觀察jenkins是否自動(dòng)構(gòu)建任務(wù)

3.6 功能測(cè)試

3.6.1 測(cè)試認(rèn)證功能

部署成功后對(duì)功能進(jìn)行測(cè)試。

1、首先測(cè)試認(rèn)證功能

進(jìn)入www.51xuecheng.cn,點(diǎn)擊登錄,輸入賬號(hào)和密碼進(jìn)行登錄。

賬號(hào)和密碼:t1/111111

3.6.2 測(cè)試內(nèi)容管理

1、測(cè)試課程列表

出現(xiàn) Request failed with status code 503 錯(cuò)誤

通過(guò)nacos排查,進(jìn)入服務(wù)列表

缺少system-api

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

排查system-api工程的bootstrap.yml配置文件、依賴包等內(nèi)容。

修改代碼后重新提交git

再次進(jìn)行jenkins構(gòu)建。

2、測(cè)試上傳課程圖片

首先測(cè)試修改課程,上傳一個(gè)新圖片。

3、測(cè)試課程發(fā)布

首先觀察xxl-job調(diào)度中心是否成功注冊(cè)執(zhí)行器

微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署,java,# spring,# springboot,微服務(wù),架構(gòu),java,分布式

啟動(dòng)課程發(fā)布任務(wù)

發(fā)布一門課程,觀察content-api容器的日志

錯(cuò)誤日志:

java.io.FileNotFoundException: file:/root/xuecheng-plus-content-api-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/templates does not exist.

無(wú)法找到靜態(tài)化的模板

屏蔽原來(lái)的方式,改如下方式

//            String classpath = this.getClass().getResource("/").getPath(); //打包jar無(wú)法獲取模板
//            configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates/"));
        //更改為如下方式
        configuration.setTemplateLoader(new ClassTemplateLoader(this.getClass().getClassLoader(),"/templates"));
3.6.3 測(cè)試媒資管理

1、配置ffmpeg的目錄

將linux版本的ffmpeg拷貝到 /data/soft/service 下,在nacos配置ffmpeg
的地址:

Ffmpeg linux版本下載地址:https://johnvansickle.com/ffmpeg/

videoprocess:
 ffmpegpath: /root/soft/ffmpeg

2、測(cè)試上傳視頻文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-644938.html

到了這里,關(guān)于微服務(wù)實(shí)戰(zhàn)項(xiàng)目-學(xué)成在線-項(xiàng)目部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包