項目四.高可用集群_ansible

設備準備?

安裝wordpress?

[root@localhost ~]# nmcli c del "Wired connection 1"
[root@localhost ~]# nmcli c add type ethernet ifname ens224 con-name ens224 ipv4.method manual ipv4.addr 192.168.88.40/24 gw4 192.168.88.1 autoconnect true
[root@localhost ~]# nmcli c up ens224curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo##所有主機配置主機名,IP,關閉防火墻,selinux,配置hosts文件
[root@web2 ~]# tail -7f /etc/hosts
10.38.102.67 web1
10.38.102.68 web2
10.38.102.69 mysql
10.38.102.70 nfs
10.38.102.71 haproxy1
10.38.102.72 haproxy2
10.38.102.73 ansible
##部署ansible機器
[root@ansible ~]# mkdir ensible_soft
[root@ensible ~]# cd ansible_soft/
##上傳離線包
[root@ensible ansible_soft]# ll
total 38712
-rw-r--r-- 1 root root 36705432 Jun  9 01:56 ansible-6.3.0-1.el8.noarch.rpm
-rw-r--r-- 1 root root  2928380 Jun  9 01:56 ansible-core-2.13.3-1.el8.x86_64.rpm
[root@ansible ensible_soft]# yum -y install createrepo
[root@ansible ensible_soft]# createrepo .
[root@ensible ansible_soft]# ll
total 38712
-rw-r--r-- 1 root root 36705432 Jun  9 01:56 ansible-6.3.0-1.el8.noarch.rpm
-rw-r--r-- 1 root root  2928380 Jun  9 01:56 ansible-core-2.13.3-1.el8.x86_64.rpm
drwxr-xr-x 2 root root     4096 Jun  9 01:58 repodata
[root@ansible ensible_soft]# vi /etc/yum.repos.d/ansible.repo
[root@ansible ensible_soft]# cat /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=file:///root/ansible_soft
gpgcheck=0
[root@ansible ensible_soft]# yum makecache
[root@ansible ensible_soft]# yum -y install ansible
[root@ensible ~]# mkdir -p project04/files
[root@ensible ~]# cd project04/
[root@ensible project04]# vim ansible.cfg
[root@ensible project04]# cat ansible.cfg
[defaults]
inventory = inventory
host_key_checking = false
[root@ensible project04]# vim inventory
[root@ansible project04]# cat inventory
[webservers]
web1 ansible_host=10.38.102.67
web2 ansible_host=10.38.102.68[dbs]
mysql ansible_host=10.38.102.69[storages]
nfs ansible_host=10.38.102.70[lb]
haproxy1 ansible_host=10.38.102.71
haproxy2 ansible_host=10.38.102.72
##使用劇本安裝服務【{{item}}依次執行loop中的服務】
[root@ansible project04]# vim 01-config-web1.yml
[root@ansible project04]# cat 01-config-web1.yml
---
- name: config web1hosts: web1tasks:- name: install pkgs   # 安裝軟件包yum:name:- nginx- mysql-server- php-mysqlnd- php-fpm- php-jsonstate: present- name: start service   # 循環啟動多個服務service:name: "{{item}}"state: startedenabled: yesloop:- nginx- php-fpm- mysqld
[root@ansible project04]# ansible-playbook 01-config-web1.yml
##測試訪問nginx;連接數據庫
[root@web1 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.41 Source distributionCopyright (c) 2000, 2025, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> exit
Bye
##手寫網頁;測試訪問php
[root@web1 ~]# vi /usr/share/nginx/html/index.php
[root@web1 ~]# cat /usr/share/nginx/html/index.php
<?phpphpinfo();
?>[root@web1 ~]# curl 127.0.0.1
<a href="http://www.php.net/"><img border="0"[root@web1 ~]# rm -rf /usr/share/nginx/html/index.php[root@ansible project04]# vim files/config_mysql.sh
[root@ansible project04]# cat files/config_mysql.sh
#!/bin/bashmysql -e "create database wordpress character set utf8mb4"
mysql -e "create user wpuser01@localhost identified by 'wordpress'"
mysql -e "grant all privileges on wordpress.* to wpuser01@localhost"
[root@ansible project04]# vim 02-config-mysql.yml
[root@ansible project04]# cat 02-config-mysql.yml
---
- name: config mysqlhosts: web1tasks:- name: create databasescript: files/config_mysql.sh
[root@ansible project04]# ansible-playbook 02-config-mysql.yml##驗證
[root@web1 ~]# mysql -u wpuser01 -pwordpress
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.41 Source distributionCopyright (c) 2000, 2025, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| wordpress          |
+--------------------+
3 rows in set (0.01 sec)mysql> exit
Bye##上傳安裝包
[root@web1 ~]# ll
total 22988
-rw-r--r--  1 root root        0 Jun  9 02:18 1.txt
-rw-------. 1 root root     1206 Jun  6 08:48 anaconda-ks.cfg
-rw-r--r--  1 root root 23535225 Jun  9 02:44 wordpress-6.1.1-zh_CN.tar.gz
[root@web1 ~]# tar xf wordpress-6.1.1-zh_CN.tar.gz
[root@web1 ~]# cp -r wordpress/* /usr/share/nginx/html/
[root@web1 ~]# chown -R apache:apache /usr/share/nginx/html/

配置wordpress界面?

安裝向導

?

?

?

數據庫和web分開

創新數據庫
  • 保證數據安全性,web界面性能
[root@ansible project04]# cat files/config_mysql2.sh
#!/bin/bashmysql -e "create database wordpress character set utf8mb4"
mysql -e "create user wpuser01@'%' identified by 'wordpress'"
mysql -e "grant all privileges on wordpress.* to wpuser01@'%'"
[root@ansible project04]# vim 03-config-database.yml
[root@ansible project04]# cat 03-config-database.yml
---
- name: config databasehosts: dbstasks:- name: install mysql    # 安裝數據庫服務yum:name: mysql-serverstate: present- name: start service    # 啟動數據庫服務service:name: mysqldstate: startedenabled: yes- name: create databasescript: files/config_mysql.sh
[root@ansible project04]# ansible-playbook 03-config-database.yml##查看
[root@mysql ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.41 Source distributionCopyright (c) 2000, 2025, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.01 sec)mysql> use mysql;mysql> select Host,User from user;
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| %         | wpuser01         |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)mysql> exit
Bye
數據庫遷移
服務器通知遷移

