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

自动化运维工具Ansible教程(一)【入门篇】

文章目录

  • 前言
  • Ansible 入门到精通
    • 入门篇
    • 进阶篇
    • 精通篇
    • 入门篇
      • 1. Ansible 简介
      • 2. 安装 Ansible
        • 1. 通过包管理器安装:
        • 2. 通过源码安装:
      • 3. Ansible 的基本概念和核心组件
      • 4. 编写和运行第一个 Ansible Playbook
      • 5. 主机清单和组织结构
        • 主机清单
        • 组织结构
      • 6. Ansible 常用模块和任务
      • 7. Ansible 变量和模板
      • 8. Ansible 条件和循环
  • 参考文档

在这里插入图片描述

前言

ansible 学习大纲
在这里插入图片描述
Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。

  1. 简单易用:Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编写复杂的脚本或编程代码。初学者可以快速上手,同时也适用于复杂的自动化需求。

  2. 无代理:Ansible 使用 SSH 协议进行远程连接和执行任务,无需在远程主机上安装任何代理程序。这使得部署和管理变得简单,同时减少了对目标主机的依赖和配置要求。

  3. 基于模块化:Ansible 基于模块化的架构,提供了丰富的模块来管理各种不同类型的系统、服务和应用。这些模块可以执行各种任务,如安装软件包、配置文件、启动服务等。

  4. 声明式语法:Ansible Playbooks 使用声明式语法描述所需的状态和配置,而不是编写特定的步骤和命令。这使得配置管理和自动化任务的维护更加直观和可读性强。

  5. 可扩展性:Ansible 可以轻松扩展以适应不同规模和复杂度的环境。它支持分组管理、变量管理、角色和插件等功能,可以构建复杂的自动化流程和组织结构。

  6. 强大的生态系统:Ansible 拥有庞大的社区和活跃的贡献者,提供了大量的模块、角色和插件。Ansible Galaxy 是一个社区驱动的集市,提供了现成的角色和模块,可用于加速和共享自动化任务的开发。

Ansible 的应用场景广泛,可以用于服务器配置管理、应用部署、云基础设施管理、网络设备配置、持续集成/持续部署 (CI/CD) 等。它的简单性、可读性和可扩展性使得 Ansible 成为许多组织和开发团队的首选自动化工具。

Ansible 入门到精通

入门篇

  1. Ansible 简介
  2. 安装 Ansible
  3. Ansible 的基本概念和核心组件
  4. 编写和运行第一个 Ansible Playbook
  5. 主机清单和组织结构
  6. Ansible 常用模块和任务
  7. Ansible 变量和模板
  8. Ansible 条件和循环

进阶篇

  1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)
  2. 使用 Ansible Vault 进行加密和解密
  3. Ansible 远程执行和连接方式
  4. 高级 Ansible Playbook 技巧
  5. 使用 Ansible 进行系统配置和部署
  6. Ansible 的容器和云集成
  7. Ansible 自动化测试和检查
  8. Ansible 运维和故障排除

精通篇

  1. Ansible 在企业级环境中的应用和扩展
  2. Ansible 与其他自动化工具的集成
  3. Ansible 最佳实践和实际案例分析
  4. Ansible 性能优化和容错机制
  5. Ansible 社区和资源

入门篇

1. Ansible 简介

2. 安装 Ansible

安装 Ansible 主要有两种方式:通过包管理器和源码安装。

1. 通过包管理器安装:

对于基于 Debian 的系统(如 Ubuntu),可以使用 apt-get 命令来安装 Ansible:

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt-get install ansible

对于基于 Red Hat 的系统(如 CentOS),可以使用 yum 命令来安装 Ansible:

sudo yum install epel-release
sudo yum install ansible

2. 通过源码安装:

如果你需要使用 Ansible 的最新版本,或者你的系统没有预包装的 Ansible,你可以选择通过源码安装。首先,你需要安装一些必要的依赖,然后从 GitHub 上克隆 Ansible 的源码,并安装:

sudo apt-get install git python3-pip
git clone https://github.com/ansible/ansible.git
cd ansible
sudo pip3 install .

安装完成后,你可以使用 ansible --version 命令来检查 Ansible 是否已经成功安装,以及其版本信息。

