ansible服務及劇本編寫

来源:https://www.cnblogs.com/bananaaa/archive/2017/12/29/8143345.html
-Advertisement-
Play Games

前幾天由於工作上的事耽誤了幾天,特來追加更新 第1章 ansible軟體概念說明 python語言是運維人員必會的語言,而ansible是一個基於Python開發的自動化運維工具 (saltstack)。其功能實現基於SSH遠程連接服務;ansible可以實現批量系統配置、批量軟體部署、批量文件拷貝 ...


前幾天由於工作上的事耽誤了幾天,特來追加更新

第1章 ansible軟體概念說明

python語言是運維人員必會的語言,而ansible是一個基於Python開發的自動化運維工具 (saltstack)。其功能實現基於SSH遠程連接服務;ansible可以實現批量系統配置、批量軟體部署、批量文件拷貝、批量運行命令等功能

 

ansible軟體相關參考鏈接信息:

http://docs.ansible.com/ansible/intro_installation.html
http://www.ansible.com.cn/
http://docs.ansible.com/modules_by_category.html
http://www.ansible.cn/docs/

1.1 軟體特點概述

01.不需要單獨安裝客戶端(no agents),基於系統自帶的sshd服務,sshd就相當於ansible的客戶端

02.不需要服務端(no servers)

03.需要依靠大量的模塊實現批量管理

04.配置文件/etc/ansible/ansible.cfg(無需配置)

1.2 企業級生產場景批量管理-自動化管理方案

01.最簡單/最常用/最強大的選擇是ssh key+shell/pssh方案,一般中小型企業會用(50-100台以下規模企業)

a.利用ssh key執行命令,並將命令放在腳本裡面

b.利用ssh key執行命令,將命令放在腳本裡面,並加上相應迴圈語句或判斷語句

02.sina cfengine/puppet較早的批量管理工具(現在基本上沒有企業用)

03.門戶級別比較流行的,puppet批量管理工具(複雜/笨重)

04.saltstack批量管理工具;特點:簡單,功能強大(配置複雜)---趕集網/小米/ CDN公司

批量管理路線:ssh key-->cfengine-->puppet-->saltstack/ansible

註意:使用ansible軟體的前提是ssh key公鑰分發完成

1.3 實現集群規模架構一鍵部署自動化-步驟說明

01.5台伺服器先配置好(kickstart,cobbler無人值守安裝),高級實現雲計算(按需分配,動態調整)-openstack,kvm

02.linux基本優化,包括ssh服務(可以自動化實現)

03.創建密鑰信息(自動化免交互創建)

  ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1

04.進行批量分發密鑰(sshpass,expect自動化實現)

05.ansible軟體安裝(自動化實現)

06.網路服務自動化安裝(ansible實現)

  搭建yum倉庫,定製rpm包

 

第2章 ansible軟體實踐部署

ansible軟體部署安裝需求

01. 需要有epel源

    系統yum源(base epel--pip gem)

    sshpass---epel

02. ssh+key免密碼環境必須部署完成

2.1 ansible地址規劃

伺服器名稱

網卡eth0

網卡eth1

用途說明

m01

10.0.0.61

172.16.1.61

批量管理伺服器

nfs01

10.0.0.31

172.16.1.31

nfs共用存儲伺服器

backup

10.0.0.41

172.16.1.41

rsync備份伺服器

web01

10.0.0.8

172.16.1.8

web伺服器

說明:無特殊說明,子網掩碼均為255.255.255.0,一個C類網段254台機器規模

 

2.2 ①部署ssh+key免密碼登錄方式

利用非互動式工具實現批量分發公鑰與批量管理伺服器

1 sshpass -p123456 ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostChecking=no 172.16.1.41"
2 sshpass -p123456 ssh -o StrictHostChecking=no root@172.16.1.41 "uptime"
3 sshpass -p123456 scp -o StrictHostChecking=no /etc/hosts root@172.16.1.41:~
4 
5 <- -p:指定ssh連接用戶的密碼
6 <- -o:StrictHostChecking=no 避免第一次登錄出現公鑰檢查

2.3 ②受控端安裝ansible相關管理軟體

保留yum安裝的軟體

 1 sed -i.bak 's#keepcache=0#keepcache=1#g' /etc/yum.conf 2 grep keepcache /etc/yum.conf 

客戶端配置

 1 yum install libselinux-python -y 

