自動化與配置管理工具 ——SaltStack

一、SaltStack 概述

1.1 核心特性

SaltStack 是一款開源的自動化運維工具,采用客戶端 - 服務器(C/S)架構,以高效、靈活和可擴展著稱。其核心特性包括:

  • 高性能架構:基于 ZeroMQ 消息隊列,支持大規模節點并發管理,每秒可處理數千節點
  • 多模式管理:支持遠程執行(Remote Execution)和配置管理(Configuration Management)兩種模式
  • 靈活的目標定位:通過 Grains、Pillar 和目標匹配器精確定位被管理節點
  • 狀態聲明式配置:使用 YAML 格式的 SLS 文件定義系統目標狀態
  • 強大的模塊系統:豐富的內置模塊覆蓋系統管理各領域,支持自定義模塊
  • 可擴展性:支持通過 API 與其他系統集成,可擴展至數萬節點規模
  • 加密通信:使用 AES 加密確保客戶端與服務器之間的通信安全

1.2 應用場景

SaltStack 適用于多種自動化場景:

  • 大規模服務器集群管理
  • 軟件包安裝與配置
  • 系統配置標準化與合規性檢查
  • 批量命令執行與任務調度
  • 云資源與容器管理
  • 事件驅動自動化(通過 Reactor 系統)
  • 基礎設施監控與告警集成

1.3 核心組件

SaltStack 架構由以下核心組件構成:

  • Salt Master:控制節點,負責發送命令和配置給 Minion
  • Salt Minion:被管理節點,接收并執行 Master 的命令
  • ZeroMQ:用于 Master 與 Minion 之間的消息傳遞
  • Grains:Minion 的靜態屬性(如操作系統、IP 地址等)
  • Pillar:存儲敏感數據,僅對指定 Minion 可見
  • SLS 文件:定義系統狀態的配置文件
  • Reactor:事件驅動系統,用于響應特定事件并觸發自動化操作

二、SaltStack 安裝與部署

2.1 環境準備

2.1.1 系統要求
  • 操作系統:支持 Linux(CentOS、Ubuntu、Debian 等)、Windows、macOS
  • Python 版本:2.7 或 3.4+
  • 網絡:Master 與 Minion 之間需開放 4505 和 4506 端口
    • 4505:發布端口(發布命令和配置)
    • 4506:響應端口(接收 Minion 的執行結果)
2.1.2 主機規劃

主機角色

操作系統

IP 地址

主機名

Salt Master

CentOS 7

192.168.1.100

salt-master

Salt Minion 1

CentOS 7

192.168.1.101

minion-01

Salt Minion 2

Ubuntu 20.04

192.168.1.102

minion-02

2.2 Salt Master 安裝

2.2.1 CentOS 7 安裝
# 安裝EPEL源
yum install -y epel-release# 安裝Salt Master
yum install -y salt-master# 啟動并設置開機自啟
systemctl start salt-master
systemctl enable salt-master# 檢查服務狀態
systemctl status salt-master# 開放防火墻端口
firewall-cmd --permanent --add-port=4505/tcp
firewall-cmd --permanent --add-port=4506/tcp
firewall-cmd --reload
2.2.2 Ubuntu 20.04 安裝
# 添加SaltStack官方源
curl -fsSL https://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
echo "deb http://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest focal main" | sudo tee /etc/apt/sources.list.d/salt.list# 更新軟件包列表并安裝
apt update
apt install -y salt-master# 啟動并設置開機自啟
systemctl start salt-master
systemctl enable salt-master# 檢查服務狀態
systemctl status salt-master

2.3 Salt Minion 安裝

2.3.1 CentOS 7 安裝
# 安裝EPEL源
yum install -y epel-release# 安裝Salt Minion
yum install -y salt-minion# 配置Master地址
sed -i "s/#master: salt/master: 192.168.1.100/g" /etc/salt/minion# (可選)配置Minion ID
echo "minion-01" > /etc/salt/minion_id# 啟動并設置開機自啟
systemctl start salt-minion
systemctl enable salt-minion
2.3.2 Ubuntu 20.04 安裝
# 添加SaltStack官方源
curl -fsSL https://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
echo "deb http://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest focal main" | sudo tee /etc/apt/sources.list.d/salt.list# 更新軟件包列表并安裝
apt update
apt install -y salt-minion# 配置Master地址
sed -i "s/#master: salt/master: 192.168.1.100/g" /etc/salt/minion# (可選)配置Minion ID
echo "minion-02" > /etc/salt/minion_id# 啟動并設置開機自啟
systemctl start salt-minion
systemctl enable salt-minion