查看文章

數據庫配置

[root@web1 ~]# mysqldump wordpress > wordpress.sql
[root@web1 ~]# scp wordpress.sql mysql:/root/
[root@mysql ~]# ll
total 244
-rw-------. 1 root root   1203 Jun  6 08:57 anaconda-ks.cfg
-rw-r--r--  1 root root 245344 Jun  9 03:31 wordpress.sql
[root@mysql ~]# mysql wordpress < wordpress.sql
[root@web1 ~]# vim /usr/share/nginx/html/wp-config.php
##修改為;連接mysql主機的數據庫
/** Database hostname */
define( 'DB_HOST', '10.38.102.69' );
##測試訪問
mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.00 sec)

安裝web2

[root@ansible project04]# vim 04-config-webservers.yml
[root@ansible project04]# cat 04-config-webservers.yml
---
- name: config webservershosts: webserver2tasks:- name: install pkgs    # 安裝軟件包yum:name:- nginx- php-mysqlnd- php-fpm- php-jsonstate: present- name: start service   # 循環啟動多個服務service:name: "{{item}}"state: startedenabled: yesloop:- nginx- php-fpm
[root@ansible project04]#  ansible-playbook 04-config-webservers.yml
[root@ansible project04]# vim 05-fetch-web1.yml
[root@ansible project04]# cat 05-fetch-web1.yml
---
- name: copy webhosts: web1tasks:- name: compress html    # 壓縮html目錄到/root下archive:path: /usr/share/nginx/htmldest: /root/html.tar.gzformat: gz- name: download html    # 下載壓縮文件fetch:src: /root/html.tar.gzdest: files/flat: yes
[root@ansible project04]# ansible-playbook 05-fetch-web1.yml
[root@ansible project04]# vim 06-deploy-web2.yml
[root@ansible project04]# cat 06-deploy-web2.yml
---
- name: deploy web2hosts: web2tasks:- name: unarchive to web    # 解壓文件到指定位置unarchive:src: files/html.tar.gzdest: /usr/share/nginx/
[root@ansible project04]# ansible-playbook 06-deploy-web2.yml

##已安裝過設備為綠色

?安裝nfs

