目录

一、环境搭建前的核心思路

二、基础工具容器化:从 Dockerfile 到镜像构建

2.1 NVM(Node 版本管理)容器化:支撑前端 Vue3 环境

步骤 1:创建 NVM 工作目录与 Dockerfile

步骤 2:编写 NVM 的 Dockerfile

步骤 3:构建 NVM 镜像并启动容器

步骤 4:在容器内安装 Node.js 与 Vue CLI

2.2 Maven 环境配置:支撑后端项目构建

步骤 1:创建 Maven 目录与下载安装包

步骤 2:修改 Maven 配置文件(settings.xml)

2.3 JDK 11 容器化:支撑 Java 后端运行

步骤 1:创建 JDK 目录与下载 JDK 安装包

步骤 2:编写 JDK 的 Dockerfile

步骤 3:构建 JDK 镜像

三、云端项目路径规划:统一前后端目录结构

3.1 前端项目路径(Vue3)

3.2 后端项目路径(API 服务)

四、总结与后续展望

后续可扩展方向:


在现代开发与部署流程中,Docker 容器化技术凭借其环境一致性、可移植性和轻量级的优势,成为个人项目部署的首选方案。本文将详细记录个人博客部署环境的搭建全过程,涵盖 NVM(Node 版本管理)、Maven、JDK 等基础工具的 Docker 化配置,以及前后端项目路径规划,为后续博客项目的开发与部署打下坚实基础。

一、环境搭建前的核心思路

个人博客通常包含前端(如 Vue3) 和后端(如 Spring Boot) 两个部分,需依赖 Node.js、Maven、JDK 等工具。为避免环境冲突并简化部署流程,我们采用以下策略:

  1. 所有工具(NVM、JDK)通过 Docker 镜像构建,确保环境隔离;
  2. 关键数据(如 Maven 仓库、工具安装目录)通过 Docker Volume 挂载到宿主机,实现数据持久化;
  3. 统一规划前后端项目路径,便于后续 Jenkins 自动化部署(若后续引入 CI/CD)。

本文基于 Linux 环境(CentOS/Ubuntu 通用),所有操作均在/root/docker/volumes目录下进行,确保路径统一可追溯。

二、基础工具容器化:从 Dockerfile 到镜像构建

2.1 NVM(Node 版本管理)容器化:支撑前端 Vue3 环境

NVM 用于管理多个 Node.js 版本,是前端项目(如 Vue3)开发的必备工具。我们通过自定义 Dockerfile 构建 NVM 镜像,避免直接在宿主机安装导致的版本冲突。

步骤 1:创建 NVM 工作目录与 Dockerfile

首先在宿主机创建 NVM 相关目录,用于存储 Dockerfile 和挂载 Volume:

# 创建NVM工具安装目录(后续Jenkins可直接引用此路径)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.nvmInstallation/nvm/v0.40.1
# 进入目录
cd /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.nvmInstallation/nvm/v0.40.1

步骤 2:编写 NVM 的 Dockerfile

custom-nvm-Dockerfile下载

Dockerfile 采用ubuntu:latest作为基础镜像,集成 wget/curl 工具,并通过腾讯云 CDN 加速 NVM 安装(解决 GitHub 访问慢问题):

# 创建自定义Dockerfile
vim custom-nvm-Dockerfile

dockerfile

# 构建阶段:基于Ubuntu最新版
FROM ubuntu:latest AS builder

LABEL maintainer="author <dadap>" \
      version="1.0" \
      description="基于Ubuntu的NVM镜像"


# 安装基础工具(wget用于下载,curl备用)
RUN apt-get update && apt-get install -y \
    wget \
    curl   

# 设置NVM安装目录(与宿主机Volume路径对应)
WORKDIR /usr/local/nvm/v0.40.1  

# 切换bash终端(NVM安装依赖bash)
SHELL ["/bin/bash", "-c"]

# 安装NVM(v0.40.1版本,使用腾讯云CDN加速)
# 可选镜像:Gitee镜像(https://gitee.com/mirrors/nvm/raw/v0.40.1/install.sh)
RUN wget -qO- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.1/install.sh | bash && \
    # 加载NVM环境变量
    source ~/.bashrc   

# 挂载日志目录(可选,便于排查安装问题)
VOLUME ["/var/log/nvm"]

# 保持容器运行(tail -f避免容器启动后退出)
CMD ["tail", "-f", "/dev/null"]