3. Ansible 的基本概念和核心组件

在这里插入图片描述

Ansible的一些基本概念和核心组件:

  1. 主机清单(Inventory):主机清单是一个定义可管理主机的文件或文件集合。它指定了Ansible应该在哪些主机上执行任务。主机清单可以是静态的(静态清单文件)或动态的(通过外部脚本或插件生成)。

  2. Playbook:Playbook是一个YAML格式的文件,用于定义Ansible的配置、部署和管理任务。它由一个或多个Play(任务集合)组成,每个Play定义了一组在一组主机上执行的任务。

  3. 模块(Modules):模块是Ansible的基本执行单元,用于执行具体的任务。Ansible提供了丰富的模块库,用于管理文件、安装软件包、配置服务等各种操作。

  4. 任务(Tasks):任务是在Playbook中定义的单个操作步骤。每个任务通常使用一个模块来执行特定的操作,例如安装软件包、复制文件、启动服务等。

  5. 角色(Roles):角色是一种组织和复用Playbook的机制。它将相关的任务、变量和文件组织到单个目录结构中,使得管理和维护复杂的配置变得更加容易。

  6. 变量(Variables):变量用于存储和传递数据,以在Playbook中进行配置和任务执行。变量可以在不同的层次(全局、主机组、主机、角色等)进行定义和使用。

  7. 模板(Templates):模板是一种允许在文件复制过程中进行动态渲染的机制。它使用Jinja2模板引擎,可以根据变量和条件生成最终的配置文件。

  8. 插件(Plugins):插件是可扩展Ansible功能的组件。它们可以修改或扩展Ansible的核心行为,包括主机清单解析、任务执行、变量处理等。

  9. 控制节点(Control Node):控制节点是运行Ansible的主机或服务器。它是执行Ansible命令和Playbook的机器,与目标主机通过SSH建立连接并进行管理操作。

这些是Ansible的一些基本概念和核心组件。通过理解这些概念,您可以开始编写和执行Ansible Playbook,实现自动化的系统配置和管理

4. 编写和运行第一个 Ansible Playbook

在这里插入图片描述

要编写一个部署包含 Spring Boot 项目、Redis、MySQL 和 Nginx 的 Ansible Playbook, 可以按照以下步骤进行操作:

  1. 主机清单(Host Inventory)
    指定你要在其中部署和管理应用程序的主机列表。它是一个文本文件,其中包含主机的名称或 IP 地址,并按组织和分类进行分组。主机清单告诉 Ansible 在哪些主机上执行特定的任务或角色。
    主机清单文件通常具有 .ini.yaml 扩展名
    我们有两个组 [web_servers][database_servers],每个组中列出了相应主机的名称和 IP 地址。你需要根据你的实际部署环境和需求来创建和维护主机清单文件。
