从测试服务器手动热部署到生产环境的实现

为了实现从测试服务器(192.168.0.255)手动热部署到生产环境(172.168.20.100),可以采用多种方法。以下是详细的步骤和最佳实践,帮助你实现这一目标。

1. 准备生产环境

确保生产环境上的 Docker 和 Docker Compose 已正确安装并配置。

  1. 安装 Docker

    bash

bash 复制代码
sudo apt-get update
sudo apt-get install docker.io

2.安装 Docker Compose

复制代码
bash
bash 复制代码
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')" /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3、启动并启用 Docker 服务

bash

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

2. 配置生产环境的 Dockerfile 和 docker-compose.yml

确保生产环境的 Dockerfiledocker-compose.yml 文件与测试环境一致,但禁用热部署功能。

Dockerfile 示例

dockerfile

bash 复制代码
FROM openjdk:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]

docker-compose.yml 示例

yaml

bash 复制代码
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ~/.m2:/root/.m2 # 挂载 Maven 仓库(可选)
    ports:
      - "8080:8080" # 映射应用端口
    environment:
      - SPRING_PROFILES_ACTIVE=prod
    depends_on:
      - db # 如果有依赖数据库等其他服务

3. 在测试服务器上构建 Docker 镜像

在测试服务器上构建 Docker 镜像,并将其推送到私有镜像仓库(如 Docker Hub、Harbor 等),或者直接通过 SSH 将镜像传输到生产服务器。

构建 Docker 镜像

bash

bash 复制代码
docker-compose build

标记镜像

bash

bash 复制代码
docker tag your-app:latest your-docker-registry/your-app:latest

推送镜像到私有仓库

bash

bash 复制代码
docker push your-docker-registry/your-app:latest

4. 从测试服务器传输镜像到生产服务器

如果选择不使用私有镜像仓库,可以直接通过 SSH 将镜像传输到生产服务器。

  1. 保存镜像为 tar 文件

    bash

bash 复制代码
docker save -o your-app.tar your-app:latest

2.通过 SSH 传输 tar 文件到生产服务器

bash

bash 复制代码
scp your-app.tar user@172.168.20.100:/path/to/remote

3.在生产服务器上加载镜像

bash

bash 复制代码
docker load -i /path/to/remote/your-app.tar

5. 在生产服务器上部署 Docker 容器

在生产服务器上使用 docker-compose 部署容器。

  1. 修改 docker-compose.yml 文件(如果需要):

    确保 docker-compose.yml 文件中的配置适用于生产环境。

  2. 启动 Docker 容器

    bash

bash 复制代码
docker-compose up -d

6. 手动热部署流程

为了实现手动热部署,可以编写一个脚本来简化流程。

手动热部署脚本示例

  1. 在测试服务器上构建并传输镜像

    bash

bash 复制代码
#!/bin/bash

# 构建 Docker 镜像
docker-compose build

# 标记镜像
docker tag your-app:latest your-docker-registry/your-app:latest

# 推送镜像到私有仓库
docker push your-docker-registry/your-app:latest

# 或者保存镜像为 tar 文件并通过 SSH 传输
# docker save -o your-app.tar your-app:latest
# scp your-app.tar user@172.168.20.100:/path/to/remote

2.在生产服务器上拉取并部署镜像

bash

bash 复制代码
#!/bin/bash

# 拉取镜像
docker pull your-docker-registry/your-app:latest

# 或者加载 tar 文件
# docker load -i /path/to/remote/your-app.tar

# 停止并移除现有容器
docker-compose down

# 启动新容器
docker-compose up -d

7. 使用 Git 和 CI/CD 流水线(可选)

为了更加自动化地管理代码部署,可以设置 Git 和 CI/CD 流水线。

  1. 初始化 Git 仓库

    • 在本地项目目录中初始化 Git 仓库。
    • 将代码推送到远程 Git 仓库(如 GitHub、GitLab 等)。
  2. 配置 CI/CD 流水线

    示例 GitLab CI 配置 (gitlab-ci.yml)

    yaml

    • 使用 Jenkins、GitLab CI、GitHub Actions 等工具配置流水线。
    • 设置流水线任务,在每次推送代码时自动构建镜像并部署到生产环境。
bash 复制代码
stages:
  - build
  - deploy

build:
  stage: build
  script:
    - docker-compose build
    - docker tag your-app:latest your-docker-registry/your-app:latest
    - docker push your-docker-registry/your-app:latest
  only:
    - main

deploy:
  stage: deploy
  script:
    - ssh user@172.168.20.100 "cd /path/to/remote/project && docker pull your-docker-registry/your-app:latest && docker-compose down && docker-compose up -d"
  only:
    - main

8. 注意事项

  • 安全性:确保生产环境的安全性,使用防火墙、SSH 密钥等手段保护服务器。
  • 备份:在部署新版本之前,确保对现有数据进行备份。
  • 日志监控:建议使用日志工具(如 ELK Stack)来监控容器内的日志输出,以便快速排查问题。
  • 性能测试:在生产环境中部署新版本之前,进行充分的性能测试,确保不会对现有服务造成影响。

通过以上步骤,你应该能够在测试服务器(192.168.0.255)上手动热部署到生产环境(172.168.20.100),从而实现高效的开发和部署流程。

相关推荐
喜欢吃豆2 分钟前
深入企业内部的MCP知识(三):FastMCP工具转换(Tool Transformation)全解析:从适配到增强的工具进化指南
java·前端·人工智能·大模型·github·mcp
用户1551733938837 分钟前
前后端处理 `multipart/form-data` 混合参数(实体对象+文件)方案
java
东阳马生架构10 分钟前
订单初版—3.支付和履约链路中的技术问题说明文档
java
留不住丨晚霞41 分钟前
说说SpringBoot常用的注解?
java·开发语言
华科云商xiao徐1 小时前
Java多线程爬虫动态线程管理实现
java·爬虫·数据挖掘
柒七爱吃麻辣烫1 小时前
八股文系列-----SpringBoot自动配置的流程
java·spring boot·rpc
M1A11 小时前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql
发仔1231 小时前
Dubbo介绍及示例用法
java·dubbo
goxingman1 小时前
关于使用idea打包的时候报错,Maven提示乱码java: �Ҳ�������
java·maven·intellij-idea
小马爱打代码2 小时前
领域驱动设计(DDD)重塑金融系统架构
金融·系统架构