2.4 密鑰認證管理

SaltStack 使用公鑰加密確保通信安全,需要在 Master 上接受 Minion 的密鑰:

# 查看待認證的Minion密鑰
salt-key -L# 輸出示例:
# Accepted Keys:
# Denied Keys:
# Unaccepted Keys:
# minion-01
# minion-02
# Rejected Keys:# 接受單個Minion密鑰
salt-key -a minion-01# 接受所有Minion密鑰
salt-key -A# 拒絕單個Minion密鑰
salt-key -r minion-01# 刪除Minion密鑰
salt-key -d minion-01

2.5 驗證安裝

# 測試與所有Minion的連接
salt '*' test.ping# 輸出示例:
# minion-01:
#     True
# minion-02:
#     True# 查看Minion的Grains信息
salt 'minion-01' grains.items# 在所有Minion上執行命令
salt '*' cmd.run 'uname -a'

三、SaltStack 核心配置

3.1 Master 配置

Master 主配置文件為/etc/salt/master,常用配置項:

# 網絡配置
interface: 0.0.0.0  # 監聽地址
publish_port: 4505  # 發布端口
ret_port: 4506      # 響應端口# 安全配置
auto_accept: False  # 是否自動接受Minion密鑰
worker_threads: 5   # 工作線程數,根據CPU核心數調整# 文件服務器配置
file_roots:base:- /srv/salt/basedev:- /srv/salt/devprod:- /srv/salt/prod# Pillar配置
pillar_roots:base:- /srv/pillar/basedev:- /srv/pillar/devprod:- /srv/pillar/prod# 日志配置
log_level: info
log_file: /var/log/salt/master# 超時設置
timeout: 5

修改配置后需重啟 Master:

systemctl restart salt-master

3.2 Minion 配置

Minion 主配置文件為/etc/salt/minion,常用配置項:

# Master地址
master: 192.168.1.100# Minion ID(若未通過minion_id文件設置)
# id: minion-01# 日志配置
log_level: info
log_file: /var/log/salt/minion# 模塊設置
modules_dirs:- /srv/salt/_modules# 狀態執行設置
state_output: full  # 狀態執行輸出詳細程度# 超時設置
master_timeout: 60

修改配置后需重啟 Minion:

systemctl restart salt-minion

3.3 目錄結構

推薦的 SaltStack 目錄結構:

/srv/
├── salt/                 # 狀態文件和模塊
│   ├── base/             # 基礎環境
│   │   ├── top.sls       # 頂級狀態文件
│   │   ├── nginx/        # Nginx狀態模塊
│   │   ├── mysql/        # MySQL狀態模塊
│   │   └── _modules/     # 自定義執行模塊
│   ├── dev/              # 開發環境
│   └── prod/             # 生產環境
└── pillar/               # Pillar數據├── base/│   ├── top.sls       # Pillar頂級文件│   ├── secrets.sls   # 敏感數據│   └── users.sls     # 用戶配置├── dev/└── prod/

創建目錄結構:

mkdir -p /srv/salt/{base,dev,prod}
mkdir -p /srv/salt/base/{nginx,mysql,_modules}
mkdir -p /srv/pillar/{base,dev,prod}

四、遠程執行系統

4.1 目標匹配器

SaltStack 提供多種方式定位 Minion:

# 匹配所有Minion
salt '*' test.ping# 按Minion ID匹配
salt 'minion-01' test.ping
salt 'minion-*' test.ping  # 通配符匹配# 按列表匹配
salt -L 'minion-01,minion-02' test.ping# 按正則表達式匹配
salt -E 'minion-(01|02)' test.ping# 按Grains匹配
salt -G 'os:CentOS' test.ping  # 匹配操作系統為CentOS的Minion
salt -G 'cpuarch:x86_64' test.ping  # 匹配64位系統# 按Pillar匹配
salt -I 'role:webserver' test.ping  # 匹配角色為webserver的Minion# 按IP地址匹配
salt -S '192.168.1.0/24' test.ping  # 匹配網段內的Minion# 復合匹配
salt -C 'G@os:CentOS and S@192.168.1.100/24' test.ping