步骤 3:构建 NVM 镜像并启动容器

执行以下命令,构建镜像、启动容器,并验证容器状态:

# 构建NVM镜像(标签:custom_nvm:0.40.1)
docker build -t custom_nvm:0.40.1 -f ./custom-nvm-Dockerfile . && \  
# 启动容器(--restart always确保开机自启,-v挂载宿主机目录到容器)
docker run --name custom_nvm_0.40.1 --restart always -p 80:3000 \
  -v /root/docker/volumes/nvm/usr/local/nvm/v0.40.1:/usr/local/nvm/v0.40.1 \
  -d custom_nvm:0.40.1 && \  
# 查看所有容器(确认custom_nvm_0.40.1状态为Up)
docker ps -a

步骤 4:在容器内安装 Node.js 与 Vue CLI

进入 NVM 容器,安装前端所需的 Node.js 18.19.0(Vue3 推荐版本)和 Vue CLI:

# 进入NVM容器终端
docker exec -it custom_nvm_0.40.1 /bin/bash

# 容器内执行:

#安装Node.js 18.19.0并验证版本
nvm install 18.19.0 && node -v && npm -v

# 全局安装Vue CLI(前端项目构建工具)
npm install -g @vue/cli

# 验证全局安装的工具(确认@vue/cli存在)
npm list -g --depth 0

至此,前端所需的 Node.js 和 Vue CLI 环境已通过 Docker 容器化完成,后续前端项目可直接在该容器内构建。

2.2 Maven 环境配置:支撑后端项目构建

Maven 用于管理 Java 后端项目的依赖和构建流程,我们采用 “宿主机下载 + Volume 挂载” 的方式,避免重复下载依赖,同时便于后续 Jenkins 集成。

步骤 1:创建 Maven 目录与下载安装包

# 创建Maven工具安装目录(Jenkins后续可引用)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation
# 创建Maven本地仓库目录(持久化存储依赖,避免重复下载)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_repos

# 进入Maven安装目录
cd /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation

# 下载Maven 3.8.1(稳定版,从Apache官方镜像下载)
wget https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz

# 解压Maven(--strip-components 1:解压到当前目录,不创建额外子目录)
tar -zxf apache-maven-3.8.1-bin.tar.gz --strip-components 1

# 删除压缩包(节省空间)
rm -f apache-maven-3.8.1-bin.tar.gz

步骤 2:修改 Maven 配置文件(settings.xml)

关键配置:指定自定义本地仓库路径(与宿主机 Volume 对应),后续可追加阿里云镜像(加速依赖下载):

# 编辑Maven配置文件
vim /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/conf/settings.xml

<settings>标签内添加本地仓库配置:

<!-- 自定义本地仓库路径(与宿主机创建的Maven_repos目录一致) -->
<localRepository>/root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_repos</localRepository>

可选优化:添加阿里云 Maven 镜像(解决中央仓库访问慢问题),在<mirrors>标签内添加:

<mirrors>
    <!-- 阿里云公共仓库(主镜像,优先使用) -->
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

    <!-- 华为云镜像(作为中央仓库的备用镜像) -->
    <mirror>
        <id>huaweicloud</id>
        <mirrorOf>central</mirrorOf>
        <url>https://repo.huaweicloud.com/repository/maven/</url>
    </mirror>

    <!-- 网易163镜像(使用HTTPS协议避免被拦截) -->
    <mirror>
        <id>nexus-163</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus 163</name>
        <url>https://mirrors.163.com/maven/repository/maven-public/</url>
    </mirror>

    <!-- 腾讯云镜像(使用HTTPS协议避免被拦截) -->
    <mirror>
        <id>nexus-tencentyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus tencentyun</name>
        <url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
    </mirror>

    <!-- 移除默认HTTP拦截器,或保持但确保所有镜像使用HTTPS -->
    <!-- 
    <mirror>
        <id>maven-default-http-blocker</id>
        <mirrorOf>external:http:*</mirrorOf>
        <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
        <url>http://0.0.0.0/</url>
        <blocked>true</blocked>
    </mirror>
    -->
</mirrors>

2.3 JDK 11 容器化:支撑 Java 后端运行

Java 后端项目(如 Spring Boot)依赖 JDK,我们通过 Dockerfile 构建 JDK 11 镜像,确保后端环境一致性。

