Docker實戰 | 第三篇:Docker安裝Nginx,實現基於vue-element-admin框架構建的項目線上部署

一. 前言

在上一文中 點擊跳轉 通過IDEA集成Docker插件實現微服務的一鍵部署,但 youlai-mall
是前後端分離的項目,除了後端微服務的部署之外,當然還少不了前端工程的部署。所以本篇講述如何通過Docker安裝Nginx實現前端Vue項目工程的部署。

二. Docker安裝Nginx

1. 創建目錄

mkdir -p /usr/share/nginx/conf
mkdir -p /usr/share/nginx/html

2. 創建配置文件

touch /usr/share/nginx/conf/nginx.conf

在nginx.conf文件添加如下配置

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen     80;
        server_name  localhost;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
	    }
        # 代理轉發請求至網關,prod-api標識解決跨域問題
	    location /prod-api/ {
            proxy_pass //www.youlai.store:9999/;
	    }
    }
}

3. 拉取鏡像

docker pull nginx

查看鏡像

docker images

4. 創建容器並啟動

docker run -it -d \
--name nginx \
-p 80:80 \
-v /usr/share/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/share/nginx/html:/usr/share/nginx/html \
nginx 

兩個-v 分別表示配置文件和nginx工作空間目錄的映射,冒號左邊是宿主機,右邊是容器的,這樣修改宿主機的配置文件和工作空間就可以同步到容器

5. 查看容器

docker ps -a

6. 查看nginx啟動日誌

docker logs nginx

7. 啟動、關閉、重啟nginx

docker start nginx
docker stop nginx
docker restart nginx

三. vue-element-admin落地項目線上部署

完成上面的Nginx安裝和相關配置後,接下來開始部署前端項目。

youlai-mall-admin 是開源項目有來商城 分離的管理前端,基於 vue-element-admin基礎框架構建的。這裡講述如何將其部署到線上環境。

1. 項目打包

執行npm run build:prod打包項目,打包生成的文件在項目根目錄下的dist文件夾。

2. 項目上傳

使用FTP工具上傳dist文件夾下的所有文件至伺服器/usr/share/nginx/html目錄下

3. 項目測試

重啟nginx

docker restart nginx

訪問 www.youlai.store, 使用帳號/密碼:admin/123456 登錄系統

訪問成功!!

4. 其他說明

在Nginx配置文件中其中有下面這一段配置

location /prod-api/ {
    proxy_pass //www.youlai.store:9999/;
}

至於為什麼會攔截 prod-api 這段標識進行代理轉發,看下瀏覽器的一個完整請求路徑你應該就會明白。

無論是本地的dev-api還是線上的prod-api的標識本質上都是解決前後端分離項目的跨域問題,只不過本地使用的vue的proxyTable代理,線上使用的是nginx的代理,手段則是統一的替換標識為真正的後端地址。

四. 結語

至此 youlai-mall 後端和前端都已部署完畢,線上網址 www.youlai.store,目前上線的功能有系統管理模組和OAuth2統一認證授權,商城業務功能和小程式正在開發階段,所以有興趣的朋友一起開發的項目歡迎您的關注和聯繫我(微訊號:haoxianrui)。