4.2 常用執行模塊

4.2.1 系統信息模塊
# 查看Minion詳細信息
salt '*' grains.items# 查看特定Grains值
salt '*' grains.get os
salt '*' grains.get ip_interfaces:eth0# 查看磁盤使用情況
salt '*' disk.usage# 查看內存使用情況
salt '*' mem.info# 查看網絡接口
salt '*' network.interfaces
4.2.2 包管理模塊
# 安裝軟件包(CentOS)
salt -G 'os:CentOS' pkg.install nginx# 安裝軟件包(Ubuntu)
salt -G 'os:Ubuntu' pkg.install nginx# 卸載軟件包
salt '*' pkg.remove httpd# 更新軟件包
salt '*' pkg.upgrade# 檢查軟件包狀態
salt '*' pkg.version nginx
4.2.3 服務管理模塊
# 啟動服務
salt '*' service.start nginx# 停止服務
salt '*' service.stop nginx# 重啟服務
salt '*' service.restart nginx# 查看服務狀態
salt '*' service.status nginx# 設置服務開機自啟
salt '*' service.enable nginx
4.2.4 文件管理模塊
# 檢查文件是否存在
salt '*' file.exists /etc/nginx/nginx.conf# 獲取文件狀態
salt '*' file.stats /etc/nginx/nginx.conf# 創建目錄
salt '*' file.directory /data/logs mode=755 user=root group=root# 復制文件(從Master到Minion)
salt '*' cp.get_file salt://nginx/nginx.conf /etc/nginx/nginx.conf# 執行命令并獲取輸出
salt '*' cmd.run 'netstat -tuln'

4.3 命令執行選項

# 指定超時時間
salt '*' cmd.run 'sleep 30' timeout=40# 以root權限執行
salt '*' cmd.run 'systemctl restart nginx' runas=root# 批量執行命令并保存輸出到文件
salt '*' cmd.run 'df -h' --out=txt > disk_usage.txt# 并行執行(默認開啟)
salt '*' cmd.run 'uptime' -b 10  # 每次10個Minion# 查看作業狀態
salt '*' cmd.run 'sleep 60' -t 100 --async  # 異步執行
# 輸出示例:jid: 20230520123456789012
salt-run jobs.lookup_jid 20230520123456789012  # 查看結果

五、狀態管理系統

5.1 SLS 文件基礎

SLS(SaLt State)文件用于定義系統的目標狀態,采用 YAML 格式,示例:

# /srv/salt/base/nginx/install.sls
nginx-install:pkg.installed:- name: nginxnginx-config:file.managed:- name: /etc/nginx/nginx.conf- source: salt://nginx/nginx.conf- user: root- group: root- mode: 644- require:- pkg: nginx-installnginx-service:service.running:- name: nginx- enable: True- watch:- file: nginx-config

SLS 文件語法規則:

  • 使用縮進表示層級關系(2 個空格)
  • 每個狀態塊由 ID 聲明和狀態函數組成
  • require:定義依賴關系,確保狀態執行順序
  • watch:監控文件變化,自動觸發服務重啟等操作

5.2 頂級文件(top.sls)

top.sls 用于將 SLS 文件映射到目標 Minion,是狀態執行的入口:

# /srv/salt/base/top.sls
base:'minion-01':- nginx- mysql'minion-02':- nginx'G@os:CentOS':- linux.centos'I@role:webserver':- webserver'*':- common

執行狀態:

# 對所有Minion應用狀態
salt '*' state.highstate# 對特定Minion應用狀態
salt 'minion-01' state.highstate# 應用單個SLS文件
salt '*' state.sls nginx.install# 測試狀態執行(不實際修改系統)
salt '*' state.highstate test=True

5.3 常用狀態模塊

