从测试服务器手动热部署到生产环境的实现
为了实现从测试服务器(192.168.0.255)手动热部署到生产环境(172.168.20.100),可以采用多种方法。以下是详细的步骤和最佳实践,帮助你实现这一目标。
1. 准备生产环境
确保生产环境上的 Docker 和 Docker Compose 已正确安装并配置。
-
安装 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: Dockerfilevolumes:- ~/.m2:/root/.m2 # 挂载 Maven 仓库(可选)ports:- "8080:8080" # 映射应用端口environment:- SPRING_PROFILES_ACTIVE=proddepends_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 将镜像传输到生产服务器。
-
保存镜像为 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 部署容器。
-
修改
docker-compose.yml文件(如果需要):确保
docker-compose.yml文件中的配置适用于生产环境。 -
启动 Docker 容器:
bash
docker-compose up -d
6. 手动热部署流程
为了实现手动热部署,可以编写一个脚本来简化流程。
手动热部署脚本示例:
-
在测试服务器上构建并传输镜像:
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 流水线。
-
初始化 Git 仓库:
- 在本地项目目录中初始化 Git 仓库。
- 将代码推送到远程 Git 仓库(如 GitHub、GitLab 等)。
-
配置 CI/CD 流水线:
示例 GitLab CI 配置 (
gitlab-ci.yml):yaml
- 使用 Jenkins、GitLab CI、GitHub Actions 等工具配置流水线。
- 设置流水线任务,在每次推送代码时自动构建镜像并部署到生产环境。
stages:- build- deploybuild:stage: buildscript:- docker-compose build- docker tag your-app:latest your-docker-registry/your-app:latest- docker push your-docker-registry/your-app:latestonly:- maindeploy:stage: deployscript:- 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),从而实现高效的开发和部署流程。
相关文章:
从测试服务器手动热部署到生产环境的实现
为了实现从测试服务器(192.168.0.255)手动热部署到生产环境(172.168.20.100),可以采用多种方法。以下是详细的步骤和最佳实践,帮助你实现这一目标。 1. 准备生产环境 确保生产环境上的 Docker 和 Docker …...
【c++高阶DS】图
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 目录 01.并查集02.图的介绍03.图的存储结构03.1.邻接矩阵03.2.邻接表03.3.矩阵版本代码实现03.4.邻接表版本代码实现 完整代码: 01.并查集 在一些应用问题中,需要将…...
React第十八节 useEffect 用法使用技巧注意事项详解
1、概述 useEffect 是React中一个用于 将组件与外部系统同步的 Hook;在函数式组件中处理副作用函数的 Hook,用于替代类式组件中的生命周期函数; 可以在副作用函数中 实现以下操作: a、请求接口,获取后台提供数据 b、操…...
C++ 指针基础:开启内存操控之门
1. 指针为何如此重要 在 C 编程领域,指针堪称一项极为关键的特性。它赋予了程序员直接访问和操控内存的能力,这使得程序在处理复杂数据结构与优化性能时具有更高的灵活性。想象一下,在编写大型程序时,高效地管理内存资源是多么重要…...
Nginx的stream模块代理四层协议TCP的流量转发
Nginx的stream模块是一个功能强大的工具,专门用于处理四层协议(即网络层和传输层,如TCP和UDP)的流量。以下是对Nginx stream模块的详细解析: 一、基本功能 Nginx的stream模块主要用于实现TCP和UDP数据流的代理、转发…...
UE5 渲染管线 学习笔记
兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D...
Echarts连接数据库,实时绘制图表详解
文章目录 Echarts连接数据库,实时绘制图表详解一、引言二、步骤一:环境准备与数据库连接1、环境搭建2、数据库连接 三、步骤二:数据获取与处理1、查询数据库2、数据处理 四、步骤三:ECharts图表配置与渲染1、配置ECharts选项2、动…...
Electron 学习笔记
目录 一、安装和启动electron 1. 官网链接 2. 根据文档在控制台输入 3. 打包必填 4. 安装electron开发依赖 5. 在开发的情况下打开应用 6. 修改main为main.js,然后创建main.js 7.启动 二、启动一个窗口 1. main.js 2. index.html 3. 隐藏菜单栏 三、其他…...
Debian 12 安装配置 fail2ban 保护 SSH 访问
背景介绍 双十一的时候薅羊毛租了台腾讯云的虚机, 是真便宜, 只是没想到才跑了一个月, 系统里面就收集到了巨多的 SSH 恶意登录失败记录. 只能说, 互联网真的是太不安全了. 之前有用过 fail2ban 在 CentOS 7 上面做过防护, 不过那已经是好久好久之前的故事了, 好多方法已经不…...
http反向代理
通过反向代理实现访问biying,目前访问一些网站需要绕过cloudfare还没有解决,代码如下: from fastapi import FastAPI, Request from fastapi.responses import StreamingResponse import httpx import uvicorn import logging# 设置日志 logging.basicConfig(level=logging.…...
java12.24日记
运算符: 算术运算符: 顾名思义进行算数运算的 多为:四则运算,加一个取余 ,-,*,/以及 %(取余) 而外的:自增 以及自减--,对原数进行1或者-1 i…...
vue中proxy代理配置(测试一)
接口地址:http://jsonplaceholder.typicode.com/posts 1、配置一(代理没起作用) (1)设置baseURL为http://jsonplaceholder.typicode.com (2)proxy为 ‘/api’:’ ’ (3&a…...
[OpenGL]使用TransformFeedback实现粒子效果
一、简介 本文介绍了如何使用 OpenGL 中的 Transform Feedback 实现粒子效果,最终可以实现下图的效果: 本文的粒子系统实现参考了modern-opengl-tutorial, ogldev-tutorial28 和 粒子系统–喷泉 [OpenGL-Transformfeedback]。 二、使用 TransformFeed…...
GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台
GoIoT 是基于Gin 的开源分布式物联网(IoT)开发平台,用于快速开发,部署物联设备接入项目,是一套涵盖数据生产、数据使用和数据展示的解决方案。 GoIoT 开发平台,它是一个企业级物联网平台解决方案ÿ…...
用 gdbserver 调试 arm-linux 上的 AWTK 应用程序
很多嵌入式 linux 开发者都能熟练的使用 gdb/lldb 调试应用程序,但是还有不少朋友在调试开发板上的程序时,仍然在使用原始的 printf。本文介绍一下使用 gdbserver 通过网络调试开发板上的 AWTK 应用程序的方法,供有需要的朋友参考。 1. 下载 …...
攻防世界web第一题
最近开始学习网络安全的相关知识,开启刷题,当前第一题 题目为攻防世界web新手题 这是题目 翻译:在这个训练挑战中,您将了解 Robots_exclusion_standard。网络爬虫使用 robots.txt 文件来检查是否允许它们对您的网站或仅网站的一部…...
轮播图带详情插件,插件
超级好用的轮播图 介绍访问地址参数介绍使用方法(简单使用,参数结构点击链接查看详情)图片展示 介绍 video(15) 带有底部物品介绍以及价格的轮播图组件,持续维护,uniApp插件,直接下载填充数据就可以在项目里…...
gesp(三级)(14)洛谷:B4039:[GESP202409 三级] 回文拼接
gesp(三级)(14)洛谷:B4039:[GESP202409 三级] 回文拼接 题目描述 一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如, aabaa \texttt{aabaa} aabaa 和...
ISO17025最新认证消息
ISO17025认证是国际上广泛认可的实验室管理标准,全称为《检测和校准实验室能力的通用要求》,由国际标准化组织(ISO)和国际电工委员会(IEC)联合发布。以下是对ISO17025最新认证消息及相关内容的归纳…...
ASP.NET Core Web API 控制器
文章目录 一、基类:ControllerBase二、API 控制器类属性三、使用 Get() 方法提供天气预报结果 在深入探讨如何编写自己的 PizzaController 类之前,让我们先看一下 WeatherController 示例中的代码,了解它的工作原理。 在本单元中,…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