說明:由於初始我們關閉了selinux安全管理軟體,故這裡需要操作此步驟。不裝這個軟體只能關閉selinux,但是無論什麼情況也不要開啟,工作環境下視情況而定

2.4 ③管理端m01安裝ansible軟體

 1 yum install ansible -y 

2.4.1 查看版本信息

1 [root@m01 ~]# ansible --version
2 ansible 2.3.2.0
3   config file = /etc/ansible/ansible.cfg   #告知ansible軟體配置文靜路徑
4   configured module search path = Default w/o overrides
5   python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

2.4.2 查看軟體相關安裝信息

1 [root@m01 ~]# rpm -ql ansible|egrep -v '/usr/share/|/usr/lib'
2 /etc/ansible
3 /etc/ansible/ansible.cfg   #ansible配置文件
4 /etc/ansible/hosts       #定義ansible可以管理的主機信息
5 /etc/ansible/roles       #主要在自動化部署多台主機時應用
6 
7 /usr/bin/ansible
8 /usr/bin/ansible-playbook   #執行ansible劇本命令

2.4.3 軟體安裝目錄信息

1 [root@m01 ~]# tree /etc/ansible/

2 /etc/ansible/

3 ├── ansible.cfg #ansible配置

4 ├── hosts #被ansible管理的主機名單(分組)

5 └── roles 

2.5 ④配置/etc/ansible/hosts文件

編輯ansible的主機配置文件hosts,添加主機組banana

1 cp /etc/ansible/hosts{,.bak}
2 
3 [root@m01 ~]# vim /etc/ansible/hosts   #配置文件編寫舉例
4 [banana]   #定義組名稱
5 172.16.1.8
6 172.16.1.31
7 172.16.1.41
8 [root@m01 ~]# tail /etc/ansible/hosts

2.6 ⑤實踐測試

1 [root@m01 ~]# ansible banana -m command -a "hostname"  #-m指定命令的模塊 -a指定參數(action)
2 172.16.1.31 | SUCCESS | rc=0 >>   #主機IP|請求狀態|返回值(0即成功,否則失敗)
3 nfs01                          #命令輸出結果
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6 web01
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 backup

2.6.1 ansible命令輸出信息說明

輸出內容為綠色,表示執行成功,僅查詢但沒有發生任何改變

輸出內容為黃色,表示執行成功,但對受控主機產生了影響,發生了配置改變

輸出內容為紅色:表示執行失敗!!!

 

第3章 ansible有關語法參數總結

3.1 語法格式圖示

 

 

3.2 軟體常用參數表

命令參數

參數說明

-m MODULE_NAME

相應名稱的模塊被執行(預設模塊為command);

-m後面是模塊的的名字

-a MODULE_ARGS

模塊參數信息;

-a後面是要執行的命令,也可以寫一個IP,針對一臺機器來執行命令

-C,--check

不做任何改變;反而,只是嘗試預言一些可能出現的改變

--syntax-check

執行語法檢查在劇本上,但是並不執行劇本

 

第4章 ansible常用模塊總結

常見模塊

模塊說明

command(重要模塊)

執行命令模塊,ansible命令執行預設模塊

shell(重要模塊)

執行shell腳本模塊

script(重要模塊)

把腳本發到客戶端然後執行;執行腳本命令在遠程伺服器上

copy(重要模塊)

把本地文件發送到遠端

file

設定文件屬性模塊

service

系統服務管理模塊

cron

計劃任務管理模塊

yum

yum軟體包安裝管理模塊

synchronize

使用rsync同步文件模塊

mount

掛載模塊

ansible幫助信息系統中查看方法:ansible-doc -l        <-查看全部模塊列表信息

ansible-doc -s [模塊]   <-查看指定模塊用法參數信息

 

4.1 ping模塊

 1 [root@m01 ~]# ansible banana -m ping
 2 172.16.1.41 | SUCCESS => {
 3     "changed": false,
 4     "ping": "pong"
 5 }
 6 
 7 172.16.1.31 | SUCCESS => {
 8     "changed": false,
 9     "ping": "pong"
10 }

說明:ansible連接測試成功結果

1 ansible 172.16.1.8 -m ping
2 
3 172.16.1.8 | UNREACHABLE! => {
4 "changed": false,
5 "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
6 "unreachable": true
7 }            

說明:ansible連接測試不成功結果

模塊概要:

a.ping是一個簡單的測試模塊,這個模塊在成功連接時返回"pong"信息。在劇本中沒有意義,但能夠使用ansible命令驗證登錄能力和用於python的配置