5.3.1 pkg 模塊(包管理)
# 安裝指定版本的軟件包
nginx:pkg.installed:- name: nginx- version: 1.18.0# 確保軟件包不被安裝
apache:pkg.removed:- name: httpd
5.3.2 file 模塊(文件管理)
# 創建文件并設置內容
/etc/motd:file.managed:- source: salt://common/motd- user: root- group: root- mode: 644- template: jinja  # 啟用Jinja2模板- context:environment: productioncontact: admin@example.com# 創建目錄
/data/app:file.directory:- user: appuser- group: appgroup- mode: 755- makedirs: True  # 遞歸創建父目錄- recurse:- user- group  # 遞歸設置子目錄權限# 符號鏈接
/usr/local/bin/python:file.symlink:- target: /usr/bin/python3- force: True  # 強制創建,覆蓋現有文件# 確保文件不存在
/tmp/oldfile:file.absent
5.3.3 service 模塊(服務管理)
# 管理服務狀態
mysql:service.running:- name: mysqld- enable: True  # 開機自啟- reload: True  # 支持reload操作- require:- pkg: mysql  # 依賴mysql包安裝- watch:- file: /etc/my.cnf  # 配置文件變化時重啟
5.3.4 user 模塊(用戶管理)
# 創建用戶
appuser:user.present:- uid: 1001- gid: 1001- home: /home/appuser- shell: /bin/bash- fullname: "Application User"- groups:- developers- docker- require:- group: appuser# 創建用戶組
appuser:group.present:- gid: 1001
5.3.5 cmd 模塊(命令執行)
# 執行一次性命令
initialize_db:cmd.run:- name: /opt/app/init_db.sh- creates: /var/lib/app/db_initialized  # 文件存在則不執行- user: appuser- require:- pkg: apppackage

5.4 模板系統(Jinja2)

SaltStack 支持 Jinja2 模板引擎,用于動態生成配置文件:

# /srv/salt/base/nginx/templates/nginx.conf.j2
user nginx;
worker_processes {{ grains['num_cpus'] }};  # 使用Grains數據error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;{% if pillar['environment'] == 'production' %}sendfile            on;tcp_nopush          on;{% else %}sendfile            off;{% endif %}keepalive_timeout   65;include /etc/nginx/conf.d/*.conf;
}

在 SLS 文件中引用模板:

# /srv/salt/base/nginx/config.sls
/etc/nginx/nginx.conf:file.managed:- source: salt://nginx/templates/nginx.conf.j2- template: jinja- user: root- group: root- mode: 644- context:max_connections: 1000  # 自定義上下文變量

六、Pillar 系統

6.1 Pillar 概述

Pillar 用于存儲敏感數據(如密碼、密鑰)和特定節點的配置數據,具有以下特點:

  • 數據存儲在 Master 端,僅對指定 Minion 可見
  • 適合存儲環境變量、API 密鑰、數據庫密碼等
  • 支持加密存儲敏感信息

6.2 Pillar 配置

# /srv/pillar/base/top.sls
base:'minion-01':- webserver- secrets'I@role:dbserver':- dbserver'*':- common# /srv/pillar/base/secrets.sls
mysql_root_password: secure_password_123
api_key: ABCDEFG123456
ssl_cert_passphrase: P@ssw0rd!# /srv/pillar/base/webserver.sls
nginx:port: 80server_name: example.comworker_processes: 4ssl_enabled: True

在 SLS 文件中引用 Pillar 數據:

# /srv/salt/base/mysql/config.sls
/etc/my.cnf:file.managed:- source: salt://mysql/templates/my.cnf.j2- template: jinja- user: root- group: root# 在模板中使用
# {{ pillar['mysql_root_password'] }}

同步 Pillar 數據到 Minion:

# 手動同步Pillar數據
salt '*' saltutil.refresh_pillar# 查看Minion的Pillar數據
salt 'minion-01' pillar.items
salt 'minion-01' pillar.get mysql_root_password

6.3 Pillar 加密

使用 salt-pillar 加密敏感數據:

# 生成加密密鑰
mkdir -p /etc/salt/pki/master
salt-key --gen-keys=pillar
mv pillar.pub /etc/salt/pki/master/pillar.pub
mv pillar.pem /etc/salt/pki/master/pillar.pem# 加密數據
echo "secret_password" | salt-call --local crypto.encrypt pillar.pub
# 輸出加密后的字符串# 在Pillar中使用加密數據
# /srv/pillar/base/secrets.sls
encrypted_password: |-----BEGIN PGP MESSAGE-----...加密后的內容...-----END PGP MESSAGE-----

在 Master 配置中啟用 Pillar 加密:

# /etc/salt/master
pillar_roots:base:- /srv/pillar/basepillar_private_key: /etc/salt/pki/master/pillar.pem
pillar_public_key: /etc/salt/pki/master/pillar.pub

七、Reactor 系統

7.1 Reactor 概述

