当前位置: 首页 > news >正文

【DevOps系列】构建Devops系统

开始介绍

那就着手开始干吧。先介绍一下我们的工具链。

主要工具:GitHub、Jenkins、Kubernetes、Ansible、Prometheus和JMeter

着手动

1. 设置GitHub作为源代码仓库

  1. 登录GitHub: 打开浏览器并访问 https://github.com,使用您的GitHub账户登录。

  2. 创建新的仓库: 登录后,您应该能看到GitHub的主页。点击页面右上角的 "+" 符号,然后选择 "New repository" 或直接在导航栏中找到 "Repositories" 并点击 "New"。

  3. 填写仓库信息: 在新弹出的页面中,您会被要求填写一些关于仓库的基本信息:

    • Repository name: 输入仓库的名称。这将是您的项目在GitHub上的标识。
    • Description: 可选地,您可以为仓库添加一个描述,解释其用途或内容。
    • Visibility: 选择仓库的可见性。您可以选择 "Public"(公开)或 "Private"(私有)。私有仓库需要付费订阅。
    • Add a README file: 选中此选项将自动为您的仓库添加一个README文件,这是仓库的默认说明文件。
    • Add .gitignore: 如果适用,可以选择添加一个.gitignore文件,这将帮助您忽略特定类型的文件或目录,例如编译后的文件或操作系统特定的缓存文件。
    • Add a license: 如果您的项目遵循某种开源许可证,这里可以选择添加一个许可证模板。
  4. 创建仓库: 填写完所有必要的信息后,点击页面底部的 "Create repository" 按钮。

  5. 初始化本地仓库: 创建仓库后,GitHub会显示初始化本地仓库的命令。您需要在本地机器上安装Git,并在您希望存放项目代码的目录中运行以下命令:

    git init

    初始化完成后,使用以下命令将本地仓库与GitHub仓库关联:

    git remote add origin https://github.com/yourusername/your-reponame.git
  6. 推送代码到GitHub: 将您的代码添加到本地仓库中,然后使用以下命令将代码推送到GitHub:

    git add .
    git commit -m "Initial commit"
    git push -u origin main

2. 配置Jenkins作为持续集成/持续交付服务器

步骤1: 安装Jenkins

  1. 下载Jenkins: 访问Jenkins官方网站 Download and deploy 下载适合您操作系统的Jenkins安装包。
  2. 安装Jenkins:
    • Linux: 使用RPM或DEB包安装,或通过Docker容器运行。
    • Windows: 下载Windows安装程序并运行。
    • macOS: 可以通过Homebrew安装。
  3. 启动Jenkins: 根据您的操作系统,使用相应的命令或服务管理工具启动Jenkins。
  4. 初始化Jenkins: 第一次启动时,Jenkins会引导您完成初始化过程,包括解锁Jenkins和设置管理员密码。

步骤2: 配置Jenkins

A. 解锁Jenkins
  1. 获取初始管理员密码: Jenkins会提示您从 /var/lib/jenkins/ 目录下的密钥文件中获取初始密码。
  2. 输入密码解锁: 在浏览器中输入密码解锁Jenkins。
B. 安装插件
  1. 安装推荐插件: Jenkins会推荐一组插件,选择 “Install” 安装它们。
  2. 安装额外插件: 根据项目需求,可能需要安装额外的插件,如 GitHub Plugin, Git Plugin, Kubernetes Plugin, Docker Pipeline Plugin 等。
C. 创建第一个管理员用户
  1. 设置用户名和密码: 创建一个新的管理员账户。
  2. 保存设置: 完成后,保存并完成初始化过程。

步骤3: 创建Jenkins Job

  1. 新建Job: 在Jenkins主页点击 “New Item”。
  2. 选择Job类型: 选择适合的类型,如 “Freestyle project” 或者 “Pipeline”。
  3. 配置Job:
    • General: 给Job命名,添加描述。
    • Source Code Management: 配置源代码管理,如 Git,指定仓库URL、分支等。
    • Build Triggers: 设置触发构建的条件,如代码提交、定时任务等。
    • Build Environment: 可以在这里设置环境变量或脚本。
    • Build Steps: 添加构建步骤,如执行shell命令、调用Maven或Gradle命令等。
    • Post-build Actions: 配置构建后的动作,如发送邮件通知、部署到Kubernetes等。
    • Save: 保存配置。

