原创

微服务blog项目docker部署文档

微服务blog项目docker部署文档

一、环境准备

1.服务器准备
序号ip系统版本硬件配置
1192.168.17.xcentos72CPU/4G内存/30G存储
2.初始化系统

如果系统未做初始化请做初始化vim init.sh 将以下脚本写入到init.sh里面

#!/bin/bash

# 交互式网络配置脚本
echo "======================= 系统初始化配置 ======================="

# 函数:获取用户输入
get_input() {
    local prompt="$1"
    local default_value="$2"
    local user_input
    
    if [ -n "$default_value" ]; then
        read -p "$prompt (默认: $default_value): " user_input
        if [ -z "$user_input" ]; then
            user_input="$default_value"
        fi
    else
        read -p "$prompt: " user_input
    fi
    
    echo "$user_input"
}

# 函数:验证IP地址格式
validate_ip() {
    local ip="$1"
    local regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
    
    if [[ $ip =~ $regex ]]; then
        IFS='.' read -r -a octets <<< "$ip"
        for octet in "${octets[@]}"; do
            if (( octet < 0 || octet > 255 )); then
                return 1
            fi
        done
        return 0
    else
        return 1
    fi
}

# 函数:验证子网掩码格式
validate_netmask() {
    local mask="$1"
    local regex="^255\.255\.255\.[0-9]+$"
    
    if [[ $mask =~ $regex ]] || [[ "$mask" =~ ^[0-9]{1,2}$ ]]; then
        return 0
    else
        return 1
    fi
}

# 显示当前网络接口信息
echo "当前网络接口信息:"
echo "---------------------------------------------------"
ip addr show | grep -E "^[0-9]+:|inet " | grep -v "127.0.0.1"
echo "---------------------------------------------------"

# 设置要分配的IP地址、子网掩码和默认网关
echo "正在配置网络参数..."
echo ""

# 获取网卡名称
interface_list=$(ls /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | xargs -n1 basename | sed 's/ifcfg-//' | tr '\n' ' ')
default_interface=""
if [ -n "$interface_list" ]; then
    default_interface=$(echo "$interface_list" | awk '{print $1}')
fi

# 交互式输入网络参数
while true; do
    network_interface=$(get_input "请输入网卡名称" "$default_interface")
    if [ -n "$network_interface" ]; then
        break
    fi
    echo "错误: 网卡名称不能为空!"
done

# 检查是否有现有配置
networkfile="/etc/sysconfig/network-scripts/ifcfg-$network_interface"
if [ -f "$networkfile" ]; then
    echo ""
    echo "发现现有网络配置:"
    echo "---------------------------------------------------"
    grep -E "^(IPADDR|NETMASK|GATEWAY|DNS|BOOTPROTO)=" "$networkfile" 2>/dev/null || echo "(无配置)"
    echo "---------------------------------------------------"
    
    read -p "是否覆盖现有配置? (y/n, 默认: n): " overwrite
    if [[ ! "$overwrite" =~ ^[Yy]$ ]]; then
        echo "已取消配置,使用现有配置。"
    else
        # 备份原配置文件
        backup_file="${networkfile}.backup.$(date +%Y%m%d%H%M%S)"
        cp "$networkfile" "$backup_file"
        echo "已备份原配置文件到: $backup_file"
    fi
fi

# 获取IP地址
while true; do
    ip_address=$(get_input "请输入IP地址" "192.168.137.140")
    if validate_ip "$ip_address"; then
        break
    else
        echo "错误: IP地址格式不正确! 请重新输入。"
    fi
done

# 获取子网掩码
while true; do
    subnet_mask=$(get_input "请输入子网掩码 (格式: 255.255.255.0 或 CIDR如 24)" "255.255.255.0")
    if validate_netmask "$subnet_mask"; then
        break
    else
        echo "错误: 子网掩码格式不正确! 请重新输入。"
    fi
done