Reactor 是 SaltStack 的事件驅動自動化系統,能夠響應 Salt 事件并觸發預定義操作,常見應用場景:

  • Minion 上線自動配置
  • 配置文件變化自動測試
  • 系統異常自動修復
  • 安全事件響應

7.2 Reactor 配置

  1. 啟用 Reactor
# /etc/salt/master
reactor:- 'salt/minion/*/start':  # 事件匹配模式- /srv/reactor/minion_start.sls  # 觸發的SLS文件- 'salt/job/*/ret/*':  # 作業返回事件- /srv/reactor/job_failure.sls

? ? 2. 創建 Reactor SLS 文件

# /srv/reactor/minion_start.sls
minion_initial_setup:local.state.highstate:- tgt: {{ data['id'] }}  # 從事件數據中獲取Minion ID- args:- test: False# /srv/reactor/job_failure.sls
{% if data['retcode'] != 0 %}  # 檢查作業是否失敗
notify_failure:local.cmd.run:- tgt: 'salt-master'- args:- cmd: 'echo "Job failed on {{ data['id'] }}: {{ data['fun'] }}" | mail -s "Salt Job Failure" admin@example.com'
{% endif %}

? ? 3. 重啟 Master 使配置生效

systemctl restart salt-master

7.3 自定義事件

發送自定義事件并觸發 Reactor:

# 從Master發送自定義事件
salt-call event.send 'custom/event' '{"message": "backup_complete", "status": "success"}'# 在Reactor中匹配自定義事件
# /etc/salt/master
reactor:- 'custom/event':- /srv/reactor/handle_backup.sls

八、SaltStack 實戰案例

8.1 Web 服務器集群部署

# /srv/salt/base/top.sls
base:'I@role:webserver':- webserver- nginx- php# /srv/salt/base/webserver/init.sls
webserver-packages:pkg.installed:- pkgs:- git- wget- unzip- curlweb-root:file.directory:- name: /var/www/html- user: nginx- group: nginx- mode: 755- makedirs: Truedeploy-app:git.latest:- name: https://github.com/example/webapp.git- target: /var/www/html- user: nginx- require:- pkg: webserver-packages- file: web-root# /srv/pillar/base/webserver.sls
role: webserver
php:version: 7.4modules:- curl- gd- mysql
nginx:port: 80server_name: web.example.com

執行部署:

# 對所有Web服務器應用配置
salt -I 'role:webserver' state.highstate

8.2 數據庫備份自動化

# /srv/salt/base/mysql/backup.sls
mysql-backup-dir:file.directory:- name: /var/backups/mysql- user: root- group: root- mode: 700mysql-backup-script:file.managed:- name: /usr/local/bin/mysql_backup.sh- source: salt://mysql/scripts/backup.sh.j2- mode: 700- user: root- group: root- template: jinja- context:backup_dir: /var/backups/mysqlretention_days: 7mysql-backup-cron:cron.present:- name: /usr/local/bin/mysql_backup.sh- user: root- minute: 0- hour: 2- dayweek: '*'- require:- file: mysql-backup-script

九、SaltStack 高級特性

9.1 自定義模塊

創建自定義執行模塊:

# /srv/salt/base/_modules/monitoring.py
def check_disk_usage(path='/'):"""檢查指定路徑的磁盤使用率"""import shutildisk = shutil.disk_usage(path)percent_used = (disk.used / disk.total) * 100return {'path': path,'total': disk.total,'used': disk.used,'free': disk.free,'percent_used': percent_used}# 同步自定義模塊到Minion
salt '*' saltutil.sync_modules# 使用自定義模塊
salt '*' monitoring.check_disk_usage '/data'

9.2 Syndic 分布式架構

當管理大規模節點時,可使用 Syndic 實現分層架構:

# 頂層Master配置
syndic_master: True# Syndic配置
master: top_level_master_ip
syndic: True# 下級Master配置
order_masters: True

9.3 API 集成

SaltStack 提供 REST API 用于與其他系統集成:

# 安裝API依賴
yum install -y salt-api# 配置API
# /etc/salt/master.d/api.conf
rest_cherrypy:port: 8000host: 0.0.0.0ssl_crt: /etc/pki/tls/certs/salt-api.crtssl_key: /etc/pki/tls/private/salt-api.key# 創建API用戶
useradd -M -s /sbin/nologin saltapi
echo "saltapi:password" | chpasswd# 啟動API服務
systemctl start salt-api
systemctl enable salt-api# 測試API
curl -sSk https://localhost:8000/login \-H 'Content-Type: application/json' \-d '{"username": "saltapi", "password": "password", "eauth": "pam"}'

