自动化运维:Ansible之playbook基于ROLES部署LNMP平台
目录
一、理论
1.playbook剧本
2.ROLES角色
3.关系
4.Roles模块搭建LNMP架构
二、实验
1.Roles模块搭建LNMP架构
三、问题
1.剧本启动php报错语法问题
2.剧本启动mysql报错语法问题
3.剧本启动nginx开启失败
4.剧本安装php失败
5.使用yum时报错
6.rpm -Uvh https://xxxx.rpm 提示连接失败问题
7.依赖检测失败
8.剧本修改php失败
9.剧本启动php失败
10.剧本修改mysql脚本文件失败
一、理论
1.playbook剧本
(1)架构
vim XXX.yaml
- name: #指定play名称hosts: #指定主机组remote_user: #执行用户 gather_facts: true|false #是否收集远程主机facts信息vars: #定义变量tasks: #定义task任务列表- name: #定义task任务名称模块: #定义任务使用的模块和参数with_items: #定义循环列表when: #定义判断条件(== != >= > <= <),true则执行任务,否则不执行任务ignore_errors: true #忽略任务失败notify: #定义task任务changed状态时触发的任务名tags: #指定标签,ansible-playbook --tags 仅执行拥有指定 tags 标签的任务(always标签总会执行)handlers: #定义notify触发的任务列表
(2)核心元素

(3)参数

2.ROLES角色
(1)重构思路
用roles和不用roles的逻辑其实是一样的,要根据服务器的功能,先收集服务器所需要的文件,再进行安装,传输文件,启动服务或重启服务等操作。只是我们这次不必担心命名问题,因为不同的服务或不同功能的服务器所需要的配置文件会被放到不同的目录,不会冲突。
roles这个角色,可以根据同类服务器的功能定义,也可以通过服务去定义,因为我们是一键部署所有服务和项目,也不存在指定部署服务的需求,如果通过服务来定义,也容易出现需要很多when判断的情况,如果用同类功能的服务器定义角色,可能会出现同一条命令需要反复编写的情况,自行选择,我采取根据同类功能服务器去定义我们的roles角色。
(2)目录结构

(3)目录说明

3.关系
playbook是是由一系列的play组成, 每个play由一个或者多个task组成, 一个task一般是一个ansible module, 三者的关系示意图如下:
4.Roles模块搭建LNMP架构
(1)规划
通过ansible的roles角色去配置lnmp环境,nginx、php、mysql都使用源码编译安装
(2)架构