# 获取默认网关
while true; do
    # 自动生成默认网关建议(通常是IP地址的第一个可用地址)
    suggested_gateway=$(echo "$ip_address" | sed 's/[0-9]*$/2/')
    default_gateway=$(get_input "请输入默认网关" "$suggested_gateway")
    if validate_ip "$default_gateway"; then
        break
    else
        echo "错误: 网关地址格式不正确! 请重新输入。"
    fi
done

# 获取DNS服务器
dns1=$(get_input "请输入主DNS服务器" "114.114.114.114")
dns2=$(get_input "请输入备DNS服务器" "223.5.5.5")

# 确认配置
echo ""
echo "=============== 请确认以下网络配置 ==============="
echo "网卡名称:     $network_interface"
echo "IP地址:       $ip_address"
echo "子网掩码:     $subnet_mask"
echo "默认网关:     $default_gateway"
echo "主DNS:        $dns1"
echo "备DNS:        $dns2"
echo "=================================================="
echo ""

read -p "确认应用以上配置? (y/n, 默认: n): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
    echo "配置已取消!"
    exit 1
fi

# 关闭防火墙
echo "正在关闭防火墙..."
systemctl stop firewalld 2>/dev/null && systemctl disable firewalld 2>/dev/null && echo "防火墙已关闭" || echo "警告: 防火墙关闭失败或未安装"

# 关闭NetworkManager
echo "正在关闭NetworkManager..."
systemctl stop NetworkManager 2>/dev/null && systemctl disable NetworkManager 2>/dev/null && echo "NetworkManager已关闭" || echo "警告: NetworkManager关闭失败或未安装"

# 关闭SELinux
echo "正在关闭SELinux..."
setenforce 0 2>/dev/null
if [ -f /etc/selinux/config ]; then
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    sed -i 's/^SELINUX=permissive/SELINUX=disabled/g' /etc/selinux/config
    echo "SELinux已禁用"
else
    echo "SELinux配置文件不存在,跳过"
fi

# 关闭SSHD的DNS验证
echo "正在关闭SSHD的DNS验证..."
if [ -f /etc/ssh/sshd_config ]; then
    # 备份原配置文件
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d%H%M%S)
    
    # 修改配置
    sed -i 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
    sed -i 's/^UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
    
    # 添加配置项(如果不存在)
    if ! grep -q '^UseDNS' /etc/ssh/sshd_config; then
        echo "UseDNS no" >> /etc/ssh/sshd_config
    fi
    
    # 重启服务
    systemctl restart sshd 2>/dev/null && echo "SSHD配置已更新" || echo "警告: SSHD服务重启失败"
else
    echo "警告: SSH配置文件不存在,跳过配置"
fi

# 配置Yum源
echo "正在配置Yum源..."
# 备份原有源
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null

# 下载阿里云CentOS源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 2>/dev/null
if [ $? -eq 0 ]; then
    echo "CentOS-Base.repo下载成功"
else
    echo "警告: CentOS-Base.repo下载失败,请检查网络连接"
fi

# 下载阿里云EPEL源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 2>/dev/null
if [ $? -eq 0 ]; then
    echo "epel.repo下载成功"
else
    echo "警告: epel.repo下载失败,请检查网络连接"
fi

# 清理缓存并生成新缓存
yum clean all 2>/dev/null
yum makecache 2>/dev/null && echo "Yum缓存已更新" || echo "警告: Yum缓存更新失败"

# 配置网卡
echo "正在配置网卡 $network_interface ..."

# 检查并获取UUID
uuid_line=""
if [ -f "$networkfile" ]; then
    uuid_line=$(grep '^UUID=' "$networkfile")
fi

# 如果没有找到UUID,则生成一个新的
if [ -z "$uuid_line" ]; then
    uuid_line="UUID=\"$(uuidgen)\""
fi

# 清空现有配置文件
> "$networkfile"

# 编写ifcfg文件
cat >> "$networkfile" <<EOF
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="$network_interface"
$uuid_line
DEVICE="$network_interface"
ONBOOT="yes"
IPADDR=$ip_address
NETMASK=$subnet_mask
GATEWAY=$default_gateway
DNS1=$dns1
DNS2=$dns2
EOF