b.這並不是傳統的ICMP ping,而是先檢查是否通過ssh登錄節點,在檢查python版本是否滿足要求,能滿足要求就返回pong

連接正常返回pong通過幫助信息可以獲得:
ansible-doc -v ping 可以獲得該模塊的說明
ansible-doc -s file 參看模塊的具體信息

實例:

1 [root@m01 ~]# ansible-doc -v ping
2 Using /etc/ansible/ansible.cfg as config file
3 > PING    (/usr/lib/python2.6/site-packages/ansible/modules/system/ping.py)
4 
5 A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability to login and that a usable  python is configured. This is NOT ICMP ping, this is just a trivial test module.

4.2 command模塊

常見模塊

模塊說明

chdir

在執行命令之前,通過cd命令進入到指定目錄中

ansible banana -m command -a "chdir=/tmp ls"

create

定義一個文件是否存在,如果不存在運行相應命令;如果存在跳過此步驟

executable

改變shell使用command進行執行,並且執行時要使用絕對路徑

free_form

命令模塊採用自由形式命令運行;即可以輸入任意linux命令

removes

定義一個文件是否存在,如果存在運行相應命令;如果不存在跳過此步驟

warn

如果ansible配置文件中定義了命令警告,如果參數設置了no/false,將不會警告此行命令

 

實例01.

1 [root@m01 ~]# ansible all -m command -a "date"
2 172.16.1.8 | SUCCESS | rc=0 >>
3 Thu Oct 19 17:12:27 CST 2017
4 
5 172.16.1.31 | SUCCESS | rc=0 >>
6 Thu Oct 19 17:12:28 CST 2017
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 Thu Oct 19 17:12:27 CST 2017

實例02.

1 [root@m01 ~]# ansible banana -m command -a "chdir=/tmp pwd"
2 172.16.1.31 | SUCCESS | rc=0 >>
3 /tmp
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6 /tmp
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 /tmp

實例03.

 1 [root@m01 ~]# ansible banana -m command -a "pwd creates=/tmp/banana_file"
 2 
 3 172.16.1.31 | SUCCESS | rc=0 >>
 4 skipped, since /tmp/banana_file exists
 5 
 6 172.16.1.8 | SUCCESS | rc=0 >>
 7 /root
 8 
 9 172.16.1.41 | SUCCESS | rc=0 >>
10 /root

模塊概要:

a.命令模塊中的多個參數設置用空格進行分割

b.命令模塊中不能出現 "<", ">", "|", ";" and "&",如需使用這些功能,可用shell模塊

提示:command模塊作為預設模塊,在-m不指定具體模塊時,即採用預設模塊command

4.3 debug模塊

msg:設置列印自定義消息;如果忽略,則列印通用信息

 1 [root@m01 ~]# ansible banana -m debug -a "msg=banana"
 2 172.16.1.8 | SUCCESS => {
 3     "msg": "banana"
 4 }
 5 
 6 172.16.1.31 | SUCCESS => {
 7     "msg": "banana"
 8 }
 9 
10 172.16.1.41 | SUCCESS => {
11     "msg": "banana"
12 }

模塊概要:這個模塊會列印語句在執行時,並且能夠用於調試變數或表達式,可以不需要停止劇本;可以結合when指令一起進行調試

4.4 copy模塊

參數

參數說明

src

被覆制到遠程主機的本地文件。如果路徑是一個目錄,它將遞歸複製。如果路徑使用"/"來結尾,則只複製目錄里的內容,如果沒有使用"/"來結尾,則包含目錄在內的整個內容全部複製

remote_src

如果這個值設置為True,將到遠程/目標主機的機器上搜索

dest

必選項。要將源文件複製到的遠程主機的絕對路徑,如果源文件是一個目錄,那麼該路徑也必須是個目錄

owner

設置複製傳輸後的數據屬主信息

group

設置複製傳輸後的數據屬組信息

mode

設置文件數據許可權信息(註意4位)

backup

在覆蓋遠端伺服器文件之前,將遠端伺服器源文件備份,備份文件包含時間信息。有兩個選項:yes|no

content

用於替代"src”,可以直接設定指定文件的值

force

如果目標主機包含該文件,但內容不同。

如果設置為yes,則強制覆蓋;如果為no,則只有當目標主機的目標位置不存在該文件時才複製,預設為yes

directory_mode