(3)部署Nginx角色
创建nginx角色所需要的工作目录:
mkdir -p /etc/ansible/playbook/roles/nginx
mkdir -p /etc/ansible/playbook/roles/nginx/defaults
mkdir -p /etc/ansible/playbook/roles/nginx/files
mkdir -p /etc/ansible/playbook/roles/nginx/handlers
mkdir -p /etc/ansible/playbook/roles/nginx/meta
mkdir -p /etc/ansible/playbook/roles/nginx/tasks
mkdir -p /etc/ansible/playbook/roles/nginx/templates
mkdir -p /etc/ansible/playbook/roles/nginx/vars
制作/etc/ansible/playbook/roles/nginx/files/index.php网页目录:
vim /etc/ansible/playbook/roles/nginx/files/index.php<?php
phpinfo();
?>
制作/etc/ansible/playbook/roles/nginx/files/nginx.repo源:
vim /etc/ansible/playbook/roles/nginx/files/nginx.repo
# nginx.repo[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
制作/etc/ansible/playbook/roles/nginx/handlers/main.yml文件,加载nginx的配置模板文件:
vim /etc/ansible/playbook/roles/nginx/handlers/main.yml
- name: reload nginxservice: name={{service}} state=reloaded
制作/etc/ansible/playbook/roles/nginx/tasks/init.yml文件:
vim /etc/ansible/playbook/roles/nginx/tasks/init.yml
- name: disable firewalldservice: name=firewalld state=stopped enabled=noignore_errors: True- name: disable selinuxshell: "/usr/sbin/setenforce 0"ignore_errors: true
制作/etc/ansible/playbook/roles/nginx/tasks/main.yml文件:
- include: "init.yml"- name: copy nginx yum repo filecopy: src=nginx.repo dest=/etc/yum.repos.d/- name: install nginxyum: name={{pkg}} state=latest- name: copy index.phpcopy: src=index.php dest={{root_dir}}- name: copy nginx template configuration filetemplate: src=default.conf.j2 dest=/etc/nginx/conf.d/default.confnotify: reload nginx- name: start nginxservice: name={{service}} state=started enabled=yes
制作/etc/ansible/playbook/roles/nginx/templates/default.conf.j2模板文:
vim /etc/ansible/playbook/roles/nginx/templates/default.conf.j2 ---修改2到8行-----------listen {{http_port}};server_name {{http_hostname}};#access_log /var/log/nginx/host.access.log main;location / {root {{root_dir}};---修改29到36行-----------location ~ \.php$ {root {{root_dir}};fastcgi_pass {{http_remote}};fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME {{root_dir}}$fastcgi_script_name;include fastcgi_params;}
制作/etc/ansible/playbook/roles/nginx/vars/main.yml文件:
http_port: 192.168.204.69:80
http_hostname: www.david.com
root_dir: /usr/share/nginx/html
http_remote: 192.168.204.100:9000
pkg: nginx
service: nginx
(4) 部署PHP角色
创建php角色所需要的工作目录:
mkdir -p /etc/ansible/playbook/roles/php
mkdir -p /etc/ansible/playbook/roles/php/defaults
mkdir -p /etc/ansible/playbook/roles/php/files
mkdir -p /etc/ansible/playbook/roles/php/handlers
mkdir -p /etc/ansible/playbook/roles/php/meta
mkdir -p /etc/ansible/playbook/roles/php/tasks
mkdir -p /etc/ansible/playbook/roles/php/templates
mkdir -p /etc/ansible/playbook/roles/php/vars
制作/etc/ansible/playbook/roles/php/files/index.php的网页文件:
vim /etc/ansible/playbook/roles/php/files/index.php <?php
phpinfo();
?>
制作/etc/ansible/playbook/roles/php/handlers/main.yml文件:
vim /etc/ansible/playbook/roles/php/handlers/main.yml - name: reload phpservice: name={{service}} state=reloaded
制作/etc/ansible/playbook/roles/php/tasks/main.yml文件:
/etc/ansible/playbook/roles/php/tasks]# vim main.yml - name: install yum reposhell: "rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm"ignore_errors: True- name: install phpcommand: 'yum install -y php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml p hp72w-fpm php72w-mysqlnd php72w-opcache --skip-broken'- name: create php useruser: name={{user_name}}- name: crate web root dirfile: name={{root_dir}} state=directory- name: copy index.phpcopy: src=index.php dest={{root_dir}}- name: modify php configuration filereplace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"notify: reload php- name: modify username and groupname in www.confreplace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="{{user_name}}"notify: reload php- name: modify listen addr in www.confreplace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1:9000" replace="{{http_port}}"notify: reload php- name: modify allowed client in www.confreplace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1" replace="{{remote_addr}}"notify: reload php- name: start phpservice: name={{service}} state=started enabled=yes
制作/etc/ansible/playbook/roles/php/vars/main.yml文件:
vim /etc/ansible/playbook/roles/php/vars/main.yml timezone: Asia/Shanghai
user_name: php
http_port: 192.168.204.100:9000
remote_addr: 192.168.204.69
root_dir: /usr/share/nginx/html
service: php-fpm
(5) 部署MySQL角色
创建mysql角色所需要的工作目录:
mkdir -p /etc/ansible/playbook/roles/mysql
mkdir -p /etc/ansible/playbook/roles/mysql/defaults
mkdir -p /etc/ansible/playbook/roles/mysql/files
mkdir -p /etc/ansible/playbook/roles/mysql/handlers
mkdir -p /etc/ansible/playbook/roles/mysql/meta
mkdir -p /etc/ansible/playbook/roles/mysql/tasks
mkdir -p /etc/ansible/playbook/roles/mysql/templates
mkdir -p /etc/ansible/playbook/roles/mysql/vars
制作/etc/ansible/playbook/roles/mysql/handlers/main.yml文件:
vim /etc/ansible/playbook/roles/mysql/handlers/main.yml - name: reload mysqlservice: name={{service}} state=reloaded
制作/etc/ansible/playbook/roles/mysql/tasks/main.yml文件:
vim /etc/ansible/playbook/roles/mysql/tasks/main.yml - name: remove mariadbshell: yum remove mariadb* -yignore_errors: True- name: install yum reposhell: "wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm --force --nodeps && rpm -ivh mysql57-commu nity-release-el7-11.noarch.rpm --force --nodeps"ignore_errors: True- name: modify gpgcheckreplace: path=/etc/yum.repos.d/mysql-community.repo regexp="gpgcheck=1" replace="gpgcheck=0"- name: install mysqlyum: name=mysql-server state=latest- name: start mysqlservice: name={{service}} state=started enabled=yes- name: make passwd.shscript: /etc/ansible/playbook/roles/mysql/files/passwd.sh
制作/etc/ansible/playbook/roles/mysql/vars/main.yml文件:
vim /etc/ansible/playbook/roles/mysql/vars/main.yml service: mysqld.service
(5)启动安装分布式LNMP
vim /etc/ansible/playbook/lnmp.yml - name: nginx playhosts: webserversremote_user: rootroles:- nginx- name: php playhosts: phpserversremote_user: rootroles:- php- name: mysql playhosts: mysqlserversremote_user: rootroles:- mysql
二、实验
1.Roles模块搭建LNMP架构
(1)环境
表1 主机
| 主控端 | 192.168.204.199 | ansible |
| 受控端-1 | 192.168.204.69 | nginx |
| 受控端-2 | 192.168.204.186 | mysql |
| 受控端-3 | 192.168.204.100 | php |
(2) 配置主机