步骤4: 集成GitHub

  1. 安装GitHub Plugin: 如果还未安装,确保已经安装了GitHub Plugin。
  2. 配置GitHub Credentials: 在Jenkins的全局配置中添加GitHub的访问令牌。
  3. 配置Job: 在Job配置中,选择GitHub作为源代码管理,并使用前面创建的Credentials。

步骤5: 测试和优化

  1. 手动触发构建: 开始手动触发构建,检查是否一切正常。
  2. 自动化构建: 设置自动化触发,如通过GitHub webhook来自动触发构建。
  3. 监控和日志: 查看构建日志,监控构建状态,确保没有错误发生。

步骤6: 部署至Kubernetes

  1. 配置Kubernetes Plugin: 安装Kubernetes Plugin,如果还未安装的话。
  2. 添加Kubernetes Credentials: 在Jenkins中添加Kubernetes集群的凭证。
  3. 配置部署步骤: 在Job的构建步骤中添加Kubernetes部署命令。

通过以上步骤,就可以配置好Jenkins作为持续集成和持续交付的服务器了。确保在实际操作中,根据您的具体需求和环境进行适当的调整。

3. 部署Kubernetes集群

配置Kubernetes集群,对于一个普通的团队而言,最划算的是直接使用云服务商提供的云服务器,这样也不用麻烦自己搭建。但是如果想要自己搭建的话,也是可以的,这边介绍使用kubeadm来搭建kubernetes集群。

准备工作

  1. 服务器准备:

    • 确保每台服务器或虚拟机都满足Kubernetes的系统要求。
    • 每台机器上都需要安装Linux操作系统(如CentOS、Ubuntu等)。
  2. 关闭防火墙和SELinux: 这是为了简化安装过程,但在生产环境中,你可能需要配置防火墙规则而不是完全禁用它。

    sudo systemctl stop firewalld
    sudo systemctl disable firewalld
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
  3. 禁用Swap: Kubernetes不支持在有活跃swap的系统上运行。

    sudo swapoff -a

安装Kubernetes

  1. 安装必要的软件包:

    sudo apt-get update && sudo apt-get install -y apt-transport-https curl
  2. 添加Kubernetes的GPG密钥:

    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. 添加Kubernetes的APT仓库:

    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
  4. 安装Kubernetes的组件:

    sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl

配置和初始化主节点

  1. 初始化Master节点:

    sudo kubeadm init --pod-network-cidr=<CIDR>

    <CIDR>应替换为你的Pod网络CIDR,例如10.244.0.0/16

  2. 设置kubeconfig: 初始化完成后,kubeadm init会输出一些信息,包括一个kubectl配置文件的位置。你需要把这个配置文件复制到你的用户主目录下。

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

加入Worker节点

  1. 运行kubeadm join命令: 在初始化Master节点后,kubeadm init会输出一个kubeadm join命令。在每个Worker节点上运行这个命令以加入集群。

配置网络插件

  1. 安装网络插件: 通常使用像Flannel、Calico或Weave Net这样的网络插件。以Flannel为例:
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

验证集群状态

  1. 检查节点状态:

    kubectl get nodes
  2. 检查集群状态:

    1kubectl cluster-info

以上步骤提供了搭建Kubernetes集群的基本流程。在生产环境中,你可能还需要考虑更多因素,如高可用性、安全性和性能优化等。另外,许多云服务商如AWS、Google Cloud和Azure都提供了托管的Kubernetes服务,可以大大简化部署和维护的复杂度。

4. 使用Ansible自动化部署