[root@ansible project04]# vim 07-config-nfs.yml
[root@ansible project04]# cat 07-config-nfs.yml
---
- name: config nfshosts: nfstasks:- name: install nfs        # 安裝nfsyum:name: nfs-utilsstate: present- name: mkdir /nfs_root    # 創建共享目錄file:path: /nfs_rootstate: directorymode: "0755"- name: nfs share          # 修改配置文件lineinfile:path: /etc/exportsline: '/nfs_root 10.38.102.0/24(rw)'- name: start service      # 循環啟動服務service:name: "{{item}}"state: startedenabled: yesloop:- rpcbind       # nfs服務依賴rpcbind服務- nfs-server
[root@ansible project04]# ansible-playbook 07-config-nfs.yml
##查看共享輸出
[root@nfs ~]# showmount -e
Export list for nfs:
/nfs_root 10.38.102.0/24[root@ansible project04]# vim 08-deploy-nfs.yml
[root@ansible project04]# cat 08-deploy-nfs.yml
---
- name: deploy nfshosts: nfstasks:- name: unarchive to web     # 將控制端壓縮文件解壓到指定位置unarchive:src: files/html.tar.gzdest: /nfs_root/
[root@ansible project04]# ansible-playbook 08-deploy-nfs.yml
[root@ansible project04]# vim 09-rm-html.yml
[root@ansible project04]# cat 09-rm-html.yml
---
- name: rm htmlhosts: webserverstasks:- name: rm htmlfile:path: /usr/share/nginx/htmlstate: absent- name: create htmlfile:path: /usr/share/nginx/htmlstate: directoryowner: apachegroup: apachemode: "0755"[root@ansible project04]# ansible-playbook 09-rm-html.yml
[root@ansible project04]# vim 10-mount-nfs.yml
[root@ansible project04]# cat 10-mount-nfs.yml
---
- name: mount nfshosts: webserverstasks:- name: install nfsyum:name: nfs-utilsstate: present- name: mount nfsmount:path: /usr/share/nginx/htmlsrc: 10.38.102.70:/nfs_root/htmlfstype: nfsstate: mounted
[root@ansible project04]# ansible-playbook 10-mount-nfs.yml
[root@ansible project04]# vim 11-install-lb.yml
[root@ansible project04]# cat 11-install-lb.yml
---
- name: install lbhosts: lbtasks:- name: install pkgyum:name: haproxy,keepalivedstate: present
[root@ansible project04]# ansible-playbook 11-install-lb.yml
[root@ansible project04]# vim 12-config-lb.yml
[root@ansible project04]# cat 12-config-lb.yml
---
- name: config haproxyhosts: lbtasks:- name: rm linesshell: sed -i '64,$d' /etc/haproxy/haproxy.cfg- name: add linesblockinfile:path: /etc/haproxy/haproxy.cfgblock: |listen wordpressbind 0.0.0.0:80balance roundrobinserver web1 10.38.102.67:80 check inter 2000 rise 2 fall 5server web2 10.38.102.68:80 check inter 2000 rise 2 fall 5listen monbind 0.0.0.0:1080stats refresh 30sstats uri /monstats auth admin:admin- name: start serviceservice:name: haproxystate: startedenabled: yes
[root@ansible project04]# ansible-playbook 12-config-lb.yml
[root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf
[root@haproxy1 ~]# scp /etc/keepalived/keepalived.conf haproxy2:/etc/keepalived/
The authenticity of host 'haproxy2 (192.168.88.6)' can't be established.
ECDSA key fingerprint is SHA256:z64GJ+oU+/zmh53vY9CCgGocBoknzUwJmIuK5n7exZg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'haproxy2,192.168.88.6' (ECDSA) to the list of known hosts.
root@haproxy2's password:
keepalived.conf                                                                                                     100%  649   399.8KB/s   00:00
[root@haproxy1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 10.38.102.1smtp_connect_timeout 30router_id HAPROYX1vrrp_iptablesvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens192virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.38.102.74}
}[root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf
[root@haproxy2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 10.38.102.1smtp_connect_timeout 30router_id HAPROYX2vrrp_iptablesvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens192virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.38.102.74}
}[root@haproxy1 ~]# systemctl enable keepalived.service --now
[root@haproxy2 ~]# systemctl enable keepalived.service --now[root@haproxy1 ~]# systemctl restart keepalived.service --now
[root@haproxy1 ~]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
ens192           UP             10.38.102.71/24 10.38.102.74/32
ens224           UP
##可以測試兩個主機的IP漂移##改寫本地域名
[root@nfs ~]# cat /nfs_root/html/wp-config.php
/** The name of the database for WordPress */
##在"DB_USER"上方添加兩行
define('WP_SITEURL', 'http://www.moershi.com');
define('WP_HOME', 'http://www.moershi.com');
define( 'DB_NAME', 'wordpress' );