(3)部署Nginx角色
创建nginx角色所需要的工作目录:


制作/etc/ansible/playbook/roles/nginx/files/index.php网页目录:


制作/etc/ansible/playbook/roles/nginx/files/nginx.repo源:

制作/etc/ansible/playbook/roles/nginx/handlers/main.yml文件,加载nginx的配置模板文件:


制作/etc/ansible/playbook/roles/nginx/tasks/init.yml文件:


制作/etc/ansible/playbook/roles/nginx/tasks/main.yml文件:


制作/etc/ansible/playbook/roles/nginx/templates/default.conf.j2模板文:

制作/etc/ansible/playbook/roles/nginx/vars/main.yml文件:


(4) 部署PHP角色
创建php角色所需要的工作目录:

制作/etc/ansible/playbook/roles/php/files/index.php的网页文件:


制作/etc/ansible/playbook/roles/php/handlers/main.yml文件:


制作/etc/ansible/playbook/roles/php/tasks/main.yml文件:


制作/etc/ansible/playbook/roles/php/vars/main.yml文件:


(5) 部署MySQL角色
创建mysql角色所需要的工作目录:
注意:需要提前创建passwd.sh
制作/etc/ansible/playbook/roles/mysql/handlers/main.yml文件:


制作/etc/ansible/playbook/roles/mysql/tasks/main.yml文件:

制作/etc/ansible/playbook/roles/mysql/vars/main.yml文件:


(6)启动安装分布式LNMP


启动:
nginx启动成功
php启动成功:

mysql启动成功:


访问浏览器成功
三、问题
1.剧本启动php报错语法问题
(1)报错

(2)原因分析
左端代码未对齐
(3)解决方法
修改前

