最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker本地部署SSR前端項目實戰(zhàn)指南

 更新時間:2026年01月15日 09:49:36   作者:新節(jié)  
本文介紹了Docker本地部署SSR前端項目實戰(zhàn)指南,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

這篇文檔詳細介紹如何將基于 Next.js 的銀企直連前置機管理系統(tǒng)(我本地的項目)容器化,并在本地使用 Docker 進行部署。

1. 項目技術棧

本項目采用現(xiàn)代化的 SSR (服務端渲染) 架構,主要技術棧如下:

  • 核心框架: Next.js 15 (App Router 架構) - 提供服務端渲染、API 路由和文件系統(tǒng)路由。
  • 前端庫: React 18 - 構建用戶界面。
  • UI 組件庫: Ant Design 5 - 企業(yè)級 React 組件庫。
  • 樣式方案: Tailwind CSS 4 & Sass - 原子化 CSS 與預處理器結合。
  • 數(shù)據(jù)庫交互: MySQL2 - Node.js 的 MySQL 驅動。
  • 認證方案: NextAuth.js - 完整的身份驗證解決方案。
  • 包管理工具: pnpm - 高效的包管理器。

注意:數(shù)據(jù)庫用的是我本地安裝的 MySQL,里面已有數(shù)據(jù),省略了數(shù)據(jù)庫相關的建庫和建表。

2. 項目目錄結構

項目的核心結構基于 Next.js App Router:

yqzl/
├── app/                  # 應用主入口 (App Router)
│   ├── api/              # 后端 API 接口定義
│   ├── auth/             # 認證相關頁面
│   ├── components/       # 公共組件 (Sidebar, ConditionalLayout 等)
│   ├── dashboard/        # 儀表盤頁面
│   ├── documents/        # 文檔管理模塊
│   └── lib/              # 核心工具庫 (如 mysql 數(shù)據(jù)庫連接)
├── public/               # 靜態(tài)資源
├── types/                # TypeScript 類型定義
├── Dockerfile            # Docker 構建描述文件
├── docker-compose.yml    # 容器編排配置
├── next.config.ts        # Next.js 配置文件
└── .env                  # 環(huán)境變量 (敏感信息)

3. 核心配置文件詳解

3.1 Dockerfile (多階段構建)

為了優(yōu)化鏡像體積和構建效率,我們使用了 Docker 的多階段構建 (Multi-stage build) 功能。

  • Stage 1: deps: 僅復制 package.jsonpnpm-lock.yaml 并安裝依賴。利用 Docker 緩存層,只要依賴不變,此階段會被緩存。
  • Stage 2: builder: 復制源碼并運行 pnpm build 進行編譯。
  • Stage 3: runner: 生產運行環(huán)境?;?node:20-alpine,僅復制構建產物 (.next 文件夾、public 文件夾) 和必要的 node_modules。

dockerfile 完整配置:

# 1. 基礎鏡像
FROM node:20-alpine AS base
RUN npm install -g pnpm

# 2. 依賴安裝階段
FROM base AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile

# 3. 編譯構建階段
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# 提示:如果 build 報錯,記得在 next.config.ts 中暫時關閉 ESLint 檢查
RUN pnpm build

# 4. 運行階段
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
# 關鍵配置:允許從外部訪問容器內的 3000 端口
ENV HOSTNAME "0.0.0.0"

COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json

EXPOSE 3000
CMD ["pnpm", "start"]

3.2 docker-compose.yml (編排與網(wǎng)絡)

此文件定義了如何運行應用服務,特別是解決了容器連接宿主機數(shù)據(jù)庫的問題。

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: yqzl-app
    ports:
      - "3000:3000"
    env_file:
      - .env
    environment:
      # 這里重寫 MYSQL_HOST,使其指向宿主機
      # 在 Windows/Mac 的 Docker Desktop 中,host.docker.internal 指向宿主機
      - MYSQL_HOST=host.docker.internal
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: always

networks:
  default:
    name: yqzl-network
  • host.docker.internal: 這是 Docker Desktop (Windows/Mac) 提供的特殊 DNS 名稱,允許容器內部訪問宿主機的網(wǎng)絡服務 (如本地運行的 MySQL)。

3.3 next.config.ts (構建配置)

針對 Docker 環(huán)境,我們建議在構建時適當放寬檢查,以避免因細微的 Lint 錯誤導致構建失?。?/p>

const nextConfig: NextConfig = {
  // ...
  eslint: {
    // 忽略構建時的 ESLint 錯誤,確保能夠生成鏡像
    ignoreDuringBuilds: true
  },
  typescript: {
    ignoreBuildErrors: true
  }
};

4. 為什么容器內不需要 Nginx?

在傳統(tǒng)的 SPA (Single Page Application) 部署中,前端構建出的是靜態(tài) HTML/CSS/JS 文件,因此必須依賴 Nginx 或 Apache 這樣的 Web Server 來提供文件服務。

但在 SSR (Next.js) 架構中,情況有所不同:

  1. Node.js 自帶服務: Next.js 生產環(huán)境 (next start) 啟動的是一個全功能的 Node.js HTTP 服務器。它不僅能處理 API 請求、服務端渲染動態(tài)頁面,也能高效地托管 public 和 .next/static 中的靜態(tài)資源。
  2. 架構解耦: 根據(jù)容器化的“單一職責原則”,應用容器應該只包含應用本身。
  3. 反向代理通常在外層: 如果需要 Nginx (用于 SSL 終止、負載均衡、gzip 壓縮等),通常建議將其部署在容器外部 (作為宿主機服務或另一個獨立的 Nginx 容器),作為整個系統(tǒng)的網(wǎng)關 (Gateway),而不是塞進應用容器里。