測試訪問

【訪問兩個web的ip也會跳轉】

域名[訪問vip將跳轉至域名]

報錯

?

以上報錯,請回快照,重裝?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909228.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909228.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TensorFlow深度學習實戰(21)——Transformer架構詳解與實現

TensorFlow深度學習實戰&#xff08;21&#xff09;——Transformer架構詳解與實現 0. 前言1. Transformer 架構1.1 關鍵思想1.2 計算注意力1.3 編碼器-解碼器架構1.4 Transformer 架構1.5 模型訓練 2. Transformer 類別2.1 解碼器(自回歸)模型2.2 編碼器(自編碼)模型2.3 Seq2s…

20250608-在 Windows 上使用 PyCharm 通過 SSH 連接到遠程 Ubuntu 機器的 Anaconda 環境

在 Windows 上使用 PyCharm 通過 SSH 連接到遠程 Ubuntu 機器的 Anaconda 環境 1. 確保遠程機器上的 SSH 服務已啟動 在遠程 Ubuntu 機器上&#xff0c;確保 SSH 服務已安裝并啟動&#xff1a; sudo apt-get install openssh-server sudo systemctl start ssh sudo systemct…

Oracle 條件索引 case when 報錯解決方案(APP)

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文檔用途 本內容介紹 Oracle條件索引 case when 如何在HGDB中轉換使用。 詳細信息 1、oracle 索引 create unique index I_GL_VOUCHER_7 on gl_vo…

鴻蒙期末總結

一、概念 HarmonyOS應用關鍵概念&#xff1a;元服務和App的關系 App具有手動下載安裝、包大小無限制、應用內或應用市場更新、全量功能等特征&#xff0c;可使用全量API 元服務具有免安裝、包大小有限制、即用即走、輕量化等特征&#xff0c;只能使用“元服務API集” 鴻蒙的…

Vue3 + TypeScript + Element Plus 表格行按鈕不觸發 row-click 事件、不觸發勾選行,只執行按鈕的 click 事件

點擊表格行按鈕不觸發 row-click 事件、不觸發勾選行&#xff0c;只執行按鈕的 click 事件 點擊第一行的【編輯】&#xff0c;第一行為當前選擇行&#xff0c; 同時也勾選了復選框&#xff0c;也會執行 row-click 事件 原來的代碼&#xff1a; <el-table-column label"…

SiteAzure4.x 版本 訪問html靜態頁文件出現404錯誤

問題描述&#xff1a; SiteAzure4.*版本&#xff0c;在upload文件夾中放置了html靜態頁文件&#xff0c;訪問出現404錯誤 問題分析&#xff1a; 1、確認訪問路徑是否正確以及文件是否存在 2、確認相應文件夾權限是否正確 3、確認IIS默認文檔是否允許靜態頁&#xff0c;MIM…

[免費]微信小程序音樂播放器(爬取網易云音樂數據)(node.js后端)【論文+源碼】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的微信小程序音樂播放器(爬取網易云音樂數據)(node.js后端)&#xff0c;分享下哈。 項目視頻演示 【免費】微信小程序音樂播放器(爬取網易云音樂數據)(node.js后端) 微信小程序畢業設計_嗶哩嗶哩_bilibili …

強化學習:策略梯度概念

2.策略梯度方法 目標是使策略 不斷更新&#xff0c;回報更高。 計算每一個軌跡的回報&#xff0c;和對應的概率 目標是使回報高的軌跡概率應該高。這樣整個策略的期望回報也會高。 什么是策略期望回報&#xff1f; 就是用這個策略跑了若干個軌跡&#xff0c;得到回報&#x…

Java 中高級開發崗技能與面試要點梳理