配置Ansible用于自动化部署通常涉及到以下几个关键步骤:

  1. 安装Ansible 首先确保Ansible已经安装在你的控制节点(即运行Ansible命令的机器)上。如果你还没有安装,可以在Linux系统上使用如下命令进行安装:

    sudo apt update
    sudo apt install ansible
  2. 配置Ansible Ansible的配置文件通常位于/etc/ansible/ansible.cfg,你可以在此文件中修改一些默认配置,例如SSH超时时间、重试次数等。

  3. 创建Inventory文件 Inventory文件是用来定义目标主机列表以及它们的变量的地方。可以使用INI格式或YAML格式。例如:

    [webservers]
    host1.example.com
    host2.example.com[dbservers]
    db1.example.com
    db2.example.com

    或者使用动态inventory脚本。

  4. 编写Playbooks Playbooks是Ansible的核心,使用YAML语法编写,用来定义要执行的任务序列。例如,一个简单的playbook可能看起来像这样:

    - name: Deploy web applicationhosts: webserversbecome: yestasks:- name: Update apt cacheapt:update_cache: yes- name: Install Apacheapt:name: apache2state: latest- name: Copy HTML filescopy:src: ./html_files/dest: /var/www/html/owner: www-datagroup: www-datamode: 0644- name: Restart Apacheservice:name: apache2state: restartedenabled: yes
  5. 执行Playbook 使用ansible-playbook命令来执行playbook:

    1ansible-playbook -i inventory.ini deploy_webapp.yml
  6. 使用Role和Modules Ansible的Role提供了一种组织playbook的方式,使得代码更加模块化和可重用。Modules则是Ansible执行特定任务的小型程序。

  7. 测试和调试 使用--check选项来测试playbook是否会按预期工作,而不做任何更改:

    1ansible-playbook -i inventory.ini deploy_webapp.yml --check
  8. 优化和维护 随着Ansible playbooks的增加,你可能需要优化它们以适应不断变化的需求,比如添加错误处理、使用变量、模板化配置文件等。

  9. 集成CI/CD 将Ansible集成到持续集成/持续交付(CI/CD)管道中,例如与Jenkins、GitLab CI/CD或CircleCI配合使用,以便在代码变更时自动执行部署。

  10. 安全和权限 确保Ansible操作的安全性,例如使用become关键字来提升权限,使用Vault加密敏感信息,以及限制谁可以执行Ansible操作。

5. 配置Prometheus和Grafana进行监控

1. 安装Prometheus

首先,你需要在一台服务器上安装Prometheus。Prometheus可以从其官方网站下载适用于不同操作系统的二进制文件。以下是在Linux上安装Prometheus的简要步骤:

下载Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v<version>/prometheus-<version>.linux-amd64.tar.gz
tar xvfz prometheus-<version>.linux-amd64.tar.gz
移动文件到适当位置
sudo mv prometheus-<version>.linux-amd64/prometheus /usr/local/bin/prometheus
sudo mv prometheus-<version>.linux-amd64/promtool /usr/local/bin/promtool
sudo rm -rf prometheus-<version>.linux-amd64
创建配置文件
sudo nano /etc/prometheus/prometheus.yml

然后在配置文件中添加目标监控的job和scrape配置。

2. 启动Prometheus

启动Prometheus,通常使用systemd或作为Docker容器运行。

使用systemd
sudo nano /etc/systemd/system/prometheus.service

在文件中添加Prometheus服务的定义,保存并重新加载systemd配置,然后启动Prometheus。

sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus

3. 安装Grafana

Grafana可以从其官方网站下载或通过包管理器安装。

使用APT安装
1sudo apt-get install -y adduser libfontconfig1
2wget https://dl.grafana.com/oss/release/grafana_8.0.0_amd64.deb
3sudo dpkg -i grafana_8.0.0_amd64.deb
启动Grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

4. 配置Grafana

打开浏览器,访问Grafana的Web界面,默认地址是 http://localhost:3000,使用默认的用户名和密码登录(admin/admin)。

添加数据源

在Grafana中添加Prometheus作为数据源。

创建仪表板

使用Grafana创建新的仪表板,并添加图表来展示Prometheus收集的数据。

5. 配置Exporter和Target

如果需要监控特定的应用或服务,可能需要安装相应的Exporter。例如,对于Node Exporter、Blackbox Exporter或其他特定的服务Exporter。

6. 配置Alerting(可选)

如果需要配置警报,可以使用Prometheus的Alertmanager,配置规则并设定警报条件。

请注意,实际配置可能会因具体需求和环境而异,上述步骤提供了基础框架。在生产环境中,你可能需要更详细的规划,如安全性、持久存储、高可用性和扩展性等方面的考虑。

6. 使用JMeter进行性能测试

6. 运行测试计划

完成配置后,点击工具栏上的绿色三角形图标(运行按钮)或选择 "Run -> Start" 来运行测试计划。

7. 分析结果