遞歸設定目錄的許可權,預設為系統預設許可權

 

模塊概要:

a.copy模塊拷貝文件從本地或遠程機器到遠程機器的一個目錄區域中;使用fetch模塊來拷貝文件從遠程區域到本地

b.如果需要複製文件中插入的變數值,可以使用template模塊

說明:第一次執行時結果為黃色,即文件傳輸;第二次執行沒有發生任何改變,即為綠

實例01. 使用copy 模塊,將/etc/hosts文件傳輸到各個伺服器送,許可權修改為044,屬主屬組為banana

 1 [root@m01 ~]# ansible banana -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=banana group=banana "
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
 6     "dest": "/tmp/hosts",
 7     "gid": 500,
 8     "group": "banana",
 9     "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
10     "mode": "0600",
11     "owner": "banana",
12     "size": 357,
13     "src": "/root/.ansible/tmp/ansible-tmp-1508410846.63-224022812989166/source",
14     "state": "file",
15     "uid": 500
16 }

實例02.移動遠程主機上的文件remote_src=true參數

 1 [root@m01 ~]# ansible banana -m copy -a "remote_src=true src=/etc/hosts dest=/opt"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": false,
 5     "checksum": "545f587595b5c60d66243fca48e052ed34eed782",
 6     "dest": "/opt/hosts",
 7     "gid": 0,
 8     "group": "root",
 9     "md5sum": "fe08440ffebed54cab7a9b4cb3c3beda",
10     "mode": "0644",
11     "owner": "root",
12     "size": 371,
13     "src": "/etc/hosts",
14     "state": "file",
15     "uid": 0
16 }

實例03.定義文件中的內容content=bananaedu.com預設沒有換行

 1 [root@m01 ~]# ansible banana -m copy -a "content=bananaedu.com dest=/opt/banana.txt"
 2 
 3 172.16.1.31 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "291694840cd9f9c464263ea9b13421d8e74b7d00",
 6     "dest": "/opt/banana.txt",
 7     "gid": 500,
 8     "group": "banana",
 9     "md5sum": "0a6bb40847793839366d0ac014616d69",
10     "mode": "0600",
11     "owner": "banana",
12     "size": 13,
13     "src": "/root/.ansible/tmp/ansible-tmp-1508649097.07-180967115147583/source",
14     "state": "file",
15     "uid": 500
16 }

4.5 shell模塊

註意:shell模塊在遠程執行腳本時,遠程主機上一定要有相應的腳本

01.把腳本文件複製到遠程伺服器,執行遠程伺服器的腳本

1 [root@m01 ~]# ansible banana -m shell -a "/bin/sh /server/scripts/ssh-key.sh"
2 172.16.1.31 | SUCCESS | rc=0 >> 
3 fenfa 172.16.1.31 [  OK  ]
4 
5 fenfa 172.16.1.41 [  OK  ]  
6 
7 fenfa 172.16.1.8 [  OK  ]

02.把/etc/hosts文件中的內容重定向到/banana.txt

1 [root@m01 ~]# ansible banana -m shell -a "cat /etc/hosts >/banana.txt"
2 
3 172.16.1.41 | SUCCESS | rc=0 >>
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6  
7 172.16.1.31 | SUCCESS | rc=0 >>

說明:可支持command模塊不能完成的特殊符號,同時彙總所有的模塊

4.6 script模塊

 1 [root@m01 ~]# ansible banana -m script -a "/server/scripts/ip.sh"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "rc": 0,
 6     "stderr": "Shared connection to 172.16.1.8 closed.\r\n",
 7     "stdout_lines": [
 8         "eth0      Link encap:Ethernet  HWaddr 00:0C:29:4B:16:9D  ",
 9         "          inet addr:10.0.0.8  Bcast:10.0.0.255  Mask:255.255.255.0",
10         "          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1",
11         "          RX bytes:86527 (84.4 KiB)  TX bytes:76532 (74.7 KiB)",
12     ]
13 }

提示:script模塊與shell模塊的區別

shell:需要將腳本文件都知道遠端伺服器,然後sh執行遠端伺服器的腳本

script:不需要將腳本文件複製到遠端伺服器,實質是將腳本執行過程在遠端伺服器上進行執行

4.7 file模塊

參數

參數說明

owner

設置複製傳輸後的數據屬主信息

group

設置複製傳輸後的數據屬組信息

mode

設置文件數據許可權信息

dest

要創建的文件或目錄命令,以及路徑信息

src