目錄 一、核心技術深度掌握 (一)Java 語言高階特性 JVM 底層原理剖析 并發編程高級應用 Java 新特性實戰 (二)主流框架與中間件精通 Spring 生態全面掌控 分布式中間件實戰精通 (三)數據庫與存儲優化專家 SQL 與 ORM 高級應用 分庫分表實戰 NoSQL 實戰(Elas…

職場生存發展指南 | 邊界 / 責任 / 社交 / 情緒

注&#xff1a;本文為“職場生存發展”相關合輯。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 職場生存發展指南 | 邊界 / 責任 / 社交 / 情緒 職場如江湖&#xff0c;充滿機遇與挑戰。在單位中立足&#xff0c;需深諳生存智慧——既要守住底線、…

vue3 daterange正則踩坑

<el-form-item label"空置時間" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"開始日期" end-placeholder"結束日期" clearable :editable"fal…

linux中執行腳本命令的source和“.”和“./”的區別

在 Linux 或類 Unix 系統中&#xff0c;source、. 和 ./ 的使用場景各有不同&#xff0c;以下詳細介紹何時使用它們&#xff1a; 命令用途適合場景source和“.”等效。腳本在當前 shell 環境中執行并影響當前 shell 的狀態和環境變量 1. 加載環境變量配置文件&#xff0c;無需…

games101 hw1

原理 背景 將三維空間中一個旋轉的三角形&#xff0c;顯示在屏幕上。 假設三角形初始點位為 v0(2.0, 0.0, ?2.0), v1(0.0, 2.0, ?2.0), v2(?2.0, 0.0, ?2.0), 你需要將這三個點的坐標變換為屏幕坐標并在屏幕上繪制出對應的線框三角形。 mvp AI回答&#xff1a; 在計算機…

Mybatis逆向工程詳解(附源碼文件)動態創建實體類、條件擴展類、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的學習進度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步楊帆旗航。 那么接下來就給大家出一期有關 Mybatis 逆向工程的教學&#xff0c;希望能對大家有所幫助&#xff0c;也特別歡迎大家指點不足之處&#xff0c;小生很樂意接受正確的建議&…

android studio中修改java邏輯對應配置的xml文件

在android studio新建一個activity&#xff0c;自動生成一個xml&#xff0c;可以更改到另一個xml嗎&#xff1f; 可以。 新建一個activity&#xff1a; 如下 上圖中的activity_second為xml文件&#xff0c;SecondActivity為java文件。點擊后&#xff0c; AndroidManifest.x…

@SchedulerLock處理Spring Task在分布式環境下的重復執行問題

本文大綱&#x1f4d6; 1、背景&#x1f342;2、SchedulerLock注解3、實現原理 1、背景&#x1f342; Spring生態下&#xff0c;日常開發定時任務&#xff0c;使用Spring Task框架還是很常見的選擇&#xff0c;但Spring Task并不是為分布式環境設計的&#xff0c;分布式環境下…

Prompt工程指南中文版

Prompt-Engineering-Guide-zh Prompt工程指南中文版 github 本文翻譯改編自 Dair-ai/Prompt-Engineering-Guide 中文原帖地址為 大型語言模型Prompt書寫指南 為了方便理解以及補充缺少的知識點&#xff0c;內容有所添改。除非另有說明&#xff0c;本文中所有的例子都是使用te…

「pandas 與 numpy」數據分析與處理全流程【數據分析全棧攻略:爬蟲+處理+可視化+報告】

- 第 106 篇 - Date: 2025 - 06 - 12 Author: 鄭龍浩&#xff08;仟墨&#xff09; 文中使用的所有文件在文章頂部的資源展示 數據分析與處理 「pandas 與 numpy」 文章目錄 數據分析與處理 「pandas 與 numpy」一了解數據處理1 數據處理2 數據分析第三方庫 二 numpy1 基本介紹…

Fastapi + vue3 自動化測試平臺(6):AI + Web UI的完美結合

&#x1f916;? AI Web自動化革命&#xff1a;用自然語言重塑測試體驗&#xff01; 基于FastAPI Vue3的下一代Web自動化測試平臺誕生&#xff01;將大語言模型 與 Web UI自動化深度結合&#xff0c;讓測試腳本維護進入自然語言時代 —— 告別繁瑣代碼&#xff0c;擁抱智能測…

【QT】 QGraphicsItem 獲取點坐標的幾種方法

目錄 1. 獲取圖元在場景中的位置 對于 QGraphicsEllipseItem&#xff08;點圖元&#xff09; 2. 從 QMap 獲取所有點坐標 3. 響應點擊事件獲取坐標 4. 獲取選中點的坐標 5. 坐標轉換說明 注意事項 在 Qt 圖形視圖框架中&#xff0c;從 QGraphicsItem&#xff08;特別是點…