修改后

2.剧本启动mysql报错语法问题
(1) 报错

(2)原因分析
左端代码未对齐
(3)解决方法
修改前

修改后

3.剧本启动nginx开启失败
(1)报错

(2)原因分析
nginx端查询
![]()
default.conf.j2 配置错误

未知的地址池

(3)解决方法
nginx端先移除多余配置文件

ansible端修改配置文件:

修改前:

修改后:

4.剧本安装php失败
(1) 报错

(2)原因分析
[弃用警告]:只在通过squash_actions使用循环时调用“yum”一次是不赞成的。而不是如果使用循环提供多个项目并指定' name: "{{ item }}" ',请使用' name: '{{ ... }}' '并删除循环。这个特性将在2.11版本中删除。弃用的警告可以通过在ansible.cfg中设置deprecation_warnings=False来禁用。
(3)解决方法
这里先暂不修改yml文件
修改php端网卡:


关闭防火墙和安全机制


如还是报错,修改/etc/ansible/playbook/roles/php/tasks/main.yml文件,安装方式不采用with_items方式,直接以command模块方式运行
修改前:

修改后:

成功

5.使用yum时报错
(1)报错
遇见failure: repodata/repomd.xml from base: [Errno 256]错误

(2)原因分析
yum源
(3)解决方法
更新依赖包,重新安装发现没用
yum clean all
yum install -y epel-release
yum clean all
yum --disablerepo=epel -y update ca-certificates
cp /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
sed -i 's#https://#http://#g' /etc/yum.repos.d/epel.repo
nameserver 8.8.8.8
search localdomain
以上步骤执行完成后如果仍然失败,继续执行以下步骤:
查看yum的依赖包
[root@localhost yum.repos.d]# rpm -qa|grep yum
PackageKit-yum-1.1.10-2.el7.centos.x86_64
yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch
yum-langpacks-0.4.2-7.el7.noarch
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-utils-1.1.31-54.el7_8.noarch
yum-3.4.3-168.el7.centos.noarch

删除依赖包
[root@localhost yum.repos.d]# rpm -e yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64 yum-3.4.3-168.el7.centos.noarch

将系统默认的yum功能删除
[root@localhost yum.repos.d]# rpm -aq|grep yum|xargs rpm -e --nodeps

查看本版和系统的位数
[root@localhost yum.repos.d]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

[root@localhost yum.repos.d]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped

下载yum包
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-3.4.3-132.el7.centos.0.1.noarch.rpm
![]()

注意:要注意版本
在http://mirrors.kernel.org/centos/ 或者 http://mirrors.163.com/centos/里下载
下载完成执行以下命令
# rpm -ivh --nodeps yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
# rpm -ivh --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
# rpm -ivh --nodeps yum-3.4.3-132.el7.centos.0.1.noarch.rpm

进入 /etc/yum.repos.d/目录中,在http://mirrors.163.com/.help/centos.html,在里面下载对应版本的repo文件,我下载了CentOS-Base.repo
对此文件进行备份,以防修改错误还有的用
修改$releasever为自己的版本号(我的为7)
保存退出
6.rpm -Uvh https://xxxx.rpm 提示连接失败问题
(1)报错

(2)原因分析
域名解析失败
(3)解决方法
查询IP地址
通过What Is My IP Address? Free IP Lookup查询对应url ip地址:

修改hosts 文件,追加一下内容
vim /etc/hosts45.55.104.9(ip) webtatic.com(可自定义)
重新执行命令,访问对应地址成功
7.依赖检测失败
(1)报错
"警告:/var/tmp/rpm-tmp.cw1TWT: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY\n\t软件包 epel-release-7-14.noarch 已经安装", "stderr_lines": ["警告:/var/tmp/rpm-tmp.cw1TWT: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY"

(2)原因分析
未忽视依赖关系
(3)解决方法
在后面加上--force --nodeps就可以了,nodeps的意思是忽视依赖关系。
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm --force --nodeps && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm --force --nodeps
// 以上是我个人下载的erlang版本,要依据你们自己下载的版本改一下
修改前:

修改后:

成功

8.剧本修改php失败
(1)报错
www.conf文件不存在

(2)原因分析
缺失文件
(3)解决方法
新建目录并上传文件

成功

9.剧本启动php失败
(1)报错
ansible端

php端:
Failed to start php-fpm.service: Unit not found

(2)原因分析
系统中没有配置 php-fpm.service 文件
(3)解决方法
通过find / -name nginx.service 找到nginx.service 配置文件路径
[root@localhost php-fpm.d]# find /lib/systemd/system -name "php-fpm.service"
[root@localhost php-fpm.d]# find /etc/systemd/system -name "php-fpm.service"
/etc/systemd/system/php-fpm.service

创建软链接
[root@localhost php-fpm.d]# sudo ln -s /lib/systemd/system/php-fpm.service /etc/systemd/system/php-fpm.service
![]()
然后去到那个路径 新建一个php-fpm.service文件 保存下面这一段内容,php-fpm路径根据自己的实际情况修改
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm(你的php-fpm路径) --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf(你的php-fpm配置文件路径)
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID[Install]
WantedBy=multi-user.target
修改为:
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/etc/systemd/system --nodaemonize --fpm-config /etc/php-fpm.d/www.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID[Install]
WantedBy=multi-user.target

10.剧本修改mysql脚本文件失败
(1)报错

(2)原因分析
缺少passwd.sh文件
(3)解决方法
新建文件

成功

相关文章:
自动化运维:Ansible之playbook基于ROLES部署LNMP平台
目录 一、理论 1.playbook剧本 2.ROLES角色 3.关系 4.Roles模块搭建LNMP架构 二、实验 1.Roles模块搭建LNMP架构 三、问题 1.剧本启动php报错语法问题 2.剧本启动mysql报错语法问题 3.剧本启动nginx开启失败 4.剧本安装php失败 5.使用yum时报错 6.rpm -Uvh https…...
SpringBoot整合MQ
1.创建工程并引入依赖 <!-- 添加rocketmq的启动器--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.1</version></dependency>2.编写…...
算法训练day37|贪心算法 part06(LeetCode738.单调递增的数字)
文章目录 738.单调递增的数字思路分析代码实现 738.单调递增的数字 题目链接🔥🔥 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。 (当且仅当每个相邻位数上的…...
【C++基础】4. 变量
文章目录 【 1. 变量的定义 】【 2. 变量的声明 】示例 【 3. 左值和右值 】 变量:相当于是程序可操作的数据存储区的名称。在 C 中,有多种变量类型可用于存储不同种类的数据。C 中每个变量都有指定的类型,类型决定了变量存储的大小和布局&am…...
jmeter setUp Thread Group
SetUp Thread Group 是一种特殊类型的线程组,它用于在主测试计划执行之前执行一些初始化任务。 SetUp Thread Group 通常用于以下几种情况: 用户登录:在模拟用户执行实际测试之前,模拟用户登录到系统以获取访问权限。 创建会话&a…...
图神经网络教程之GCN(pyG)
图神经网络-pyG版本的GCN Data(数据) data.x、data.edge_index、data.edge_attr、data.y、data.pos 举个例子 import torch from torch_geometric.data import Data edge_index torch.tensor([[0, 1, 1, 2],[1, 0, 2, 1]], dtypetorch.long) #代表…...
python中的逻辑运算
逻辑运算 逻辑运算符是python用来进行逻辑判断的运算符,虽然运算符只有and、or、not三种,但是理解这三个运算符的原理才是最重要的 python中对false的认定 逻辑运算符是python用来进行逻辑判断的运算符,虽然运算符只有and、or、not三种&…...
TortoiseGit设置作者信息和用户名、密码存储
前言 Git 客户端每次与服务器交互,都需要输入密码,但是我们可以配置保存密码,只需要输入一次,就不再需要输入密码。 操作说明 在任意文件夹下,空白处,鼠标右键点击 在弹出菜单中按照下图点击 依次点击下…...
Fragment.OnPause的事情
我们知道Fragment的生命周期依附于相应Activity的生命周期,如果activity A调用了onPause,则A里面的fragment也会相应收到onPause回调,这里以support27.1.1版本的源码来说明Fragment生命周期onPause的事情。 当activity执行onPause时ÿ…...
【C++基础】5. 变量作用域
文章目录 【 1. 局部变量 】【 2. 全局变量 】【 3. 局部变量和全局变量的初始化 】 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称…...
Python列表排序
介绍一个关于列表排序的sort方法,看下面的案例: """ 列表的sort方法来对列表进行自定义排序 """# 准备列表 my_list [["a", 33], ["b", 55], ["c", 11]]# 排序,基于带名函数 …...
(云HIS)云医院管理系统源码 SaaS模式 B/S架构 基于云计算技术
通过提供“一个中心多个医院”平台,为集团连锁化的医院和区域医疗提供最前沿的医疗信息化云解决方案。 一、概述 云HIS系统源码是一款满足基层医院各类业务需要的健康云产品。该系统能帮助基层医院完成日常各类业务,提供病患预约挂号支持、收费管理、病…...
sql:SQL优化知识点记录(十一)
(1)用Show Profile进行sql分析 新的一个优化的方式show Profile 运行一些查询sql: 查看一下我们执行过的sql 显示sql查询声明周期完整的过程: 当执行过程出现了下面这4个中的时,就会有问题导致效率慢 8这个sql创建…...
leetcode-链表类题目
文章目录 链表(Linked List) 链表(Linked List) 定义:链表(Linked List)是一种线性表数据结构,他用一组任意的存储单元来存储数据,同时存储当前数据元素的直接后继元素所…...
数据结构——哈希
哈希表 是一种使用哈希函数组织数据的数据结构,它支持快速插入和搜索。 哈希表(又称散列表)的原理为:借助 哈希函数,将键映射到存储桶地址。更确切地说, 1.首先开辟一定长度的,具有连续物理地址…...
效果好的it监控系统特点
一个好的IT监控系统应该具备以下特点: 全面性:IT监控系统应该能够监视和管理IT系统的所有方面,包括网络、服务器、应用程序和数据库等。这样可以确保系统的各个方面都得到充分的监视和管理。 可靠性:IT监控系统需要保持高可…...
leetcode1288. 删除被覆盖区间(java)
删除被覆盖区间 题目描述贪心法代码演示 题目描述 难度 - 中等 leetcode1288. 删除被覆盖区间 给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。 只有当 c < a 且 b < d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。 在完成所有删除操作…...
Python 虚拟环境相关命令
一 激活 在 cd venv/scripts 进入虚拟环境 执行命令 activate 1、创建虚拟环境 $ python -m venv 2、激活虚拟环境 $ source <venv>/bin/activate 3、关闭虚拟环境 $ deactivate...
使用U盘同步WSL2中的git项目
1、将U盘挂载到WSL2中 假设U盘在windows资源管理器中被识别为F盘,需要在WSL2中创建一个目录挂载U盘 sudo mkdir /mnt/f sudo mount -t drvfs F: /mnt/f后续所有的操作都完成后,拔掉U盘前,可以使用下面的命令从WSL2中安全的移除U盘 umount …...
Stable Diffuse AI 绘画 之 ControlNet 插件及其对应模型的下载安装
Stable Diffuse AI 绘画 之 ControlNet 插件及其对应模型的下载安装 目录 Stable Diffuse AI 绘画 之 ControlNet 插件及其对应模型的下载安装 一、简单介绍 二、ControlNet 插件下载安装 三、ControlNet 插件模型下载安装 四、ControlNet 插件其他的下载安装方式 五、Co…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...