十、最佳實踐與總結

10.1 最佳實踐

  1. 環境隔離
    • 使用不同環境(base、dev、prod)隔離配置
    • 通過 Pillar 管理環境特定變量

? ? ?2. 狀態設計原則

    • 保持 SLS 文件模塊化和可重用性
    • 明確依賴關系,避免循環依賴
    • 優先使用原生狀態模塊而非 cmd.run

? ? ?3. 安全實踐

    • 加密 Pillar 中的敏感數據
    • 限制 Minion 權限,遵循最小權限原則
    • 定期輪換 Salt Master 和 Minion 密鑰

? ? ?4. 性能優化

    • 合理設置 worker_threads 數量
    • 對大規模部署使用 Syndic 架構
    • 禁用不需要的模塊和功能

10.2 總結

SaltStack 是一款功能強大的自動化運維工具,兼具遠程執行和配置管理能力,特別適合大規模節點管理。其核心優勢在于:

  • 高性能架構,支持數千節點并發管理
  • 靈活的目標定位機制,精確定位被管理節點
  • 聲明式狀態配置,確保系統一致性
  • 事件驅動的自動化能力,響應實時變化

通過本文的學習,你應該掌握了 SaltStack 的安裝配置、遠程執行、狀態管理、Pillar 系統和 Reactor 系統等核心功能。在實際應用中,建議從簡單場景入手,逐步構建復雜的自動化流程,充分發揮 SaltStack 在運維自動化中的價值。

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

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

相關文章

Rust → WebAssembly 的性能剖析全指南

一、用優化(Release)構建 ? 務必在做性能測量前使用 優化模式 構建你的 WASM。默認情況下: wasm-pack build → Release 優化wasm-pack build --dev 或 cargo build → Debug,性能大打折扣 優化編譯能開啟 LLVM 的各項優化和 LT…

第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題

更多內容請查看網站:【試卷中心 -----> 藍橋杯----> Python----> 國賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題 一、單選題 第 1 題 單選題 下列運算符中,表示并集的…

【Django】-9- 單元測試和集成測試(上)

一、Django 項目單元 & 集成測試準備 👇依賴安裝(給項目裝 “測試小幫手”🍼)pdm add -d black isort flake8 pytest pytest-django pytest-coverage 👉 這行命令像在給項目 “采購” 測試工具:black …

VUE-第二季-01

目錄 1.Vue程序初體驗 1.1 下載并安裝vue.js 1.2 第一個Vue程序 1.3 Vue的data配置項 1.4 Vue的template配置項 1.5 Vue實例 和 容器 的關系是:一夫一妻制 2.Vue核心技術 2.0 Vue的模板語法 2.0.1 插值語法 插值語法總結: 2.0.2 指令語法 指…

Android 15 中禁用/啟用應用的系統級方法

