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

为了实现从测试服务器(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

确保生产环境的 Dockerfile 和 docker-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),从而实现高效的开发和部署流程。

相关推荐
小白鸽i8 分钟前
【Linux】已安装的软件如何重新构建deb安装包?
linux·运维·服务器
Wang's Blog9 分钟前
Java 项目实战: 交友项目 - Dubbo 启动检查
java·dubbo·交友
零基础12315 分钟前
权限管理怎么做?从“资格”与“空间”双维度设计一套可落地的权限体系
java·服务器·数据库
starzy199021 分钟前
Flink Task 调度任务深度剖析:从调度策略到故障恢复的完整链路
java·大数据·flink
zxanz124 分钟前
该怎么去选择 SSL 证书来使用?有什么方法不
服务器·网络协议·ssl
无风听海27 分钟前
深入理解.NET中的 Lazy<T>
服务器·php·.net
开开心心_Every28 分钟前
文件查重软件批量删除重复文件释放空间
java·开发语言·c#·计算机外设·ocr·excel·perl
Wang's Blog34 分钟前
Java 项目实战: 交友项目 - 技术架构与选型剖析
java·架构·交友
我是大猴子35 分钟前
一些八股和限流措施
java
认真的小羽❅44 分钟前
ThreadLocal 在虚拟线程间要小心
java·开发语言·jvm