首页 > 其他分享 >从测试服务器手动热部署到生产环境的实现

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

时间:2024-12-28 14:25:54浏览次数:3  
标签:compose app 手动 测试 镜像 服务器 docker your bash

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

1. 准备生产环境

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

  1. 安装 Docker

    bash

sudo apt-get update
sudo apt-get install docker.io

2.安装 Docker Compose

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

sudo systemctl start docker
sudo systemctl enable docker

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

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

Dockerfile 示例

dockerfile

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

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

docker-compose build

标记镜像

bash

docker tag your-app:latest your-docker-registry/your-app:latest

推送镜像到私有仓库

bash

docker push your-docker-registry/your-app:latest

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

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

  1. 保存镜像为 tar 文件

    bash

docker save -o your-app.tar your-app:latest

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

   bash

scp your-app.tar user@172.168.20.100:/path/to/remote

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

bash

docker load -i /path/to/remote/your-app.tar

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

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

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

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

  2. 启动 Docker 容器

    bash

docker-compose up -d

6. 手动热部署流程

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

手动热部署脚本示例

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

    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

#!/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 等工具配置流水线。
    • 设置流水线任务,在每次推送代码时自动构建镜像并部署到生产环境。
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),从而实现高效的开发和部署流程。

标签:compose,app,手动,测试,镜像,服务器,docker,your,bash
From: https://blog.csdn.net/xiaozukun/article/details/144682770

相关文章

  • 记手动粗浅管理多线程的工具类
    首先新建一个线程池管理工具类ThreadPoolManagerUtilimportlombok.extern.slf4j.Slf4j;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.ThreadFactory;importjava.util.concurrent.ThreadP......
  • 测试工程师的测试流程有哪些?都会用到哪些测试工具?
    测试工程师的测试流程主要包括以下几个阶段:需求分析:测试工程师与开发团队一起分析需求文档,了解软件的功能和目标。测试计划:制定测试计划,确定测试范围、测试目标、测试资源和时间安排等。测试用例设计:根据需求文档和设计文档,设计测试用例,覆盖软件的各个功能和场景。测试环境搭......
  • YaShanDB YAC国产数据库集群的安装体验与性能测试
    0.前言随着国产化进程的加速推进,众多关键业务领域正逐步开启国产化转型。例如,操作系统和数据库系统等核心组件,都在向国产解决方案迁移。相较于国外产品,国产化方案可以有效缓解“卡脖子”带来的问题,还能有效保障数据安全,提供更加定制化的服务。崖山数据库(YaShanDataBase)是深圳......
  • QEMU(Quick Emulator)是一个开源的虚拟化和仿真软件,旨在提供高效的硬件虚拟化和操作系统
    DownloadQEMU-QEMUQEMUforWindows–Installers(64bit) QEMU(QuickEmulator)是一个开源的虚拟化和仿真软件,旨在提供高效的硬件虚拟化和操作系统仿真功能。它能够让用户在不同的硬件架构上运行和测试操作系统,不仅支持x86架构,还支持ARM、PowerPC、SPARC、MIPS等多种......
  • AIGC性能测试用例与脚本
    提示词您是系统架构师,结合以上需求描述与功能点与场景,请编写性能测试用例,按性能测试用例设计原则,输出表格性能测试用例设计原则设计性能测试用例时应遵循一定的原则,以确保测试的覆盖率和有效性。以下是一些关键的设计原则:1.可复现性原则:测试用例应设计得足够详细,以确保在不同......
  • JMeter JSR223 Sampler 教程:性能测试的魔法棒
    JMeterJSR223Sampler教程:性能测试的魔法棒宝子们,今天咱要深入探索JMeter里超厉害的JSR223Sampler,它就像是一把万能钥匙,能打开性能测试的各种奇妙大门,让咱的测试变得超厉害!一、简介JSR223Sampler可是JMeter中的一个宝藏组件哦!它是基于JSR223规范打造的,这就......
  • 【硬件测试】基于FPGA的QPSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模
    1.算法仿真效果本文是之前写的文章 基于FPGA的QPSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpgaqpsk-CSDN博客 的硬件片内测试版本。 系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。 硬件ila测试......
  • 忘记云服务器密码后的重置方法
    我忘记了云服务器的登录密码,现在无法正常登录服务器进行操作。请问如何重置密码?是否有简单快捷的方法?答案:您好,忘记云服务器的登录密码确实会给您的工作带来不便。为了帮助您快速恢复对服务器的控制,以下是详细的重置密码步骤:通过控制面板重置密码:大多数云服务提供商都提供了......
  • 请问云服务器数据库偶尔自动关闭的原因及解决方案
    最近两天,我的云服务器上的数据库偶尔会自动关闭。这种情况导致了网站无法正常访问,影响了用户体验。请问这是什么原因引起的?是否有根本性的解决办法?答案:您好,根据您的描述,云服务器上的数据库偶尔自动关闭可能是由多种原因引起的。为了帮助您更好地理解并解决问题,我们将从以下几个......
  • 云服务器数据库偶尔自动关闭的原因及解决方案
    您好,关于您提到的云服务器数据库偶尔自动关闭的问题,我们进行了详细的排查和分析。根据您的描述,数据库在运行过程中偶尔会自动关闭,这可能由多种原因引起。为了帮助您更好地理解并解决这个问题,我们将从以下几个方面进行详细说明。内存不足导致数据库关闭:数据库在运行时需要占用......