[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11[database_servers]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21
  1. 创建一个名为 deploy.yml 的 Ansible Playbook 文件。
    在这个 Playbook 中,我们首先定义了一些变量,例如项目名称、项目版本和 MySQL 的 root 密码。你可以根据实际情况修改这些变量的值。
    接下来,我们列出了一系列任务:
  • 更新 apt 缓存
  • 安装 Java Development Kit (JDK)
  • 安装 Redis
  • 安装 MySQL
  • 对 MySQL 进行安全设置
  • 安装 Nginx
  • 配置 Nginx
  • 部署 Spring Boot 项目
  • 启动 Spring Boot 项目
---
- name: Deploy Spring Boot Projecthosts: 172.16.57.56 # 替换为你的目标主机清单vars:project_name: icepip-first-project # 项目名称project_version: 1.0.0  # 项目版本mysql_root_password: your_mysql_root_password  # MySQL root 密码tasks:- name: Update apt cache  # 更新 apt 缓存become: yesapt:update_cache: yes- name: Install Java Development Kit (JDK)  # 安装 Java Development Kit (JDK)become: yesapt:name: openjdk-11-jdkstate: present- name: Install Redis  # 安装 Redisbecome: yesapt:name: redis-serverstate: present- name: Install MySQL  # 安装 MySQLbecome: yesapt:name: mysql-serverstate: present- name: Secure MySQL installation  # 安全设置 MySQL 安装become: yesmysql_user:name: rootpassword: "{{ mysql_root_password }}"login_unix_socket: /var/run/mysqld/mysqld.sockhost: localhostcheck_implicit_admin: yeslogin_user: rootlogin_password: ""priv: "*.*:ALL,GRANT"state: present- name: Install Nginx  # 安装 Nginxbecome: yesapt:name: nginxstate: present- name: Configure Nginx  # 配置 Nginxbecome: yestemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confvalidate: /usr/sbin/nginx -tnotify:- Restart Nginx- name: Deploy Spring Boot project  # 部署 Spring Boot 项目become: yescopy:src: target/{{ project_name }}-{{ project_version }}.jardest: /opt/{{ project_name }}.jar- name: Start Spring Boot project  # 启动 Spring Boot 项目become: yesshell: |nohup java -jar /opt/{{ project_name }}.jar > /dev/null 2>&1 &handlers:- name: Restart Nginx  # 重启 Nginxbecome: yesservice:name: nginxstate: restarted

Configure Nginx 任务中,使用了一个名为 nginx.conf.j2 的模板文件来配置 Nginx。你需要创建这个模板文件并定义适合你的项目的 Nginx 配置。定义了一个名为 Restart Nginx 的处理程序,在配置更改时重新启动 Nginx 服务。

  1. 创建一个名为 nginx.conf.j2 的模板文件
    Nginx 配置了一个监听端口为 80 的服务器块,将请求代理到运行在本地的 Spring Boot 项目的 8080 端口。
worker_processes auto;
events {worker_connections 1024;
}
http {server {listen 80;server_name your_domain;location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
  1. 保存并关闭 deploy.ymlnginx.conf.j2 文件。

  2. 运行 Ansible Playbook:

		ansible-playbook deploy.yml

Ansible 将连接到目标主机并按照 Playbook中定义的任务顺序执行操作。它会安装和配置 Redis、MySQL 和 Nginx,然后部署和启动 Spring Boot 项目。

5. 主机清单和组织结构

主机清单(Host Inventory)和组织结构在 Ansible 中起着关键的作用。它们用于定义和组织要管理的主机以及如何对它们进行分类和分组。

主机清单

  1. 主机清单文件:主机清单文件是一个文本文件,其中列出了要在 Ansible 中管理的主机的信息。它可以包含主机名、IP 地址、连接信息和其他变量。主机清单文件可以使用 .ini.yaml 格式编写。

  2. 主机组:主机组是一种将主机按逻辑或功能进行分组的方式。你可以基于不同的标准(如角色、地理位置、环境等)将主机分成不同的组。这样,你可以根据需要在组级别或单个主机级别上执行任务。

  3. 组变量:组变量是应用于特定主机组的变量。它们以组的名称作为键,可以在主机清单文件中定义。通过组变量,你可以在一次性中为一组主机设置共享的属性和配置。

  4. 主机变量:主机变量是应用于单个主机的变量。它们以主机的名称作为键,可以在主机清单文件中定义。主机变量允许你为特定主机设置独立的属性和配置。

  5. 动态主机清单:动态主机清单是一种动态生成主机清单的机制。它可以从外部源(如云提供商、配置管理数据库等)获取主机信息,并在运行时构建主机清单。这对于动态环境中的自动化和弹性部署非常有用。

通过合理组织和使用主机清单和组织结构,你可以更好地管理和扩展 Ansible 部署。你可以根据你的项目需求和部署架构,灵活地定义主机组、变量和组织结构,以便有效地执行任务和角色。

在Ansible中,主机清单是一个配置文件,它包含了被Ansible管理的所有主机的列表。主机清单通常用于制定哪些主机应该接受哪些特定的命令和配置。

主机清单的基本结构是这样的:

在这个例子中,web_serversdatabase_servers就是组(组名),

[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11[database_servers]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21

组织结构

Ansible的组织结构是通过主机清单来管理的,可以构建高级别的抽象结构,这意味着可以有子组、父组,甚至可以有嵌套的子组。 atlantaraleigh是子组;southeast是父组,它包含了两个子组(atlanta, raleigh);usa是一个更大的父组,包含了更多的子组。同时,在[southeast:vars]下定义的变量(some_server,halon_system_timeout,self_destruct_countdown,escape_pods) 将对southeast组以及其下的所有子组和主机生效。

[atlanta]
host1
host2[raleigh]
host3
host4[southeast:children]
atlanta
raleigh[southeast:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2[usa:children]
southeast
northeast
southwest
northwest

这种组织结构的设计使得Ansible能够非常轻松地管理大型的网络结构。你可以简单地通过改变组或父组的配置来改变一大组机器的行为。

6. Ansible 常用模块和任务

Ansible 提供了丰富的模块来执行各种任务。下面是一些常用的 Ansible 模块和任务的示例:

  1. apt 模块:用于管理基于 APT(Debian、Ubuntu)的软件包。可以安装、升级、移除软件包,并更新本地的软件包缓存。
- name: Install nginxapt:name: nginxstate: present
  1. yum 模块:用于管理基于 YUM(Red Hat、CentOS)的软件包。可以安装、升级、移除软件包,以及管理软件包仓库。
- name: Install httpdyum:name: httpdstate: present
  1. copy 模块:用于将文件从控制节点复制到远程主机。可以指定源文件路径和目标路径,并设置文件权限和所有权。
- name: Copy configuration filecopy:src: /path/to/source/file.confdest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
  1. template 模块:用于使用模板引擎生成文件,并将其复制到远程主机。可以使用变量和条件逻辑来自定义生成的文件。
- name: Generate configuration file from templatetemplate:src: /path/to/template.conf.j2dest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
  1. service 模块:用于管理系统服务的状态。可以启动、停止、重新启动服务,并设置服务的启动状态。
- name: Start nginx serviceservice:name: nginxstate: started
  1. command 模块:用于在远程主机上执行命令并获取输出结果。
- name: Execute a commandcommand: ls -l /path/to/directoryregister: result- name: Print command outputdebug:var: result.stdout

这只是一小部分常用的 Ansible 模块和任务示例。Ansible 还提供了许多其他模块,涵盖了各种任务,包括文件操作、用户管理、数据库操作、云资源管理等。你可以根据具体需求选择适当的模块和任务,构建自己的 Ansible Playbooks。

7. Ansible 变量和模板

在 Ansible 中,变量和模板的定义可以在不同的位置和方式进行。以下是几种常见的定义方式:

1. 主机清单文件中定义变量: 可以在主机清单文件中为每个主机或主机组定义变量。这些变量将应用于特定的主机或主机组,可以在 Playbooks 和模板中使用。主机变量使用 host_varsgroup_vars 目录来组织,文件名与主机名或组名相对应。

示例(位于 host_vars 目录下的文件):

# host_vars/web1.yml
http_port: 8080

示例(位于 group_vars 目录下的文件):

# group_vars/web_servers.yml
http_port: 8080

2. Playbook 文件中定义变量: 可以在 Playbook 文件中定义变量,这些变量将应用于整个 Playbook 中的任务。可以使用 vars 关键字定义变量。

示例:

- name: Configure web serverhosts: web_serversvars:http_port: 8080tasks:- name: Install and configure web server...

3. 命令行中定义变量: 可以在运行 Ansible 命令时通过命令行参数定义变量。可以使用 -e--extra-vars 参数来传递变量。

示例:

ansible-playbook playbook.yml -e "http_port=8080"

4. 注册变量: 在任务执行期间,可以使用 register 关键字将命令执行的结果保存到变量中。注册变量可以在后续任务中使用。

示例:

- name: Execute a commandcommand: ls -l /path/to/directoryregister: result- name: Print command outputdebug:var: result.stdout

5. 模板文件中定义变量: 可以在模板文件中使用变量占位符,并在 Playbook 中通过 template 模块将变量值传递给模板。

示例模板文件 template.conf.j2

# Configuration file
server_ip = {{ ansible_host }}
http_port = {{ http_port }}

在 Playbook 中使用 template 模块:

- name: Generate configuration file from templatetemplate:src: template.conf.j2dest: /etc/destination/file.confowner: rootgroup: rootmode: 0644

8. Ansible 条件和循环

在 Ansible 中,条件和循环用于控制任务的执行流程和处理复杂的配置情况。以下是 Ansible 中条件和循环的用法和示例:

条件

使用条件语句可以根据不同的条件来执行或跳过任务。

  1. when 关键字:when 关键字允许你在任务级别使用条件判断。任务只有在条件为真时才会执行。
- name: Install package if OS is CentOS 7yum:name: package_namestate: presentwhen: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7'
  1. failed_when 关键字:failed_when 关键字允许你在任务执行失败时自定义失败的条件。
- name: Execute a command and ignore non-zero return codecommand: some_commandfailed_when: false
  1. changed_when 关键字:changed_when 关键字允许你自定义任务是否被标记为已更改的条件。
- name: Execute a command and always report as changedcommand: some_commandchanged_when: true

循环

使用循环结构可以对列表、字典等数据进行迭代,执行重复的任务。

  1. with_items 关键字:with_items 关键字用于循环遍历列表。
- name: Create multiple usersuser:name: "{{ item }}"state: presentwith_items:- user1- user2- user3
  1. loop 关键字:loop 关键字用于循环遍历任意可迭代对象,包括列表、字典等。
- name: Create multiple usersuser:name: "{{ item }}"state: presentloop:- user1- user2- user3
  1. with_dict 关键字:with_dict 关键字用于循环遍历字典。
- name: Set multiple factsset_fact:"{{ item.key }}": "{{ item.value }}"with_dict:key1: value1key2: value2key3: value3
  1. with_fileglob 关键字:with_fileglob 关键字用于循环遍历匹配指定文件模式的文件列表。
- name: Copy filescopy:src: "{{ item }}"dest: /path/to/destination/with_fileglob:- /path/to/files/*.txt- /path/to/files/*.conf

参考文档

  1. Ansible 官方文档 ↗: Ansible 官方文档是学习 Ansible 的最全面和权威的资源。它包含了 Ansible 的所有功能、模块和概念的详细说明,并提供示例和最佳实践指南。

  2. Ansible 官方示例 ↗: Ansible 官方示例库包含了一系列使用 Ansible 的示例 Playbooks,涵盖了各种常见的用例和场景。这些示例可以帮助你学习和理解如何使用 Ansible 进行自动化配置和部署。

相关文章:

自动化运维工具Ansible教程(一)【入门篇】

文章目录 前言Ansible 入门到精通入门篇进阶篇精通篇入门篇1. Ansible 简介2. 安装 Ansible1. 通过包管理器安装:2. 通过源码安装: 3. Ansible 的基本概念和核心组件4. 编写和运行第一个 Ansible Playbook5. 主机清单和组织结构主机清单组织结构 6. Ansi…...

计算机毕业设计 微信小程序 uniapp+vue大学生兼职平台

任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,本系统前台采用微信开发者结合后台Java语言设计并实现了…...

JavaScript框架:构建交互性、现代化Web应用的利器

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 JavaScript框架已…...

数据结构——二分查找法

二分查找法(Binary Search)是一种高效的查找算法,通常用于在已排序的数组或列表中查找特定的目标值。这个算法的基本思想是不断将查找范围缩小为原来的一半,直到找到目标值或确定目标值不存在。 二分查找是一种在每次比较之后将查…...

服务端渲染(SSR):提升Web应用性能和用户体验的关键技术

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 服务端渲染&#…...

如何工作和生活相平衡?

之前待过一家外企,他们的口号是 Balancing work and life,工作和生活相平衡。辗转几家公司之后,发现这个越来越难了,越来越少的时间投入家庭和自己的生活。 人生的意义 (AI) 人生的意义是一个深奥而复杂的…...

semaphere部署,配置ldap

在处理 Ansible 相关项目时,我们经常面临繁琐的命令行操作,这对于不熟悉命令行的用户来说可能是一个挑战。此外,当项目规模扩大时,跟踪和管理多个 playbook 变得困难,同时缺乏对失败的及时通知和访问控制。这些问题催生…...

Java 泛型 T,E,K,V,?

泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况&#xf…...

软件测试技术之地图导航的测试用例

外观测试 屏幕显示不能有花屏、黑点和闪屏,清晰度、亮度、颜色要正常。 检测所有按键都能起到相应作用,是否手感不良。 UI显示状态、颜色、清晰度、效果。 控制:放大,缩小,音量调节功能测试。 交叉路口查询测试&am…...

【C++】常用集合算法

0.前言 1.set_intersection #include <iostream> using namespace std;// 常用集合算法 交集set_intersection #include<vector> #include<algorithm>void myPrint(int val) {cout << val << " "; }void test01() {vector<int>v…...

css flex:1;详解,配合demo效果解答

前言 给设置了display&#xff1a;flex的子组件设置了flex&#xff1a;1&#xff1b;就能让他填满整个容器&#xff0c;如果有多个就平均 flex&#xff1a;1&#xff1b;是另外三个样式属性的简写&#xff0c;等同 flex-grow: 0; flex-shrink: 1; flex-basis: auto;我们就针…...

discuzQ安装

我们开始配置php,安装两个扩展。 在宝塔面板中&#xff0c;单击软件商城->已安装&#xff0c;查找已安装的 PHP 软件。 然后在 php 管理中&#xff0c;单击禁用函数&#xff0c;进入设置页面。 在列表中单击删除函数 putenv、readlink、symlink、shell_exec &#xff0c;…...

深入解析NLP情感分析技术:从篇章到属性

目录 1. 情感分析概述1.1 什么是情感分析&#xff1f;- 情感分析的定义- 情感分析的应用领域 1.2 为什么情感分析如此重要&#xff1f;- 企业和研究的应用- 社交媒体和公共意见的影响 2. 篇章级情感分析2.1 技术概览- 文本分类的基本概念- 机器学习与深度学习方法- 词嵌入的力量…...

JVM的双亲委派模型

定义与本质&#xff1a; 类加载器用来把类文件加载到JVM内存中。从JDK1.2开始&#xff0c;类加载过程采用双亲委派模型&#xff0c;保证Java平台安全。 父类委托的定义&#xff1a; 一个类加载器在接到加载类请求的时候&#xff0c;首先不会去加载这个类&#xff0c;而是把这个…...

js中如何判断一个变量是否为数字类型?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐使用Number.isNaN()方法⭐使用正则表达式⭐使用isNaN()函数⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个…...

使用阿里PAI DSW部署Stable Diffusion WebUI

进入到网址https://pai.console.aliyun.com/里边。 点击创建实例。 把实例名称填写好&#xff0c;选择GPU规格&#xff0c;然后选择实例名称是ecs.gn6v-c8g1.2xlarge。 选择stable-diffusion-webui-env:pytorch1.13-gpu-py310-cu117-ubuntu22.04&#xff0c;然后点击下一步。…...

redisson使用过程常见问题汇总

文章目录 常见报错1. 配置方式使用错误2. 版本差异报错3. 配置文件中配置了密码或者配置错误4. 字符集和序列化方式配置问题5. Redisson的序列化问题6. 连接池问题&#xff1a;7. Redisson的高可用性问题&#xff1a;8. Redisson的并发问题9. Redisson的性能问题 2. 参考文档 常…...

代码随想录训练营 DP序列

代码随想录训练营 DP序列 718. 最长重复子数组&#x1f338;code 674. 最长连续递增序列&#x1f338;code 300.最长递增子序列&#x1f338;code 最后一题很巧妙&#xff0c;不能单纯的去把DP当作板子题&#xff0c;得思考才能得到最佳方式 718. 最长重复子数组&#x1f338; …...

Datastage部署与使用

Datastage部署与使用 - 码农教程 https://www.cnblogs.com/lanston/category/739553.html Streamsets定时拉取接口数据同步到HBase集群_streamsets api_webmote的博客-CSDN博客 【SDC】StreamSets实战之路-28-实战篇- 使用StreamSets实时采集指定数据目录文件并写入库Kudu_菜…...

【实用工具】Centos 安装ARL灯塔

文章目录 docker 安装安装docker-compose配置镜像加速器ARL安装和启动 docker 安装 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm yum install docker-ce (若出现无法找到包可能是镜像源问题) 更…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...