测试运行完成后,使用 "View Results Tree" 或 "Aggregate Report" 等监听器来查看和分析测试结果。

  1. 1. 安装 Java

    JMeter 是基于 Java 构建的,因此首先需要在你的计算机上安装 Java Development Kit (JDK)。你可以从 Oracle 的官方网站下载最新版本的 JDK,并按照指示进行安装。安装完成后,确保设置好环境变量,使 java 命令可以在命令行中全局调用。

    2. 下载和安装 JMeter

    访问 Apache JMeter 的官方网站下载最新版本的 JMeter ZIP 包。解压缩下载的 ZIP 文件到你希望存放 JMeter 的目录。

    3. 配置 JMeter 属性

    在 JMeter 目录下的 bin 文件夹中,找到 jmeter.properties 文件。使用文本编辑器打开它,你可以在这里配置各种 JMeter 的行为。例如,如果你想将界面语言更改为中文,可以取消注释 language=zh_CN 这一行。

    4. 运行 JMeter

    打开命令行或终端,导航到 JMeter 的 bin 目录,并运行 jmeter.sh(Unix/Linux)或 jmeter.bat(Windows)。这将启动 JMeter 的图形界面。

    5. 创建测试计划

    一旦 JMeter 运行起来,你可以开始创建测试计划。测试计划是所有测试元素的容器,包括线程组、采样器、监听器等。

    步骤如下:
  2. 新建测试计划

    • 选择 "Test Plan" 并从上下文菜单中选择 "Add -> Logic Controller -> Simple Controller" 来添加逻辑控制器(如果需要)。
  3. 添加线程组

    • 在测试计划或逻辑控制器下添加 "Thread Group",这将定义测试的并发用户数和循环次数。
  4. 添加采样器

    • 在线程组下添加 "Sampler",如 "HTTP Request Default",用于向目标服务器发送请求。
    • 配置请求的 URL、方法、参数等。
  5. 添加监听器

    • 添加 "Listener" 如 "View Results Tree" 或 "Summary Report",以便观察和分析测试结果。
  6. 配置其他元素

    • 根据需要添加断言、定时器、配置元件等。

7. 整合所有组件

使用Jenkins Pipeline as Code功能,可以将构建、测试和部署的步骤整合成一个自动化流水线。下面是一个示例,展示了如何使用Declarative Pipeline语法来实现这一过程,该流水线包括构建、单元测试、集成测试、静态代码分析、打包、部署以及使用Prometheus和Grafana进行监控。

Jenkinsfile 示例

在项目根目录中创建一个名为 Jenkinsfile 的文件,然后输入以下内容:

pipeline {agent anyenvironment {DOCKER_REGISTRY = "your-docker-registry-url"IMAGE_NAME = "your-image-name"TAG = "${env.BUILD_NUMBER}"}stages {stage('Build') {steps {script {sh 'mvn clean package'}}}stage('Test') {steps {script {sh 'mvn test'}}post {always {junit 'target/surefire-reports/*.xml'}}}stage('Static Analysis') {steps {script {sh 'mvn checkstyle:checkstyle'}}post {always {archiveArtifacts 'target/checkstyle-result.xml'publishHTML target: [allowMissing: true,alwaysLinkToLastBuild: false,keepAll: true,reportDir: 'target/site/checkstyle',reportFiles: 'index.html',reportName: 'Checkstyle Report',reportTitles: '']}}}stage('Package') {steps {script {sh 'docker build -t ${IMAGE_NAME}:${TAG} .'sh 'docker tag ${IMAGE_NAME}:${TAG} ${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG}'sh 'docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG}'}}}stage('Deploy') {steps {script {sh 'kubectl apply -f kubernetes/deployment.yaml'sh 'kubectl apply -f kubernetes/service.yaml'}}}stage('Prometheus & Grafana Setup') {steps {script {sh 'kubectl apply -f monitoring/prometheus.yml'sh 'kubectl apply -f monitoring/grafana.yml'}}}}options {timeout(time: 30, unit: 'MINUTES')}triggers {pollSCM('*/30 * * * *')}
}
  • Agent:指定流水线应该在哪个节点上运行。
  • Environment:定义流水线中使用的环境变量。
  • Stages:流水线中的各个阶段。
  • Steps:每个阶段执行的具体操作。
  • Post:阶段结束后执行的操作,例如收集测试报告、静态分析报告等。
  • Options:定义流水线的额外选项,例如超时时间。
  • Triggers:触发流水线执行的条件,例如定期执行或代码提交时。

这样,整条流水线就可以转起来了。当然,中间的细节,需要依照实际的情况进行调整,不过这边整个devops平台基本就是 完整了。

相关文章:

【DevOps系列】构建Devops系统

开始介绍 那就着手开始干吧。先介绍一下我们的工具链。 主要工具&#xff1a;GitHub、Jenkins、Kubernetes、Ansible、Prometheus和JMeter 着手动 1. 设置GitHub作为源代码仓库 登录GitHub: 打开浏览器并访问 https://github.com&#xff0c;使用您的GitHub账户登录。 创建…...