因此,直接在 Docker 中運行 pnpm start 是最簡潔、高效且符合云原生理念的做法。

5. 部署步驟

  1. 準備環(huán)境:

    • 確保已安裝 Docker Desktop for Windows
    • 確保本地 MySQL 服務已啟動,且用戶權限允許遠程連接 (或至少允許 Docker 網(wǎng)段連接)。
  2. 配置環(huán)境:

    • 確保項目根目錄存在 .env 文件,且包含正確的數(shù)據(jù)庫憑證。
  3. 啟動部署: 在項目根目錄打開 PowerShell 或終端,運行:

    docker-compose up -d --build
    
    • -d: 后臺運行。
    • --build: 強制重新構建鏡像 (確保代碼變更為最新)。
  4. 訪問應用: 打開瀏覽器訪問 http://localhost:3000

  5. 查看日志: 如果遇到問題,查看容器日志:

    docker-compose logs -f
    
  6. 停止服務:

    docker-compose down
    

到此這篇關于Docker本地部署SSR前端項目實戰(zhàn)指南的文章就介紹到這了,更多相關Docker本地部署SSR項目 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • docker運行nginx綁定配置文件失敗原因以及問題解決

    docker運行nginx綁定配置文件失敗原因以及問題解決

    最近工作中在使用docker運行nginx的時候遇到了些問題,下面分享給大家,這篇文章主要給大家介紹了關于docker運行nginx綁定配置文件失敗原因以及問題解決的相關資料,需要的朋友可以參考下
    2023-02-02
  • Docker volume使用詳解及實例

    Docker volume使用詳解及實例

    這篇文章主要介紹了Docker volume使用詳解及實例的相關資料,并附簡單實例,幫助大家學習參考,需要的朋友可以看下
    2016-11-11
  • Docker容器日志占用空間過大的解決方式

    Docker容器日志占用空間過大的解決方式

    當我們嘗試查看特定?Docker?容器的日志時,通常會使用?docker?logs?<容器名稱>?命令,,然而,有時候會發(fā)現(xiàn)控制臺持續(xù)輸出日志信息,持續(xù)時間可能相當長,直到最終打印完成,導致日志積累過多,占用了系統(tǒng)磁盤空間,所以本文給大家介紹了解決方法,需要的朋友可以參考下
    2024-03-03
  • 在Docker容器之間如何進行通信

    在Docker容器之間如何進行通信

    本文介紹了Docker網(wǎng)絡模式,包括橋接網(wǎng)絡、主機網(wǎng)絡、容器網(wǎng)絡和基于容器名稱的通信,通過這些網(wǎng)絡模式,容器之間可以方便地進行通信,實現(xiàn)跨網(wǎng)絡通信
    2024-11-11
  • 退出docker run的幾種實現(xiàn)方式

    退出docker run的幾種實現(xiàn)方式

    文章總結:本文介紹了幾種退出Docker容器的方法,包括在容器內使用`exit`命令、在命令行界面中使用`Ctrl+D`組合鍵、使用`Ctrl+C`中斷進程、通過`docker stop`命令停止容器以及使用`docker kill`命令強制停止容器
    2026-01-01
  • 解決nacos啟動時防火墻開啟8848的坑

    解決nacos啟動時防火墻開啟8848的坑

    最近操作Nacos時遭遇8848端口無法訪問的問題,嘗試通過安全組和firewall配置仍無法解決,最終發(fā)現(xiàn),firewall對Docker使用專門的作用域,需要在相應作用域下開放端口,務必檢查firewall中針對Docker的設置,確保8848端口在正確的作用域內被允許通行
    2022-10-10
  • Docker學習之基于Dockerfile搭建JAVA Tomcat運行環(huán)境的方法

    Docker學習之基于Dockerfile搭建JAVA Tomcat運行環(huán)境的方法

    本篇文章主要介紹了Docker學習之基于Dockerfile搭建JAVA Tomcat運行環(huán)境的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • docker拉取失敗問題解決

    docker拉取失敗問題解決

    本文主要介紹了docker拉取失敗問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Docker鏡像分層的原理詳解

    Docker鏡像分層的原理詳解

    這篇文章主要介紹了Docker鏡像分層的原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • docker  深入了解鏡像、容器、倉庫等概念

    docker 深入了解鏡像、容器、倉庫等概念

    這篇文章主要介紹了docker 深入了解鏡像、容器、倉庫等概念的相關資料,需要的朋友可以參考下
    2016-10-10

最新評論

张家港市| 绥棱县| 沛县| 沛县| 青海省| 遵义市| 广灵县| 葵青区| 乡宁县| 岳西县| 修武县| 贺州市| 资源县| 贵州省| 榕江县| 霍州市| 砚山县| 开鲁县| 南靖县| 徐州市| 西青区| 扎兰屯市| 长海县| 溧水县| 朝阳区| 伊春市| 定兴县| 泽州县| 泰宁县| 阿图什市| 凌源市| 天峨县| 乡宁县| 宝丰县| 集安市| 志丹县| 沈丘县| 沾益县| 新民市| 天长市| 郸城县|