echo "网络配置文件已生成: $networkfile"
echo ""

# 安装基础软件包
echo "正在安装基础软件包..."
yum -y install wget lrzsz unzip gzip telnet vim 2>/dev/null || echo "警告: 软件包安装失败,请检查yum源配置"

# 配置基础环境变量
echo "配置基础环境变量..."

# 备份原配置文件
cp /etc/profile /etc/profile.backup.$(date +%Y%m%d%H%M%S) 2>/dev/null
cp ~/.vimrc ~/.vimrc.backup.$(date +%Y%m%d%H%M%S) 2>/dev/null 2>/dev/null

# 追加环境变量配置
if ! grep -q "if \[ \$(id -u) == 0 \]; then" /etc/profile; then
    cat >> /etc/profile <<EOF

if [ \$(id -u) == 0 ]; then
export PS1='[\033[31;1m\]\u\[\033[m\]@\h \w]# '
else
export PS1='[\033[34;1m\]\u\[\033[m\]@\h \w]\$ '
fi
alias ll='ls -lh --color=auto'
alias grep='grep --color'
alias free='free -m'
alias df='df -h'
alias du='du -h'
alias vi='vim'
EOF
fi

# 配置vimrc
cat > ~/.vimrc <<EOF
"设置高亮
syntax on
"显示行号
set number
"自动缩进功能
set autoindent
"启用鼠标支持
"set mouse=a
"vim新打开.sh文件自动添加一下内容
autocmd BufNewFile *.sh exec ":call SetComment()"
func SetComment()
     if expand("%:e")=='sh'
         call setline(1,'#!/bin/bash')
         call setline(2,'#Author:     xxx')
         call setline(3,'#Create time:'.strftime("%Y-%m-%d"))
     endif
endfunc
EOF

# 应用环境变量
source /etc/profile 2>/dev/null

# 重启网络服务
echo "正在重启网络服务..."
if systemctl restart network 2>/dev/null; then
    echo "网络服务重启成功!"
else
    echo "尝试使用其他方式重启网络..."
    ifdown "$network_interface" 2>/dev/null && ifup "$network_interface" 2>/dev/null || echo "网络重启失败,请手动检查"
fi

echo ""
echo "======================= 配置完成 ======================="
echo "网络配置摘要:"
echo "IP地址:       $ip_address"
echo "子网掩码:     $subnet_mask"
echo "默认网关:     $default_gateway"
echo "DNS服务器:    $dns1, $dns2"
echo "配置文件:     $networkfile"
echo ""
echo "当前网络状态:"
echo "---------------------------------------------------"
ip addr show "$network_interface" 2>/dev/null | grep "inet " || echo "警告: 无法获取IP地址,请检查配置"
echo "---------------------------------------------------"
echo ""
echo "请使用以下命令测试网络连接:"
echo "1. ping $default_gateway"
echo "2. ping 114.114.114.114"
echo "3. ping www.baidu.com"
echo ""
echo "脚本执行完毕!"

给脚本执行权限

chmod +x init.sh
#运行脚本
./init.sh

二、项目解析

blog项目是使用Java开发,使用了前后端分离,前端使用vue,后端使用springcloud微服务框架进行开发

项目部署环境:jdk8+mysql5.7+redis5.0+nacos+docker。注意:如果部署项目中,需要mysql数据库或者其他数据如redis等中间件时,我们应该优先运行中间件

三、docker部署

1.执行自动化安装脚本

将以下脚本写入到install-docker.sh中

#!/bin/bash

# Docker自动化部署脚本
# 功能:在CentOS/RHEL系统上自动安装Docker CE 20.10.*
# 注意:本脚本需要root权限执行

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # 无颜色

# 版本配置
DOCKER_VERSION="20.10.*"

# 日志文件
LOG_FILE="/tmp/docker_install_$(date +%Y%m%d_%H%M%S).log"

