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

使用Docker部署前端和后端項目的完整教程

 更新時間:2026年02月03日 09:52:43   作者:黃魚晏  
使用Docker部署項目可以實現(xiàn)快速、一致和可重復(fù)的部署流程,下面這篇文章主要介紹了使用Docker部署前端和后端項目的完整教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在現(xiàn)代軟件開發(fā)流程中,容器化部署已成為主流方案,Docker憑借輕量、隔離、可移植的特性,能大幅簡化前后端項目的部署復(fù)雜度。本文將結(jié)合實際項目經(jīng)驗,詳細(xì)講解如何使用Docker部署包含前端(Vue)、后端(SpringBoot)、PostgreSQL數(shù)據(jù)庫、Redis緩存的完整項目,涵蓋環(huán)境配置、鏡像構(gòu)建、容器編排全流程。

docker.aityp.com(渡渡鳥鏡像同步站)是一款實用的Docker鏡像加速工具。它100%同步gcr.io、docker.io等多個官方鏡像源,涵蓋8000+docker.io鏡像及各類常用鏡像。無需復(fù)雜配置,就能解決官方鏡像拉取慢的問題,讓鏡像獲取更高效,為容器化部署節(jié)省時間。

一、項目架構(gòu)與環(huán)境準(zhǔn)備

1. 項目架構(gòu)說明

  • 前端:Vue3項目,通過Nginx提供靜態(tài)資源服務(wù)并反向代理后端接口;
  • 后端:SpringBoot 3.x項目,提供業(yè)務(wù)接口,依賴PostgreSQL數(shù)據(jù)庫和Redis緩存;
  • 中間件:PostgreSQL 16(數(shù)據(jù)持久化)、Redis 7.0.10(緩存);
  • 網(wǎng)絡(luò):Docker自定義橋接網(wǎng)絡(luò),實現(xiàn)容器間互通;
  • 存儲:Docker數(shù)據(jù)卷,保障數(shù)據(jù)持久化。

2. 環(huán)境前置要求

  • 服務(wù)器:Linux系統(tǒng)(本文以CentOS7 為例);
  • 軟件:已安裝Docker、Docker Compose;
  • 目錄結(jié)構(gòu):
/opt/graph-parent/
├── frontend/                # 前端目錄(含dist構(gòu)建產(chǎn)物、Dockerfile、nginx.conf)
├── backend/                 # 后端目錄(含jar包、Dockerfile、application.yml)
├── docker-compose.yml       # 容器編排文件
└── logs/                    # 日志目錄(可選)

二、后端項目容器化部署

1. 編寫后端Dockerfile

后端基于OpenJDK 17構(gòu)建,Dockerfile放置于/opt/graph-parent/backend/目錄:

# 選擇華為云鏡像源的OpenJDK 17 slim版本(精簡且穩(wěn)定)
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17-slim

# 設(shè)置時區(qū),避免時間不一致問題
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 定義工作目錄
WORKDIR /app

# 復(fù)制后端jar包到容器內(nèi)(需確保jar包名稱與實際一致)
COPY graph-api.jar app.jar

# 暴露后端服務(wù)端口
EXPOSE 8088

# 啟動命令(指定生產(chǎn)環(huán)境配置,避免端口重復(fù)配置)
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]

2. 后端配置文件優(yōu)化

修改application.yml,重點配置數(shù)據(jù)庫和Redis連接(容器間通過服務(wù)名互通):

server:
  port: 8088  # 后端服務(wù)端口

spring:
  # 數(shù)據(jù)庫配置
  datasource:
    url: jdbc:postgresql://graph-postgres:5432/graph_db  # 容器名+端口+庫名
    username: postgres
    password: 123456
    driver-class-name: org.postgresql.Driver
  # Redis配置
  redis:
    host: graph-redis  # Redis容器名
    port: 6379
    timeout: 5000ms

# MyBatis-Plus配置(按需添加)
mybatis-plus:
  mapper-locations: classpath:mapper/**/*.xml
  type-aliases-package: com.graph.api.entity

3. 構(gòu)建后端鏡像

cd /opt/graph-parent/backend/
# 構(gòu)建鏡像(--no-cache避免緩存干擾)
docker build --no-cache -t graph-api:latest .

三、前端項目容器化部署

1. 編寫前端Dockerfile