ABAP打印WORD的解决方案

客户要求按照固定格式输出到WORD模板中,目前OLE和DOI研究了均不太适合用于这种需求。 cl_docx_document类可以将WORD转化为XML文件,利用替换字符串方法将文档内容进行填充同 时不破坏WORD现有格式。 首先需要将WORD的单元格用各种预定义的字符进行填充,为后续替换作准备…...

emr部署hive并适配达梦数据库

作者&#xff1a;振鹭 一、达梦 用户、数据库初始化 1、创建hive的元数据库 create tablespace hive_meta datafile /dm8/data/DAMENG/hive_meta.dbf size 100 autoextend on next 1 maxsize 2048;2、创建数据库的用户 create user hive identified by "hive12345&quo…...

王春城:怎么用精益思维重塑企业战略规划格局?

当下&#xff0c;企业战略规划的灵活性和适应性变得至关重要。传统的战略规划方法往往过于僵化和静态&#xff0c;难以应对市场的不确定性和变化。因此&#xff0c;引入精益思维来重塑企业战略规划格局&#xff0c;成为了许多企业寻求突破和创新的途径。具体步骤如深圳天行健企…...

git reset

git reset [--soft | --mixed | --hard] [HEAD] 表格版 原始内容reset前reset命令reset后本地工作区暂存区本地仓库本地工作区暂存区本地仓库本地工作区暂存区本地仓库READMEREADMEREADMEREADMEREADMEREADME--soft HEADREADMEREADMEREADMEa.txta.txtb.txtb.txtb.txtb.txtc.tx…...

E17.【C语言】练习:sizeof和strlen的辨析

先回顾http://t.csdnimg.cn/aYHl6 1. char acX[] "abcdefg"; char acY[] { a,b,c,d,e,f,g}; 以下说法正确的是( ) A.数组acX和数组acY等价 B.数组acX和数组acY的长度相同 C.sizeof(acX)>sizeof (acY) D.strlen (acX)>strlen (acY) 分析&#xff1a;…...

便携气象站:科技助力气象观测

在科技飞速发展的今天&#xff0c;便携气象站以其轻便、高效、全面的特点&#xff0c;正逐渐改变着气象观测的传统模式。这款小巧而强大的设备&#xff0c;不仅为气象学研究和气象灾害预警提供了有力支持&#xff0c;更为户外活动、农业生产等领域带来了诸多便利。 便携气象站是…...

php 存储复杂的json格式查询(如:经纬度)

在开发中&#xff0c;有时我们可能存了一些复杂json格式不知道怎么查。我这里提供给大家参考下&#xff1a; 一、先上表数据格式&#xff08;location字段的possiton经纬度以逗号分开的&#xff09; {"title":"澳海文澜府","position":"11…...

UDP网口(1)概述

文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例&#xff0c;介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…...

Linux - 进程的概念、状态、僵尸进程、孤儿进程及进程优先级

进程基本概念 课本概念&#xff1a;在编程或软件工程的上下文中&#xff0c;进程通常被视为正在执行的程序的实例。当你启动一个应用程序时&#xff0c;操作系统会为这个程序创建一个进程。每个进程都有自己的独立内存空间&#xff0c;可以运行自己的指令序列&#xff0c;并可能…...

Gradle依赖报告:项目依赖树的X光机

Gradle依赖报告&#xff1a;项目依赖树的X光机 在复杂的软件项目中&#xff0c;依赖管理是确保应用正常构建和运行的关键。Gradle作为一个强大的构建工具&#xff0c;提供了依赖报告功能&#xff0c;帮助开发者分析和理解项目的依赖树。本文将详细介绍如何在Gradle中使用依赖报…...

开源XDR-SIEM一体化平台 Wazuh (1)基础架构

简介 Wazuh平台提供了XDR和SIEM功能&#xff0c;保护云、容器和服务器工作负载。这些功能包括日志数据分析、入侵和恶意软件检测、文件完整性监控、配置评估、漏洞检测以及对法规遵从性的支持。详细信息可以参考Wazuh - Open Source XDR. Open Source SIEM.官方网站 Wazuh解决…...

从零开始:构建基于深度学习的实时跌倒检测系统(UI界面+YOLO代码+数据集)

注意看文末的结局与声明 一、引言 1. 项目背景与动机 在老年人和高危职业环境中&#xff0c;跌倒是一种常见的事故&#xff0c;可能导致严重的伤害甚至致命。实时跌倒检测系统可以及时发现并报警&#xff0c;提供紧急救助。通过深度学习技术&#xff0c;可以提高跌倒检测的准…...