步骤 1:创建 JDK 目录与下载 JDK 安装包

# 创建JDK安装目录(Jenkins后续可引用)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.JAVA_JDKInstallation/jdk-11/
cd /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.JAVA_JDKInstallation/jdk-11

下载 JDK 11 压缩包(推荐使用华为云镜像,避免 Oracle 账号登录):

将下载的压缩包上传到当前目录(/root/docker/volumes/var/jenkins_home/tools/hudson.tasks.JAVA_JDKInstallation/jdk-11)。

步骤 2:编写 JDK 的 Dockerfile

JDK8-dockerfile下载

基于 CentOS 7.9(稳定版)构建,配置 JDK 环境变量和时区:

# 创建Dockerfile
vim Dockerfile

Dockerfile 内容:

# 基础镜像:CentOS 7.9(长期支持版,兼容性好)
FROM centos:7.9.2009

LABEL maintainer="author <dadap>" \
      version="1.0" \
      description="基于CentOS的JDK8镜像"

# 在容器内创建JDK安装目录
RUN mkdir /usr/local/java

# 将宿主机的JDK压缩包复制到容器并自动解压(需与实际压缩包名一致)
ADD ./jdk-11.0.28_linux-x64_bin.tar.gz /usr/local/java/

# 设置时区为上海(避免日志时间异常)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 配置JDK环境变量(需与解压后的JDK目录名一致)
ENV JAVA_HOME=/usr/local/java/jdk-11.0.28
ENV PATH $JAVA_HOME/bin:$PATH

# 挂载临时目录(Java程序常用/tmp存储临时文件)
VOLUME /tmp

# 保持容器运行(可选,若仅用于提供JDK环境,可省略此步)
CMD ["tail", "-f", "/dev/null"]

步骤 3:构建 JDK 镜像

# 构建JDK 11镜像(标签:centos-jdk:11)
docker build -t centos-jdk:11 -f ./Dockerfile .

# 验证镜像(确认centos-jdk:11存在)
docker images | grep centos-jdk

三、云端项目路径规划:统一前后端目录结构

为便于后续项目部署(如 Jenkins 拉取代码、构建产物输出),我们在宿主机规划统一的前后端项目根路径,所有路径均基于/root/docker/volumes(与前文工具目录统一)。

3.1 前端项目路径(Vue3)

前端项目(如 Vue3 博客前台 / 后台)存储在 NVM 容器挂载的 Volume 目录下,便于直接使用容器内的 Node.js 环境构建:

# 创建前端项目根路径(Vue3项目)
mkdir -p /root/docker/volumes/nvm/usr/local/nvm/v0.40.1/personal_blog/Vue3

后续操作:将 Vue3 项目代码拉取到该目录,进入 NVM 容器后执行npm install安装依赖,npm run build构建静态文件。

3.2 后端项目路径(API 服务)

后端项目(如 Spring Boot API 服务)存储在独立目录,便于使用 Maven 构建和 JDK 容器运行:

# 创建后端项目根路径(API服务)
mkdir -p /root/docker/volumes/blog/APIServer/personal_blog

后续操作:将后端代码拉取到该目录,通过 Maven(前文配置的宿主机 Maven)执行mvn clean package构建 JAR 包,再通过centos-jdk:11镜像运行 JAR 包。

四、总结与后续展望

本文完成了个人博客部署环境的核心搭建:

  1. 容器化工具:NVM(Node.js 18.19.0 + Vue CLI)、JDK 11 通过 Docker 镜像构建,实现环境隔离;
  2. 持久化配置:Maven 仓库、工具安装目录通过 Volume 挂载,避免数据丢失和重复下载;
  3. 统一路径规划:前后端项目目录结构化,为后续自动化部署奠定基础。

后续可扩展方向:

  1. 引入 Jenkins:基于本文配置的工具路径,搭建 Jenkins 实现代码拉取、自动构建(前端 npm build + 后端 mvn package);
  2. 部署 Nginx:通过 Docker 运行 Nginx 容器,代理前端静态文件和后端 API 服务,实现端口统一和反向代理;
  3. 数据库容器化:添加 MySQL/MongoDB Docker 容器,存储博客数据,并通过 Volume 挂载数据目录。

通过容器化技术,后续博客项目的部署将更高效、可移植,无需担心 “在我电脑上能运行” 的环境问题。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