前端基于Nginx Alpine鏡像構(gòu)建,Dockerfile放置于/opt/graph-parent/frontend/目錄:

# 選擇華為云鏡像源的Nginx Alpine版本(輕量)
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:alpine

# 清空Nginx默認(rèn)靜態(tài)文件
RUN rm -rf /usr/share/nginx/html/*

# 復(fù)制前端構(gòu)建產(chǎn)物(dist目錄)到Nginx靜態(tài)資源目錄
COPY dist/ /usr/share/nginx/html/

# 復(fù)制自定義Nginx配置文件,覆蓋默認(rèn)配置
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 暴露80端口
EXPOSE 80

# 啟動Nginx(前臺運行,保證容器不退出)
CMD ["nginx", "-g", "daemon off;"]

2. 配置Nginx反向代理

編寫nginx.conf,解決前端路由刷新404問題,并代理后端接口:

server {
    listen 80;
    server_name localhost;
    charset utf-8;

    # 前端靜態(tài)文件根目錄
    root /usr/share/nginx/html;
    index index.html index.htm;

    # 解決Vue路由刷新404
    location / {
        try_files $uri $uri/ /index.html;
        add_header Cache-Control "no-cache, no-store, must-revalidate";
    }

    # 反向代理后端接口(容器名+端口)
    location /api/ {
        proxy_pass http://graph-api:8088/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 30s;
        proxy_read_timeout 30s;
    }

    # 日志配置(容器內(nèi)路徑,通過數(shù)據(jù)卷掛載到主機)
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

3. 構(gòu)建前端鏡像

cd /opt/graph-parent/frontend/
# 構(gòu)建鏡像
docker build --no-cache -t graph-web-nginx:latest .

四、Docker Compose統(tǒng)一編排

1. 編寫docker-compose.yml

通過Docker Compose管理所有服務(wù),實現(xiàn)一鍵啟動/停止,文件放置于/opt/graph-parent/目錄:

version: '3.8'

# 自定義網(wǎng)絡(luò)(容器間互通)
networks:
  graph-network:
    name: graph-network
    driver: bridge

# 數(shù)據(jù)卷(持久化存儲)
volumes:
  postgres-data:  # PostgreSQL數(shù)據(jù)卷
  redis-data:     # Redis數(shù)據(jù)卷
  backend-logs:   # 后端日志卷
  nginx-logs:     # Nginx日志卷

# 服務(wù)定義
services:
  # PostgreSQL服務(wù)
  postgres:
    container_name: graph-postgres
    image: postgres:16
    restart: always
    environment:
      POSTGRES_PASSWORD: 123456
      POSTGRES_USER: postgres
      POSTGRES_DB: graph_db
      TZ: Asia/Shanghai
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --lc-collate=C --lc-ctype=C"
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - graph-network
    # 健康檢查(確保數(shù)據(jù)庫啟動完成后再啟動后端)
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d graph_db"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Redis服務(wù)
  redis:
    container_name: graph-redis
    image: redis:7.0.10
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "6379:6379"
    command:
      - redis-server
      - --appendonly yes
      - --bind 0.0.0.0
      - --protected-mode no
    volumes:
      - redis-data:/data
    networks:
      - graph-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  # 后端服務(wù)
  graph-api:
    container_name: graph-api
    image: graph-api:latest
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "8088:8088"
    volumes:
      - backend-logs:/app/logs
      - /opt/graph-parent/backend/config/application.yml:/app/config/application.yml  # 掛載外部配置
    networks:
      - graph-network
    # 依賴PostgreSQL和Redis健康啟動
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  # 前端服務(wù)
  graph-web:
    container_name: graph-web
    image: graph-web-nginx:latest
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "80:80"
    volumes:
      - nginx-logs:/var/log/nginx
      # 可選:掛載前端dist目錄,無需重建鏡像即可更新前端
      # - /opt/graph-parent/frontend/dist:/usr/share/nginx/html
    networks:
      - graph-network
    # 依賴后端啟動后再啟動
    depends_on:
      graph-api:
        condition: service_started

2. 啟動所有服務(wù)

cd /opt/graph-parent/
# 后臺啟動所有服務(wù)
docker-compose up -d

# 查看服務(wù)狀態(tài)(確保所有服務(wù)為Up狀態(tài))
docker-compose ps

# 查看日志(按需排查問題)
docker-compose logs graph-api  # 后端日志
docker-compose logs graph-web  # 前端日志

五、常見問題與解決方案

1. 后端連接數(shù)據(jù)庫報密碼認(rèn)證失敗

  • 原因:PostgreSQL容器首次啟動時的密碼與配置不一致(密碼僅首次啟動生效);
  • 解決:刪除PostgreSQL數(shù)據(jù)卷,重新初始化:
docker-compose down
docker volume rm graph-parent_postgres-data
docker-compose up -d postgres

2. 前端無法訪問后端接口

  • 原因:Nginx代理配置錯誤、容器網(wǎng)絡(luò)不通、后端未啟動;
  • 解決:
  • 檢查Nginx配置中proxy_pass的后端容器名和端口是否正確;
  • 驗證容器網(wǎng)絡(luò)互通:docker exec -it graph-web telnet graph-api 8088;
  • 確保后端服務(wù)正常啟動:docker-compose logs graph-api。

3. 容器啟動后自動退出

  • 原因:Nginx未前臺運行、后端啟動命令錯誤、依賴服務(wù)未就緒;
  • 解決:
  • Nginx啟動命令需添加daemon off;
  • 檢查后端啟動命令是否正確,避免端口重復(fù)配置;
  • 通過depends_on配置服務(wù)依賴順序,添加健康檢查。

4. 鏡像構(gòu)建失?。ㄎ募也坏剑?/h3>
  • 原因:Dockerfile中COPY指令的源文件路徑錯誤;
  • 解決:確保構(gòu)建上下文(執(zhí)行docker build的目錄)內(nèi)包含待復(fù)制的文件(如dist、jar包、nginx.conf)。

六、部署驗證與維護(hù)

1. 訪問驗證

  • 前端頁面:瀏覽器訪問http://服務(wù)器IP
  • 后端接口:訪問http://服務(wù)器IP:8088/doc.html(按需替換為健康檢查接口);
  • 數(shù)據(jù)庫:docker exec -it graph-postgres psql -U postgres -d graph_db;
  • Redis:docker exec -it graph-redis redis-cli

2. 日常維護(hù)

  • 停止服務(wù):docker-compose down;
  • 重啟服務(wù):docker-compose restart
  • 更新后端:重新構(gòu)建鏡像后docker-compose up -d graph-api;
  • 更新前端:重新構(gòu)建鏡像后docker-compose up -d graph-web(或掛載dist目錄直接替換文件);
  • 查看日志:docker-compose logs -f 服務(wù)名(-f實時查看)。

七、總結(jié)

通過Docker+Docker Compose實現(xiàn)前后端項目的容器化部署,不僅能解決環(huán)境不一致問題,還能簡化部署流程、提高服務(wù)可用性。核心要點包括:

  • 合理編寫Dockerfile,選擇精簡鏡像減少體積;
  • 利用Docker網(wǎng)絡(luò)實現(xiàn)容器間互通,優(yōu)先使用容器名而非IP;
  • 通過數(shù)據(jù)卷實現(xiàn)數(shù)據(jù)持久化,避免容器銷毀導(dǎo)致數(shù)據(jù)丟失;
  • 借助Docker Compose統(tǒng)一編排服務(wù),管理依賴關(guān)系和啟動順序;
  • 重視配置文件掛載和日志收集,便于問題排查和配置更新。

本文的部署方案經(jīng)過實際項目驗證,適用于中小型前后端分離項目,可根據(jù)業(yè)務(wù)需求擴展(如添加HTTPS、負(fù)載均衡等)。

到此這篇關(guān)于使用Docker部署前端和后端項目的文章就介紹到這了,更多相關(guān)Docker部署前端后端項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

铜鼓县| 凌云县| 巫山县| 韶山市| 北宁市| 鹤峰县| 巴南区| 邓州市| 延吉市| 嘉义市| 古蔺县| 宁德市| 通榆县| 盐亭县| 临泽县| 高要市| 梅河口市| 广平县| 合江县| 寻甸| 比如县| 临邑县| 察隅县| 枣阳市| 铜梁县| 时尚| 墨竹工卡县| 甘谷县| 二连浩特市| 军事| 乐东| 墨竹工卡县| 辉南县| 苍南县| 泗洪县| 杭州市| 额济纳旗| 甘南县| 鸡西市| 综艺| 廉江市|