# 函数:打印彩色信息
print_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 函数:检查命令执行结果
check_result() {
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}[SUCCESS]${NC} $1"
    else
        echo -e "${RED}[FAILED]${NC} $1"
        exit 1
    fi
}

# 函数:记录日志
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 检查是否是root用户
check_root() {
    if [[ $EUID -ne 0 ]]; then
        print_error "此脚本需要root权限运行!"
        print_error "请使用: sudo bash $0"
        exit 1
    fi
}

# 主安装函数
install_docker() {
    log "开始Docker安装过程..."
    
    # 1. 卸载旧版本Docker
    print_info "步骤1: 卸载旧版本Docker..."
    log "卸载旧版本Docker"
    yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine 2>/dev/null || true
    
    check_result "卸载旧版本完成"
    
    # 2. 安装yum工具
    print_info "步骤2: 安装yum-utils工具..."
    log "安装yum-utils"
    yum install -y yum-utils
    check_result "yum-utils安装完成"
    
    # 3. 添加Docker镜像源
    print_info "步骤3: 添加阿里云Docker镜像源..."
    log "添加Docker CE仓库"
    yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    check_result "镜像源添加完成"
    
    # 4. 更新yum缓存
    print_info "步骤4: 更新yum缓存..."
    log "更新yum缓存"
    yum makecache fast
    check_result "yum缓存更新完成"
    
    # 5. 安装Docker指定版本
    print_info "步骤5: 安装Docker CE ${DOCKER_VERSION}..."
    log "安装Docker CE ${DOCKER_VERSION}"
    yum install -y docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} containerd.io
    check_result "Docker安装完成"
    
    # 6. 创建配置目录
    print_info "步骤6: 创建Docker配置目录..."
    log "创建/etc/docker目录"
    mkdir -p /etc/docker
    check_result "目录创建完成"
    
    # 7. 配置镜像加速器
    print_info "步骤7: 配置Docker镜像加速器..."
    cat > /etc/docker/daemon.json << 'EOF'
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
    
    check_result "镜像加速器配置完成"
    
    # 8. 启动Docker服务
    print_info "步骤8: 启动Docker服务并设置开机自启..."
    log "启动Docker服务"
    systemctl start docker
    check_result "Docker服务启动"
    
    log "设置Docker开机自启"
    systemctl enable docker
    check_result "Docker开机自启设置完成"
    
    # 9. 验证安装
    print_info "步骤9: 验证Docker安装..."
    log "验证Docker版本"
    DOCKER_VER=$(docker --version 2>/dev/null || echo "未安装")
    DOCKER_COMPOSE_VER=$(docker-compose --version 2>/dev/null || echo "未安装")
    
    echo "========================================"
    print_info "安装完成!"
    print_info "Docker版本: $DOCKER_VER"
    print_info "Docker服务状态: $(systemctl is-active docker)"
    print_info "开机自启状态: $(systemctl is-enabled docker)"
    echo "========================================"
    print_info "日志文件: $LOG_FILE"
    
    # 10. 显示使用提示
    echo ""
    print_warn "使用说明:"
    echo "1. 运行容器: docker run hello-world"
    echo "2. 查看版本: docker --version"
    echo "3. 查看镜像: docker images"
    echo "4. 重启服务: systemctl restart docker"
    
    log "Docker安装完成,版本: $DOCKER_VER"
}

# 主函数
main() {
    echo "========================================"
    echo "    Docker 自动化安装脚本"
    echo "    目标版本: ${DOCKER_VERSION}"
    echo "    系统要求: CentOS/RHEL 7+"
    echo "========================================"
    echo ""
    
    # 检查root权限
    check_root
    
    # 检查系统
    if [ ! -f /etc/redhat-release ]; then
        print_warn "检测到非CentOS/RHEL系统,可能不兼容!"
        read -p "是否继续? (y/n): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 0
        fi
    fi
    
    # 开始安装
    install_docker
}

# 执行主函数
main "$@"
2.安装docker-compose
#直接上传文件夹资源中的docker-compose文件到/usr/local/bin/下即可
#给docker-compose一个执行权限
chmod +x /usr/local/bin/docker-compose

