溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker+Nginx打包部署前后端分離怎么實現(xiàn)

發(fā)布時間:2023-01-09 09:23:57 來源:億速云 閱讀:129 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“Docker+Nginx打包部署前后端分離怎么實現(xiàn)”,在日常操作中,相信很多人在Docker+Nginx打包部署前后端分離怎么實現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker+Nginx打包部署前后端分離怎么實現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    問題描述

    最近做了一個前后端分離的通用權限管理系統(tǒng),今天想用自己的服務器部署下,本地部署測試是沒問題的,但是部署在服務器上還是出現(xiàn)了許多小插曲,這里大概記錄一下吧。

    項目打包

    前端項目打包

    由于我需要在同一個端口號下使用nginx部署多個前端項目,所以需要額外設置一些東西。

    修改vue.config.js文件

    添加如下配置:

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    router配置中添加base屬性
    const createRouter = () => new Router({
      // mode: 'history', // require service support
      scrollBehavior: () => ({ y: 0 }),
      routes: constantRoutes,
      base:'/guigu'
    })

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    打包前端項目

    執(zhí)行命令:

    npm run build:prod

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    出現(xiàn)dist文件夾說明打包成功

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    后端項目打包

    這里我跳過了test步驟

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    打包之后target文件夾下面會有jar包

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    將前端和后端的打包文件上傳到服務器

    這里上傳的方法較多,不過多贅述了。

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    將dist.tgz文件解壓即可

    tar -zxvf dist.tgz -C

    寫你的解壓路徑即可

    nginx反向代理配置

    部分配置如下:

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

      server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
               proxy_pass http://blog;
    		   proxy_set_header HOST $host;
    		   proxy_set_header X-Forwarded-Proto $scheme;
    		   proxy_set_header X-Real-IP $remote_addr;
    		   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    		
    		location ^~/prod-api/ {
    			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_set_header X-NginX-Proxy true;
    			proxy_pass http://127.0.0.1:8800/;
    		}
    		# guigu-auth配置
    		location /guigu {
    			alias /opt/guigu-auth/guigu-front/;
    			index index.html index.htm;
    		}
    
            #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;
            }
        }

    上面nginx.conf的配置分為兩個部分,第一個部分實現(xiàn)前端vue的映射,

    即將

    /opt/guigu-auth/guigu-front/index.html

    映射成

    127.0.0.1:8080/guigu
    location /guigu {
    			alias /opt/guigu-auth/guigu-front/;
    			index index.html index.htm;
    }

    第二部分是將后端請求指向后端項目。這里直接替換了uri的前綴

    prod-api

    也就是說假設前端向后端發(fā)送的請求為

    http://localhost:8800/prod-api/admin/system/index

    經(jīng)過nginx反向代理后,實際上到達后端的uri為

    http://localhost:8800/admin/system/index

    至此,前端項目部署完畢

    訪問

    codeleader.top/guigu

    會出現(xiàn)如下頁面說明前端部署成功

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    后端通過Dockerfile打包成docker鏡像

    這里為什么使用docker?

    我開始不想用這個,是直接將jar包在服務器上部署的,覺得小項目沒必要用docker。

    但是由于我以前搭建個人博客的時候裝的jdk11,這個項目使用jdk8開發(fā)的,環(huán)境不一致,docker的環(huán)境隔離機制非常適合現(xiàn)在這種情況,關于docker使用場景請看我docker專欄,這里不再贅述。

    編寫Dockerfile

    # 基礎鏡像使用java
    FROM java:8
    # 作者
    MAINTAINER xtt
    # VOLUME 指定臨時文件目錄為/tmp,在主機/var/lib/docker目錄下創(chuàng)建了一個臨時文件并鏈接到容器的/tmp
    VOLUME /tmp
    # 將jar包添加到容器中并更名為guigu_docker.jar
    ADD service-system.jar guigu_docker.jar
    # 運行jar包
    RUN bash -c 'touch /guigu_docker.jar'
    ENTRYPOINT ["java","-jar","/guigu_docker.jar"]
    #暴露8800端口作為微服務
    EXPOSE 8800

    構建Docker鏡像

    將打包的后端項目jar包和Dockerfile放在同一個目錄下面

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    執(zhí)行命令如下命令構建鏡像:

    docker build -t guigu_docker:1.0 .

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    查看構建的鏡像

    docker images

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    運行容器

    docker run -d -p 8800:8800 --name guigu-auth guigu_docker:1.0

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    運行測試

    點擊登錄按鈕,成功進入系統(tǒng),說明前后端部署成功。

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    Docker+Nginx打包部署前后端分離怎么實現(xiàn)

    現(xiàn)在這種部署方式跟部署單個微服務的方法一樣,但是生產(chǎn)中不可能只有一個微服務,所以需要借助容器編排來實現(xiàn)一次打包一堆微服務,包括docker-compose、docker swam、k8s、DevOps等這還需要大量的開發(fā)實踐才行,這些技術光學沒用,要在自己的項目中實踐才行。其實這里nginx和前端也可以用容器部署的,但這里暫時感覺沒必要。

    開發(fā)+部署多有意思啊,現(xiàn)在整天搞自己不感興趣的方向已經(jīng)和當初自己想象的研究生科研生涯完全不同了,這種感覺或許只有自己讀研之后才能感同身受了,雖有諸多無奈,但我絕不會放棄我所熱愛的技術,架構師之路任重而道遠。

    到此,關于“Docker+Nginx打包部署前后端分離怎么實現(xiàn)”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    AI