【策略模式在项目中的实际应用】

业务场景 最最近项目中有这样的一个业务场景&#xff1a; 用户下单->管理员审核->配送员接单->配送中->送达–>签收->完成 整个业务以这种流程的形式存在&#xff0c;每个流程状态的业务不一样&#xff0c;考虑到多种状态如果直接写一个接口肯定会嵌套太多…...

昇思25天学习打卡营第14天|计算机视觉

昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…...

将json数组格式转成数组

start cmd [ 27 01 f7 01 24 38 02 b7 42 6e ee 2f 69 46 72 21 74 44 c4 22 7a 92 d8 6a de 66 61 b1 1e 2f de ee 5c 31 57 db df 01 31 2d c9 01 01 c0 FB ] set_ulpk {“jsonrpc”:“2.0”,“type”:2,“id”:0,“method”:“method”,“message”:{“VALUE”:[56,2,183,66…...

接口测试之测试原则、测试用例、测试流程详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口的介绍 软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口&…...

证书上的服务器名错误解决方法

方法 win r &#xff0c;输入mmc 点击文件——>添加/删除管理单元 找到证书——> 添加 根据自己的存放选择存放位置 点击控制台根节点——> 受信任的根证书颁发机构——>导入 若还出现问题&#xff0c;则参考https://blog.csdn.net/mm120138687/article/details/…...

前端:上传2进制图片

1、let formData new FormData(); 2、添加要传的字段&#xff1a;formData.append("avatarfile", data); &#xff08;key,value&#xff09; 3、上传文件 function uploadImg() {// 1定义FormDatalet formData new FormData();// 2添加字段formData.append("…...

web前端 React 框架面试200题(三)

面试题 65. 在使用 React Router时&#xff0c;如何获取当前页面的路由或浏览器中地址栏中的地址&#xff1f; 参考回答&#xff1a; 在当前组件的 props中&#xff0c;包含 location属性对象&#xff0c;包含当前页面路由地址信息&#xff0c;在 match中存储当前路由的参数等…...

交流负载箱:电力系统的节能利器

交流负载箱是模拟电网中实际负载的装置&#xff0c;它能够精确地模拟各种电器设备的耗电情况&#xff0c;为电力系统的节能提供了重要的工具。在电力系统中&#xff0c;交流负载箱的应用非常广泛&#xff0c;它可以用于电力系统的设计、运行和维护&#xff0c;以及电力设备的测…...

【思科】链路聚合实验配置和背景

【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…...

使用 vue-element-plus-admin 框架遇到的问题记录

项目打包遇到的问题&#xff1a; 打包语句&#xff1a;pnpm run build:pro 报错信息&#xff1a; Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…...

从零开始手写STL库:List

从零开始手写STL库–List部分 Github链接&#xff1a;miniSTL 文章目录 从零开始手写STL库–List部分List是什么&#xff1f;List需要包含什么函数1&#xff09;基础成员函数2&#xff09;核心功能3)其他功能 基础成员函数的编写核心功能的编写其他功能编写总结 List是什么&am…...

蒙特卡洛采样

目录 蒙特卡洛采样的计算逻辑计算步骤:1. 定义问题2. 确定采样范围3. 生成随机样本点4. 计算函数值5. 估计期望值或积分值6. 计算误差具体示例:1. 定义问题2. 确定采样范围3. 生成随机样本点4. 计算函数值5. 估计积分值6. 计算误差总结蒙特卡洛采样是一种通过随机生成样本点来…...

Apache虚拟主机VirtualHost配置项详解

在Apache中,VirtualHost容器用于定义一个虚拟主机的配置,它允许在单一的物理服务器上托管多个不同的网站,每个网站可以有自己的域名、文档根目录、错误日志等。VirtualHost内的配置项非常灵活,可以包含从基本的网站信息到高级的URL重写和安全设置。 以下是一些常见的Virtu…...

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介

OpenAI从GPT-4V到GPT-4O&#xff0c;再到GPT-4OMini简介 一、引言 在人工智能领域&#xff0c;OpenAI的GPT系列模型一直是自然语言处理的标杆。随着技术的不断进步&#xff0c;OpenAI推出了多个版本的GPT模型&#xff0c;包括视觉增强的GPT-4V&#xff08;GPT-4 with Vision&…...

从人工巡检到智能防控:智慧油气田安全生产的新视角

一、背景需求 随着科技的飞速发展&#xff0c;视频监控技术已成为各行各业保障安全生产、提升管理效率的重要手段。特别是在油气田这一特殊领域&#xff0c;由于其工作环境复杂、安全风险高&#xff0c;传统的监控方式已难以满足实际需求。因此&#xff0c;基于视频监控AI智能…...

【黑马java基础】Lamda, 方法引用,集合{Collection(List, Set), Map},Stream流

文章目录 JDK8新特性&#xff1a;Lambda表达式认识Lambda表达式Lambda表达式的省略规则 JDK8新特性&#xff1a;方法引用静态方法的引用实例方法的引用特定类型方法的引用构造器的应用 集合➡️Collection单列集合体系Collection的常用方法Collection的遍历方法迭代器增强for循…...

Stable Diffusion 使用详解(1)---- 提示词及相关参数

目录 背景 提示词 内容提示词 人物及主体特征 场景 环境光照 画幅视角 注意事项及示例 标准化提示词 画质等级 风格与真实性 具体要求 背景处理 光线与色彩 负向提示词 小结 常用工具 另外几个相关参数 迭代步数 宽度与高度 提示词引导系数 图片数量 背景…...

数据结构和算法(刷题) - 无序数组排序后的最大相邻差

无序数组排序后的最大相邻差 问题&#xff1a;一个无序的整型数组&#xff0c;求出该数组排序后的任意两个相邻元素的最大差值&#xff1f;要求时间和空间复杂度尽可能低。 三种方法&#xff1a; 排序后计算比较 简介&#xff1a;用任意一种时间复杂度为 O ( n log ⁡ n ) O…...

HOW - React 处理不紧急的更新和渲染

目录 useDeferredValueuseTransitionuseIdleCallback 在 React 中&#xff0c;有一些钩子函数可以帮助你处理不紧急的更新或渲染&#xff0c;从而优化性能和用户体验。 以下是一些常用的相关钩子及其应用场景&#xff1a; useDeferredValue 用途&#xff1a;用于处理高优先级…...

基于A律压缩的PCM脉冲编码调制通信系统simulink建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1A律压缩的原理 4.2 PCM编码过程 4.3 量化噪声与信噪比 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#…...

【入门教程一】基于DE2-115的My First FPGA 工程

1.1. 概述 这是一个简单的练习&#xff0c; 可以帮助初学者开始了解如何使用Intel Quartus 软件进行 FPGA 开发。 在本章节中&#xff0c;您将学习如何编译 Verilog 代码&#xff0c;进行引脚分配&#xff0c;创建时序约束&#xff0c;然后对 FPGA 进行编程&#xff0c;驱动开…...

mysql中的索引和分区

目录 1.编写目的 2.索引 2.1 创建方法 2.2 最佳适用 2.3 索引相关语句 3.分区 3.1 创建方法 3.2 最佳适用 Welcome to Code Blocks blog 本篇文章主要介绍了 [Mysql中的分区和索引] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 1.编写目的 在MySQL中&…...

项目实战--C#实现图书馆信息管理系统

本项目是要开发一个图书馆管理系统&#xff0c;通过这个系统处理常见的图书馆业务。这个系统主要功能是&#xff1a;&#xff08;1&#xff09;有客户端&#xff08;借阅者使用&#xff09;和管理端&#xff08;图书馆管理员和系统管理员使用&#xff09;。&#xff08;2&#…...

信号【Linux】

文章目录 信号处理方式&#xff08;信号递达&#xff09;前后台进程 终端按键产生信号kill系统调用接口向进程发信号阻塞信号sigset_tsigprocmasksigpending内核态与用户态&#xff1a;内核空间与用户空间内核如何实现信号的捕捉 1、信号就算没有产生&#xff0c;进程也必须识别…...

Kafka Producer之ACKS应答机制

文章目录 1. 应答机制2. 等级03. 等级14. 等级all5. 设置等级6. ISR 1. 应答机制 异步发送的效率高&#xff0c;但是不安全&#xff0c;同步发送安全&#xff0c;但是效率低。 无论哪一种&#xff0c;有一个关键的步骤叫做回调&#xff0c;也就是ACKS应答机制。 其中ACKS也分…...

【深入理解SpringCloud微服务】深入理解Eureka核心原理

深入理解Eureka核心原理 Eureka整体设计Eureka服务端启动Eureka三级缓存Eureka客户端启动 Eureka整体设计 Eureka是一个经典的注册中心&#xff0c;通过http接收客户端的服务发现和服务注册请求&#xff0c;使用内存注册表保存客户端注册上来的实例信息。 Eureka服务端接收的…...

算法——滑动窗口(day7)

904.水果成篮 904. 水果成篮 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 根据题意我们可以看出给了我们两个篮子说明我们在开始采摘到结束的过程中只能有两种水果的种类&#xff0c;又要求让我们返回收集水果的最大数目&#xff0c;这不难让我们联想到题目…...

Django学习第一天(如何创建和运行app)

前置知识&#xff1a; URL组成部分详解&#xff1a; 一个url由以下几部分组成&#xff1a; scheme&#xff1a;//host:port/path/?query-stringxxx#anchor scheme:代表的是访问的协议&#xff0c;一般为http或者ftp等 host&#xff1a;主机名&#xff0c;域名&#xff0c;…...

VScode连接虚拟机运行Python文件的方法

声明&#xff1a;本文使用Linux发行版本为rocky_9.4 目录 1. 在rocky_9.4最小安装的系统中&#xff0c;默认是没有tar工具的&#xff0c;因此&#xff0c;要先下载tar工具 2. 在安装好的vscode中下载ssh远程插件工具 3. 然后连接虚拟机 4. 查看python是否已经安装 5. 下载…...

通义千问AI模型对接飞书机器人-模型配置(2-1)

一 背景 根据业务或者使用场景搭建自定义的智能ai模型机器人&#xff0c;可以较少我们人工回答的沟通成本&#xff0c;而且可以更加便捷的了解业务需求给出大家设定的业务范围的回答&#xff0c;目前基于阿里云的通义千问模型研究。 二 模型研究 参考阿里云帮助文档&#xf…...

[k8s源码]6.reflector

Reflector 和 Informer 是 Kubernetes 客户端库中两个密切相关但职责不同的组件。Reflector 是一个较低级别的组件&#xff0c;主要负责与 Kubernetes API 服务器进行交互&#xff0c;执行资源的初始列表操作和持续的监视操作&#xff0c;将获取到的数据放入队列中。而 Informe…...

前台文本直接取数据库值doFieldSQL插入SQL

实现功能&#xff1a;根据选择的车间主任带出角色。 实现步骤&#xff1a;OA的“字段联动”功能下拉选项带不出表“hrmrolemembers”&#xff0c;所以采用此方法。 doFieldSQL("select roleid from HrmResource as a inner join hrmrolemembers as b on a.id b.resource…...

【06】LLaMA-Factory微调大模型——微调模型评估

上文【05】LLaMA-Factory微调大模型——初尝微调模型&#xff0c;对LLama-3与Qwen-2进行了指令微调&#xff0c;本文则介绍如何对微调后的模型进行评估分析。 一、部署微调后的LLama-3模型 激活虚拟环境&#xff0c;打开LLaMA-Factory的webui页面 conda activate GLM cd LLa…...

数学建模学习(1)遗传算法

一、简介 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是一种用于解决优化和搜索问题的进化算法。它基于自然选择和遗传学原理&#xff0c;通过模拟生物进化过程来寻找最优解。 以下是遗传算法的主要步骤和概念&#xff1a; 初始化种群&#xff08;Initialization&a…...

NumPy冷知识66个

NumPy冷知识66个 多维切片: NumPy支持多维切片&#xff0c;可以通过指定多个索引来提取多维数组的子集。 复杂数支持: NumPy可以处理复数&#xff0c;提供了复数的基本运算和函数。 比特运算: NumPy支持比特运算&#xff0c;如与、或、异或等。 数据存储格式: NumPy可以将数…...

Wi-SUN无线通信技术 — 大规模分散式物联网应用首选

引言 在数字化浪潮的推动下&#xff0c;物联网&#xff08;IoT&#xff09;正逐渐渗透到我们生活的方方面面。Wi-SUN技术以其卓越的性能和广泛的应用前景&#xff0c;成为了大规模分散式物联网应用的首选。本文将深入探讨Wi-SUN技术的市场现状、核心优势、实际应用中的案例以及…...

在 Ubuntu Server 22.04 上安装 Docker 的详细步骤

在 Ubuntu Server 22.04 上安装 Docker 的详细步骤 本文档详细记录了在 Ubuntu Server 22.04 上安装 Docker 的完整过程&#xff0c;包括解决过程中遇到的问题。希望能对读者有所帮助。 安装过程&#xff0c;重点需要看官方文档。https://docs.docker.com/engine/install/ubu…...