四、镜像下载

提前准备好我们需要的镜像

docker pull nginx:1.18.0
docker pull mysql:5.7
docker pull openjdk:8u111-alpine
docker pull redis:5.0-alpine
docker pull nacos/nacos-server:2.0.2

五、mysql部署

1.创建目录上传资源
mkdir -p /opt/mysql/data/mysql
mkdir -p /opt/mysql/etc/

上传以下配置文件到/opt/mysql/etc/

#客户端设置
[client]

#mysql服务配置
[mysqld]
#服务器监听端口,默认为3306
port=3306
#数据存储位置
datadir=/var/lib/mysql
#Unix套接字文件路径
socket=/var/lib/mysql/mysql.sock
#MySQL服务唯一标识,开启二进制日志,做主从时需要
server-id=1
log-bin=mysql-bin
#不会跟随符号链接
symbolic-links=0
#服务进程pid文件路径
pid-file=/var/run/mysqld/mysqld.pid
#mysql字符集设置
character_set_server=utf8mb4
#mysql比较规则设置
collation_server=utf8mb4_general_ci
2.运行mysql容器编排
#vim docker-compose.yml
version: '2.1'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    expose:
      - 3306
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "Admin123." #mysql密码
      MYSQL_ALLOW_EMPTY_PASSWORD: "no" #是否允许密码为空
      TZ: Asia/Shanghai
    restart: always
    volumes:
      - /opt/mysql/data/mysql:/var/lib/mysql
      - /opt/mysql/etc/my.cnf:/etc/my.cnf
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
    healthcheck:
      test: ["CMD", "mysql", "-u", "root", "-pAdmin123.", "-e", "SELECT 1"]
      interval: 30s
      timeout: 10s
      retries: 5

六、nacos部署

1.创建目录
2.运行docker-compose
version: "3.8"
services:
  nacos:
    image: nacos/nacos-server:2.0.2
    container_name: nacos
    restart: always
    ports:
      - "8848:8848"   # 主服务端口
      - "9848:9848"   # 用于gRPC通信
      - "7848:7848"   # 用于Jraft选举
    environment:
      # 设置为单机模式
      - MODE=standalone
      # 数据库配置 (需替换为你的实际配置)
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.17.138
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=Admin123.
      # JVM调优参数 (可根据服务器内存调整)
      - JVM_XMS=512m
      - JVM_XMX=512m
      - JVM_XMN=256m
    volumes:
      # 日志持久化
      - ./logs/:/home/nacos/logs
      # 数据持久化 (如需)
      # - ./data/:/home/nacos/data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

七、前端部署

1.创建目录
mkdir -p /opt/nginx
mkdir -p /opt/nginx/html #将前端代码上传到这里
mkdir -p /opt/nginx/conf
mkdir -p /opt/nginx/conf/conf.d

上传前端代码和配置文件