指定要創建軟鏈接的文件信息

state

參數

參數說明

directory

所有不存在的子目錄將會被創建

file

文件不存在將不能被創建

link

符號鏈接(軟鏈接)將被創建或更改

hard

創建出硬鏈接

absent

目錄將被遞歸刪除以及文件,鏈接被取消

註意:定義文件不存在不會失敗,只是輸出沒有發生任何改變的結果

touch

如果路徑不存在將創建一個空文件,如果文件或目錄存在將接收更新的文件訪問和修改時間

 

實例01.創建遠端目錄

 1 [root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_dir state=directory"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "gid": 0,
 6     "group": "root",
 7     "mode": "0755",
 8     "owner": "root",
 9     "path": "/tmp/banana_dir",
10     "size": 4096,
11     "state": "directory",
12     "uid": 0
13 }

實例02.創建遠端文件

 1 [root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_file state=touch"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "dest": "/tmp/banana_file",
 6     "gid": 0,
 7     "group": "root",
 8     "mode": "0644",
 9     "owner": "root",
10     "size": 0,
11     "state": "file",
12     "uid": 0
13 }

4.8 yum模塊

參數

參數說明

name=name

指定安裝的軟體

state=installed

安裝

 

 1 [root@m01 ~]# ansible banana -m yum -a "name=nmap state=installed"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": false,
 5     "msg": "",
 6     "rc": 0,
 7     "results": [
 8         "nmap-2:5.51-6.el6.x86_64 providing nmap is already installed"
 9     ]
10 }

提示:這裡的state狀態均為過去式ed/d

4.9 service模塊

參數

參數說明

name=service name

服務的名稱

state=參數

停止服務 服務狀態信息為過去時

stared/stoped/restarted/reloaded

enabled=yes

設置開機自啟動

 

1 [root@m01 ~]# ansible banana -m service -a "name=crond state=restarted"
2 
3 172.16.1.8 | SUCCESS => {
4     "changed": true,
5     "name": "crond",
6     "state": "started"
7 }

說明:此時name即服務名,表示將名為crond的服務停止,並且取消開機自啟動

4.10 cron模塊

實例01.創建定時任務

 1 [root@m01 ~]# ansible banana -m cron -a "name=01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"   #name識別定時任務唯一性的標識,但只管理ansible信息
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "envs": [],
 6     "
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 內插字元串($) 實際上是C# 6.0對string.Format的改進,將字元串文本標識為內插字元串($)根據微軟的例子來看: 相當於原先的string.Format這種必須使用占位符,極容易出錯: 而使用$則不容易出現錯誤,可以這樣寫: 新增語法糖:(?.) 這也是C#6.0的語法,這叫Null ...
  • <!--Ad Injection:top--> <!--Ad Injection:random--> Xmind Pro 8是一款用於思維導圖和頭腦風暴軟體的精彩軟體。這個軟體是非常有用的應用程式,提供簡單的方法來繪製您的想法在圖形和組織任務。Xmind Pro 8許可證密鑰是非常簡單的軟體,它能夠 ...
  • 最近在網上看到很多ES集群的搭建方法,本人在這人使用Elasticsearch5.0.1版本,介紹如何搭建es集群並安裝head插件和其他插件安裝方法。 一、搭建環境(2台Centos7系統伺服器) 所需軟體 基礎環境JAVA 測試環境關閉防火牆和selinux 配置主機名和hosts文件 創建用戶 ...
  • 操作系統版本:CentOS Linux release 7.2.1511 (Core) SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打開Xshell工具,點擊“工具”,選擇“新建用戶密鑰生成嚮導”,如圖所示: 2.選擇密鑰類型為“RSA”,密鑰長度為“1 ...
  • 新建文本文檔,更改尾碼為“.bat”,寫入以下代碼: netsh interface ip set address name="本地連接" source=static 192.168.1.110 255.255.255.0 192.168.1.1 1 name是網卡的名字。 在WIN10中測試,要右 ...
  • Last login: Sun Dec 24 04:55:59 2017 1、安裝依賴 [root@node001 ~]# yum install -y perlLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfi ...
  • 一:什麼是 KVM KVM 是指基於 Linux 內核的虛擬機(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 組織開發的一種新的“虛擬機”實現方案。 2007 年 2 月發佈的 Linux 2.6.20 內核第一次包含了 KVM  ...
  • 問題: sudo apt-get install vim E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)E: Unable to lock the administratio ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...