在 Android 15 的開發中,有時我們需要以系統級權限來控制應用的啟用狀態。本文將介紹如何使用 PackageManager 來實現應用的禁用和啟用功能。 核心方法 在 Android 15 代碼中,可以使用以下方法來禁用或啟用應用: packageManager.setApplicationEnabledSetting(pkg,Packag…

2025網絡工程師技能圖譜(附思維導圖)

------------比較全面,供學習參考路線圖。-----------------------

【ROS2】rclcpp::Node 常用 API

ROS 系列學習教程(總目錄) ROS2 系列學習教程(總目錄) 目錄1. 構造函數2. 節點名稱相關3. 獲取log對象句柄4. 回調組相關5. Topic發布與訂閱6. Service服務端與客戶端1. 構造函數 public:Node(const std::string & node_name, const NodeOptions & options NodeOptio…

自動駕駛:技術、應用與未來展望——從開創到全面革新交通出行

一、引言1.1 研究背景與意義在過去的幾十年里,隨著科技的飛速發展,自動駕駛技術逐漸從科幻小說中的概念走進了現實生活。從最初簡單的輔助駕駛功能,到如今高度自動化的自動駕駛系統,這一領域的進步正深刻地改變著我們的出行方式和…

【gradle】插件那些事

文章目錄 1. 前言 2. 插件相關介紹 2.1 gradle插件的apply 2.2 引入自定義插件 2.3 常見構建任務 2.4 gradle生命周期 2.5 gradle的惰性屬性&可注入的服務 2.6 常見命令 檢查依賴樹 查看tasks 構建掃描 查看多項目構建的結構 顯示所選項目的構建腳本依賴項 指定控制臺模式來…

測試平臺如何重塑CI/CD流程中的質量協作新范式

測試平臺如何重塑CI/CD流程中的質量協作新范式 在DevOps革命席卷全球軟件行業的今天,測試的角色正在經歷前所未有的轉變。傳統的"測試最后"模式正在被"測試全程"的新理念所取代,這一轉變背后是測試平臺與CI/CD流程深度融合帶來的質量…

node.js不同環境安裝配置

node.js不同環境安裝配置 Windows環境安裝配置 一、Node.js是什么? ? Node.js是一個基于Chrome V8引擎的[JavaScript運行環境]。 Node.js使用了一個事件驅動、非阻塞式I/O 的模型,Node.js是一個讓JavaScript運行在服務端的開發平臺,它讓J…

深度學習-讀寫模型網絡文件

模型網絡文件是深度學習模型的存儲形式,保存了模型的架構、參數等信息。讀寫模型網絡文件是深度學習流程中的關鍵環節,方便模型的訓練、測試、部署與共享。1. 主流框架讀寫方法(一)TensorFlow保存模型可以使用 tf.saved_model.sav…

智慧能源管理平臺的多層協同控制架構研究

摘要:針對微電網多源異構設備協同難題,提出一種“云-邊-端”三層智慧能源管理架構。平臺集成數據采集、策略優化與全景分析功能,支持光伏、儲能、充電樁等設備的動態調度,通過自適應算法實現防逆流、需量控制及峰谷套利等策略組合…

MySQL面試題及詳細答案 155道(021-040)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

2025年IntelliJ IDEA最新下載、安裝教程,附詳細圖文

文章目錄下載與安裝IDEA大家好,今天為大家帶來的是IntelliJ IDEA的下載、安裝教程,親測可用,喜歡的朋友可以點贊收藏哦下載與安裝IDEA 首先先到官網下載最新版的IntelliJ IDEA, 下載后傻瓜式安裝就好了 1、下載完后在本地找到該文件&#xf…

深入解析 Apache Tomcat 配置文件

前言 Apache Tomcat 作為最流行的開源 Java Web 應用服務器之一,其強大功能的背后離不開一系列精心設計的配置文件。正確理解和配置這些文件,是部署、管理和優化 Web 應用的關鍵。本篇博客將深入探討 Tomcat 的核心配置文件,涵蓋其結構、關鍵…

ThinkPHP8學習篇(一):安裝與配置

ThinkPHP有非常多的功能庫,我的學習策略很明確:不貪多求全,只掌握最核心的20%功能,解決80%的業務需求。所有學習都圍繞一個目標:夠用就行。遇到復雜問題時,再具體學習對應的內容。 作為ThinkPHP學習的第一…

【Python練習】075. 編寫一個函數,實現簡單的語音識別功能

075. 編寫一個函數,實現簡單的語音識別功能 075. 編寫一個函數,實現簡單的語音識別功能 安裝依賴庫 示例代碼 代碼說明 示例輸出 注意事項 使用 PocketSphinx 進行離線語音識別 注意事項 實現方法 使用SpeechRecognition庫實現語音識別 使用PyAudio和深度學習模型 使用Vosk離…

chrome的數據采集插件chat4data的使用

簡介: Chat4Data是一款Chrome擴展插件,支持AI網頁數據采集與分析。用戶可通過Chrome應用商店安裝后,在網頁上選擇區塊和字段進行數據抓取,設置采集頁數后導出結果。該工具適用于結構化數據提取,操作簡便,為…

《人形機器人的覺醒:技術革命與碳基未來》——類人關節設計:人工肌肉研發進展及一款超生物肌肉Hypermusclet的設計與制造

目錄:一、人工股肉的不同種類及工作原理和比較優勢二、人工肌肉研發的重點難點及成果進展和趨勢三、人工肌肉主要研發機構及其研發成果四、人工肌肉主要性能檢測表征能力及標準體系建設五、人工肌肉主要制造商及其產品性能優勢和供應能力六、人工肌肉在機器人市場應…