# vim /opt/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # Gzip全局配置(建议放在这里而不是server块内)
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
    
    # 上传文件大小限制(根据需要添加)
    client_max_body_size 100M;

    server {
        listen 80;
        server_name localhost;

        # 前端静态资源
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        # API反向代理到后端网关
        location /api/ {
            proxy_pass http://localhost:8080/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_set_header X-Forwarded-Proto $scheme;
            
            # 代理超时设置
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            
            # 跨域配置
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
            add_header Access-Control-Expose-Headers 'Authorization';
            
            if ($request_method = 'OPTIONS') {
                add_header Access-Control-Max-Age 1728000;
                add_header Content-Type 'text/plain; charset=utf-8';
                add_header Content-Length 0;
                return 204;
            }
        }

        # 文件上传路径代理
        location /uploads/ {
            proxy_pass http://localhost:8080/uploads/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            # 上传文件大小限制
            client_max_body_size 100M;
        }

        # 错误页面配置
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
    
    # 放在http块末尾
    include /etc/nginx/conf.d/*.conf;
}

2.运行dokcer-compose
# vim docker-compose.yml
version: '2.1'
services:
  nginx:
    image: nginx:1.18.0
    container_name: nginx
    restart: always
    environment:
      TZ: Asia/Shanghai
    network_mode: host
    volumes:
      - /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /opt/nginx/conf/conf.d:/etc/nginx/conf.d
      - /opt/nginx/html:/usr/share/nginx/html
      - /opt/nginx/logs:/var/log/nginx

八、redis部署

1.创建目录上传包
mkdir -p /opt/redis && cd /opt/redis
mkdir -p /opt/redis/data

2.运行dokcer-compose
version: '2.1'
services:
  redis:
    image: redis:5.0-alpine  # 使用官方Alpine镜像(轻量)
    container_name: redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - /opt/redis/data:/data  # 持久化数据存储
    # 可选的配置文件挂载(需要先创建redis.conf)
    # - ./redis.conf:/usr/local/etc/redis/redis.conf
    environment:
      - TZ=Asia/Shanghai  # 时区设置
    command: redis-server --appendonly yes  # 启用AOF持久化 

九、后端部署

1.创建数据库导入数据

创建blog数据库,把数据导入到数据库中

2.项目上传
mkdir -p /opt/web/{blog-gateway,blog-home,blog-admin}
#切换到对应目录上传对应的包

3.修改配置文件

修改每一个java对应的配置文件

4.网关服务部署

网关的dockerfile

#vim /opt/web/blog-gateway/Dockerfile
FROM openjdk:8u111-alpine
MAINTAINER heber<heber@123.com>
# 设置工作目录为 /app
WORKDIR /app
# 将当前目录下的 target/所有东西复制到工作目录
COPY ./*.yml /app/
COPY ./*.jar /app/
# 定义容器启动后执行的命令,运行 Java 应用
CMD ["java", "-jar", "/app/blog-gateway-1.0.0.jar"]

网关镜像制作

docker build -t blog-gateway:1.0.1 .

网关的docker-compose

version: '2.1'
services:
  blog-gateway:
    image: blog-gateway:1.0.1
    container_name: blog-gateway
    restart: always
    environment:
      TZ: Asia/Shanghai
    network_mode: host

查看日志

docker logs -f 容器名
#nacos注册中心进行验证

5.前台服务部署

前台的dockerfile

#vim /opt/web/blog-home/Dockerfile
FROM openjdk:8u111-alpine
MAINTAINER heber<heber@123.com>
# 设置工作目录为 /app
WORKDIR /app
# 将当前目录下的 target/所有东西复制到工作目录
COPY ./*.yml /app/
COPY ./*.jar /app/
# 定义容器启动后执行的命令,运行 Java 应用
CMD ["java", "-jar", "/app/blog-home-1.0.0.jar"]

前台镜像制作

docker build -t blog-home:1.0.1 .

前台的docker-compose

version: '2.1'
services:
  blog-home:
    image: blog-home:1.0.1
    container_name: blog-home
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "8081:8081"

查看日志

docker logs -f 容器名
#nacos注册中心进行验证

6.后台服务部署

后台的dockerfile

#vim /opt/web/blog-admin/Dockerfile
FROM openjdk:8u111-alpine
MAINTAINER heber<heber@123.com>
# 设置工作目录为 /app
WORKDIR /app
# 将当前目录下的 target/所有东西复制到工作目录
COPY ./*.yml /app/
COPY ./*.jar /app/
# 定义容器启动后执行的命令,运行 Java 应用
CMD ["java", "-jar", "/app/blog-admin-1.0.0.jar"]

后台镜像制作

docker build -t blog-admin:1.0.1 .

后台的docker-compose

version: '2.1'
services:
  blog-admin:
    image: blog-admin:1.0.1
    container_name: blog-admin
    restart: always
    environment:
      TZ: Asia/Shanghai
    network_mode: host

查看日志

docker logs -f 容器名
#nacos注册中心进行验证

7.接口验证

1.前台页面blog数据

#get方法
http://ip:8080/api/home/articles