การติดตั้ง Pagekit CMS บน CentOS 7
ใช้ระบบที่แตกต่างกันอย่างไร Pagekit เป็น CMS โอเพนซอร์สที่เขียนด้วย PHP ซอร์สโค้ดของ Pagekit นั้นโฮสต์บน GitHub คำแนะนำนี้จะแสดงให้คุณเห็นว่า
RabbitMQ เป็นนายหน้าข้อความโอเพนซอร์ซที่รองรับ AMQP, STOMP และเทคโนโลยีการสื่อสารอื่น ๆ มีการใช้กันอย่างแพร่หลายในแอพพลิเคชั่นระดับองค์กรและสถาปัตยกรรมบริการไมโครที่ทันสมัยซึ่งทำหน้าที่เป็นช่องทางข้อความแบบอะซิงโครนัสระหว่างบริการไมโครที่แตกต่างกัน คู่มือนี้จะอธิบายวิธีที่คุณสามารถทำคลัสเตอร์ RabbitMQ บนเซิร์ฟเวอร์ CentOS 7 หลายเครื่องเพื่อจัดทำนายหน้าข้อความที่พร้อมใช้งานสูง ในบทช่วยสอนนี้เซิร์ฟเวอร์หนึ่งจะทำหน้าที่เป็นเซิร์ฟเวอร์หลักและเซิร์ฟเวอร์อื่นจะทำหน้าที่เป็นเซิร์ฟเวอร์มิเรอร์ในกรณีที่เซิร์ฟเวอร์หลักไม่พร้อมใช้งาน
ไฟร์วอลล์ CentOS ( firewalld
) ไม่อนุญาตการรับส่งข้อมูลขาเข้าใด ๆ โดยค่าเริ่มต้น ในการทำให้ RabbitMQ พร้อมใช้งานสำหรับระบบอื่น ๆ ทั้งในและนอกเครือข่ายและเพื่อให้เราสามารถเข้าถึงคอนโซลการจัดการอันดับแรกเราต้องเปิดพอร์ตบางพอร์ต
เว็บคอนโซลการจัดการอินเตอร์เฟซของ RabbitMQ 15672
ฟังโดยเริ่มต้นในพอร์ต เราต้องการให้คอนโซลการจัดการเปิดเผยต่อสาธารณะเพื่อให้เราสามารถเข้าถึงได้จากคอมพิวเตอร์ของเรา ดังนั้นเราจะแนะนำfirewalld
ให้เปิดพอร์ตอย่างถาวร15672
ในโซนสาธารณะ (ซึ่งเป็นค่าเริ่มต้นและโซนที่ใช้งานบนอินสแตนซ์ Vultr)
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
โหนด RabbitMQ จะต้องสามารถสื่อสารกันได้ เราต้องการเปิดพอร์ตที่จำเป็น แต่ผ่านเครือข่ายภายในเท่านั้น เราไม่ต้องการให้ใครก็ตามบนอินเทอร์เน็ตสามารถจัดการหรือติดต่อเซิร์ฟเวอร์ของเราโดยตรง คำสั่งต่อไปนี้สมมติว่าเซิร์ฟเวอร์ของเราอยู่ใน192.168.0.100/24
ซับเน็ต
บริการแรกคือepmd
การค้นพบบริการ peer 4369
ซึ่งฟังโดยเริ่มต้นในพอร์ต
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.0.100/24"
port protocol="tcp" port="4369" accept'
สำหรับการสื่อสารระหว่าง internode และ CLI RabbitMQ จะต้องสามารถสื่อสารผ่านพอร์ต25672
ได้
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.0.100/24"
port protocol="tcp" port="25672" accept'
เครื่องมือ CLI 35672-35682
สื่อสารผ่านพอร์ตช่วง
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.0.100/24"
port protocol="tcp" port="35672-35682" accept'
หากใช้งานของคุณต้องโปรโตคอล AMQP คุณยังจะต้องเปิดพอร์ตและ5671
5672
หากคุณจำเป็นต้องมีความสามารถในการสื่อสารผ่านโปรโตคอลอื่นคุณสามารถหาข้อมูลที่จำเป็นเกี่ยวกับความต้องการของเครือข่าย RabbitMQ ในเอกสาร RabbitMQ อย่างเป็นทางการ
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.0.100/24"
port protocol="tcp" port="5672" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.0.100/24"
port protocol="tcp" port="5671" accept'
ตอนนี้firewalld
มีการกำหนดค่าเราจำเป็นต้องสั่งให้โหลดการกำหนดค่าอีกครั้ง
sudo firewall-cmd --reload
ทำซ้ำขั้นตอนจากส่วนนี้ในเซิร์ฟเวอร์ทั้งหมด
rabbitmqadmin
ปลั๊กอินการจัดการมาพร้อมกับเครื่องมือ Python rabbitmqadmin
ที่สามารถติดตั้งได้ง่ายในระบบเมื่อเปิดใช้งานปลั๊กอินการจัดการ
sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin
คุณต้องใช้ชื่อโฮสต์ของเซิร์ฟเวอร์เพื่อระบุเซิร์ฟเวอร์เมื่อทำการรวมกลุ่ม โดยค่าเริ่มต้นเซิร์ฟเวอร์ไม่มีการบันทึก DNS และการเชื่อมต่อจะล้มเหลว หากต้องการเอาชนะสิ่งนี้อย่างรวดเร็วให้เพิ่มชื่อโฮสต์และมิเรอร์โฮสต์ใน/etc/hosts
ไฟล์โดยใช้เครื่องมือแก้ไขที่คุณชื่นชอบ
ตัวอย่างเช่นไฟล์โฮสต์ของต้นแบบของคุณอาจมีลักษณะดังต่อไปนี้ สังเกตเห็นสองเรคคอร์ดล่าสุดซึ่งอนุญาตให้เซิร์ฟเวอร์ระบุชื่อโฮสต์ด้วยกัน อย่าลืมเปลี่ยนที่อยู่ IP เป็นของคุณเอง
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 guest
::1 guest
127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME
ข้อกำหนดเบื้องต้นการนำเข้าเพื่ออนุญาตให้โหนดเข้าร่วมซึ่งกันและกันคือคุกกี้ Erlang ของโหนดทั้งหมดเหมือนกัน โดยค่าเริ่มต้นแต่ละโหนดจะได้รับคุกกี้ Erlang ที่ไม่ซ้ำกันดังนั้นคุณต้องกำหนดค่าใหม่บนทุกโหนด
คำสั่งต่อไปนี้จะตั้งค่าคุกกี้ Erlang เป็น " WE<3COOKIES
" แต่คุณสามารถเปลี่ยนได้ตามความต้องการของคุณ ทำสิ่งนี้กับเซิร์ฟเวอร์ทั้งหมด
sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"
รีสตาร์ท RabbitMQ บนเซิร์ฟเวอร์ทั้งหมดเพื่อให้แน่ใจว่าคุกกี้ Erlang ถูกโหลดใหม่อย่างถูกต้อง
sudo systemctl restart rabbitmq-server.service
ดำเนินการคำสั่งต่อไปนี้บนเซิร์ฟเวอร์ทั้งหมดยกเว้นบ��เซิร์ฟเวอร์หลัก สิ่งนี้จะทำให้โหนดเข้าร่วมเซิร์ฟเวอร์หลักและสร้างคลัสเตอร์
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app
ตรวจสอบว่าโหนดได้เข้าร่วมคลัสเตอร์โดยการรันคำสั่งต่อไปนี้
sudo rabbitmqctl cluster_status
โหนดทั้งหมดของคุณจะปรากฏในnodes
และrunning_nodes
ส่วนของเอาต์พุต จากนี้ไปคุณไม่จำเป็นต้องทำซ้ำขั้นตอนในแต่ละเซิร์ฟเวอร์อีกต่อไปการกำหนดค่าจะถูกทำมิเรอร์โดยอัตโนมัติไปยังโหนดอื่น
ตอนนี้เรามีคลัสเตอร์ของโหนด RabbitMQ เราสามารถใช้สิ่งนี้เพื่อสร้างคิวและแลกเปลี่ยนที่มีความพร้อมใช้งานสูงโดยการตั้งค่านโยบายใหม่ นโยบายนี้สามารถเพิ่มผ่าน RabbitMQ Management Console หรือใช้อินเตอร์เฟสบรรทัดคำสั่ง
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'
รายการต่อไปนี้จะอธิบายความหมายของแต่ละส่วนของคำสั่ง
-p "/"
: ใช้นโยบายนี้บน"/"
vhost (ค่าเริ่มต้นหลังการติดตั้ง)--priority 1
: ลำดับการใช้นโยบาย --apply-to "all"
: สามารถ"queues"
, "exchanges"
หรือ"all"
ha
: ชื่อที่เราให้กับนโยบายของเรา ".*"
: นิพจน์ทั่วไปที่ใช้ในการตัดสินใจว่าจะใช้คิวหรือการแลกเปลี่ยนนโยบายนี้อย่างไร ".*"
จะจับคู่อะไรก็ได้'{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'
: การแสดง JSON ของนโยบาย เอกสารนี้อธิบายว่าเราต้องการ - มี 2 โหนที่ข้อมูลจะถูกซิงโครไนซ์โดยอัตโนมัติโดยสรุปนโยบายนี้จะทำให้มั่นใจได้ว่าเราจะมี 2 สำเนาของข้อมูลในคิวหรือแลกเปลี่ยนตราบเท่าที่เรามีอย่างน้อย 2 โหนดและทำงาน หากคุณมีโหนดมากขึ้นคุณสามารถเพิ่มมูลค่าha-params
ได้ แนะนำให้ใช้โควรัม ( N/2 + 1
) ของโหนด การมีสำเนาข้อมูลของคุณมากขึ้นจะส่งผลให้มีดิสก์เพิ่มขึ้น i / o และการใช้งานสุทธิซึ่งอาจส่งผลให้ประสิทธิภาพการทำงานลดลง
หากคุณต้องการทำมิรเรอร์ข้อมูลไปยังโหนดทั้งหมดในคลัสเตอร์คุณสามารถใช้เอกสาร JSON ต่อไปนี้
'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'
หากคุณต้องการทำมิรเรอร์ข้อมูลเฉพาะโหนดที่เฉพาะเจาะจง (เช่น: node-1
และnode-2
) คุณสามารถใช้สิ่งต่อไปนี้
'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'
คุณสามารถเปลี่ยนนิพจน์ทั่วไปเพื่อกำหนดนโยบายต่าง ๆ ให้กับคิวที่ต่างกัน สมมติว่าเรามีสามโหนดต่อไปนี้:
จากนั้นเราสามารถสร้างนโยบายสองข้อซึ่งจะทำให้คิวมีชื่อที่ขึ้นต้นด้วย "ไคลเอนต์" เพื่อทำมิเรอร์ไปยังrabbit@client-ha
โหนดและคิวทั้งหมดที่มีชื่อซึ่งเริ่มต้นด้วย "ผลิตภัณฑ์" เพื่อทำมิเรอร์ไปยังrabbit@product-ha
โหนด
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}
ข้อสังเกตเล็กน้อยที่นี่: คิวพิเศษไม่เคยสะท้อนหรือทนทานใน RabbitMQ แม้ว่านโยบายนี้จะจับคู่กับคิวดังกล่าว คิวพิเศษจะถูกทำลายโดยอัตโนมัติเมื่อลูกค้ายกเลิกการเชื่อมต่อและจะไม่มีประโยชน์ในการทำซ้ำไปยังเซิร์ฟเวอร์อื่น หากเซิร์ฟเวอร์ล้มเหลวไคลเอ็นต์จะตัดการเชื่อมต่อจากนั้นและคิวจะถูกทำลายโดยอัตโนมัติ อินสแตนซ์ที่มิร์เรอร์จะถูกทำลายเช่นกัน
เพื่อทดสอบการตั้งค่าแบบคลัสเตอร์เราสามารถสร้างคิวใหม่โดยใช้อินเตอร์เฟสบรรทัดคำสั่งผ่านคอนโซลการจัดการ
sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true
นี้จะสร้างคิวคงทนในการเริ่มต้น/
vhost my-ha-queue
ที่มีชื่อ
รันคำสั่งต่อไปนี้และตรวจสอบผลลัพธ์ที่คิวได้กำหนดนโยบาย 'ha' ของเราไว้และมี pid บนต้นแบบและบนโหนดกระจก
sudo rabbitmqctl list_queues name policy state pid slave_pids
ตอนนี้เราสามารถเผยแพร่ข้อความไปยังคิวจากโหนดหลักและหยุด RabbitMQ บนโหนดหลัก
sudo rabbitmqadmin -u user_name -p password publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown
ตอนนี้รับกลับโดยเชื่อมต่อกับโหนดกระจก
sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue
ในที่สุดเราสามารถรีสตาร์ทโหนดหลักของเรา
sudo systemctl start rabbitmq-server.service
ดังที่ได้กล่าวมาแล้ว RabbitMQ จะสร้างผู้ใช้ของแขกโดยอัตโนมัติด้วยรหัสผ่านของผู้เยี่ยมชมเริ่มต้น มันจะเป็นการปฏิบัติที่ไม่ดีที่จะปล่อยให้ผู้ใช้เริ่มต้นนี้บนระบบเปิดเผยต่อสาธารณะ
sudo rabbitmqctl delete_user guest
ใช้ระบบที่แตกต่างกันอย่างไร Pagekit เป็น CMS โอเพนซอร์สที่เขียนด้วย PHP ซอร์สโค้ดของ Pagekit นั้นโฮสต์บน GitHub คำแนะนำนี้จะแสดงให้คุณเห็นว่า
TestLink เป็นระบบดำเนินการจัดการทดสอบบนเว็บโอเพ่นซอร์ส ช่วยให้ทีมงานประกันคุณภาพสามารถสร้างและจัดการกรณีทดสอบได้เช่นกัน
FTP ที่ปลอดภัยมากหรือเพียงแค่ vsFTPd เป็นซอฟต์แวร์น้ำหนักเบาที่มีความสามารถในการปรับแต่ง ในบทช่วยสอนนี้เราจะรักษาความปลอดภัยของข้อความ
CentOS ติดตามการพัฒนา Red Hat Enterprise Linux (RHEL) RHEL พยายามที่จะเป็นแพลตฟอร์มเซิร์ฟเวอร์ที่มั่นคงซึ่งหมายความว่าจะไม่รีบเร่งในการรวม
ในบางโอกาสผู้ดูแลระบบอาจต้องสร้างบัญชีผู้ใช้และ จำกัด การเข้าถึงเพื่อจัดการไฟล์ของตัวเองผ่าน sFTP เท่านั้น
ใช้ระบบที่แตกต่างกันอย่างไร Moodle เป็นแพลตฟอร์มการเรียนรู้โอเพนซอร์ซหรือระบบจัดการหลักสูตร (CMS) - ชุดซอฟต์แวร์โอเพ่นซอร์สฟรีที่ออกแบบมาเพื่อช่วย
ในบทความนี้ฉันจะอธิบายวิธีสร้าง LEMP สแต็คที่ได้รับการป้องกันโดย ModSecurity ModSecurity เป็นไฟร์วอลล์เว็บแอพพลิเคชันแบบโอเพนซอร์สที่มีประโยชน์
Introduction LAMP เป็นคำย่อที่ย่อมาจาก Linux, Apache, MySQL และ PHP ซอฟต์แวร์นี้เป็นโซลูชันโอเพ่นซอร์สที่ได้รับความนิยมสูงสุดสำหรับการติดตั้ง o
Icinga2 เป็นระบบการตรวจสอบที่มีประสิทธิภาพและเมื่อใช้ในโมเดลลูกค้าหลักจะสามารถแทนที่ความต้องการการตรวจสอบที่อิง NRPE ปรมาจารย์
ใช้ระบบที่แตกต่างกันอย่างไร Netdata เป็นดาวรุ่งพุ่งแรงในด้านการติดตามการวัดในระบบแบบเรียลไทม์ เมื่อเปรียบเทียบกับเครื่องมือชนิดเดียวกัน Netdata:
Buildbot เป็นโอเพ่นซอร์สเครื่องมือที่ใช้การรวมอย่างต่อเนื่องของ Python สำหรับการสร้างซอฟต์แวร์การทดสอบและการปรับใช้โดยอัตโนมัติ Buildbot ประกอบด้วยหนึ่งหรือหมอ
ยินดีต้อนรับสู่การกวดวิชา Vultr อื่น ที่นี่คุณจะได้เรียนรู้วิธีการติดตั้งและเรียกใช้เซิร์ฟเวอร์ SAMP คู่มือนี้เขียนขึ้นสำหรับ CentOS 6 ข้อกำหนดเบื้องต้นคุณจะต้อง
แอปพลิเคชั่น dotProject เป็นเครื่องมือการจัดการโครงการแบบโอเพ่นซอร์สบนเว็บ สำหรับตอนนี้มันวางจำหน่ายภายใต้ GPL ดังนั้นคุณสามารถปรับใช้และใช้งานได้บนบริการของคุณ
ใช้ระบบที่แตกต่างกันอย่างไร TaskWarrior เป็นเครื่องมือจัดการเวลาแบบโอเพ่นซอร์สที่เป็นการปรับปรุงแอพพลิเคชั่น Todo.txt และโคลนของมัน เนื่องมาจาก
ใช้ระบบที่แตกต่างกันอย่างไร Selfoss RSS Reader เป็นฟรีและเปิดตัวเองบนเว็บโฮสต์อเนกประสงค์, สตรีมสด, ตอบโต้กับผู้ใช้ได้, ฟีดข่าว (RSS / Atom) reade
ใช้ระบบที่แตกต่างกันอย่างไร Kanboard เป็นซอฟต์แวร์ซอฟต์แวร์การจัดการโครงการโอเพ่นซอร์สฟรีที่ออกแบบมาเพื่ออำนวยความสะดวกและมองเห็นภาพการทำงานเป็นทีม
บทช่วยสอนนี้จะกล่าวถึงกระบวนการติดตั้งเซิร์ฟเวอร์เกม Half Life 2 บนระบบ CentOS 6 ขั้นตอนที่ 1: การติดตั้งข้อกำหนดเบื้องต้นเพื่อตั้งค่า ou
GlusterFS เป็นระบบไฟล์ที่เชื่อมต่อกับเครือข่ายซึ่งช่วยให้คุณแบ่งปันไดรฟ์สองตัวในอุปกรณ์หลายตัวบนเครือข่ายได้อย่างมีประสิทธิภาพ ระบบไฟล์นี้คือ
ใช้ระบบที่แตกต่างกันอย่างไร ในขณะที่การโยกย้ายเว็บไซต์มักจะไม่มีปัญหาบางครั้งก็ยากที่จะโยกย้ายกล่องอีเมล นี่คือ CAS โดยเฉพาะอย่างยิ่ง
PrestaShop เป็นโซลูชันอีคอมเมิร์ซแบบโอเพ่นซอร์สที่ได้รับความนิยม คุณสามารถใช้มันเพื่อสร้างร้านค้าออนไลน์ของคุณเองได้ฟรี ในบทช่วยสอนนี้ฉันจะแสดงให้คุณเห็นว่า
ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน
การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane
ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+
อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ
เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม
13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data
คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true
ในขณะที่วิทยาศาสตร์มีวิวัฒนาการไปอย่างรวดเร็ว โดยรับช่วงต่อความพยายามของเราอย่างมาก ความเสี่ยงในการทำให้ตัวเองตกอยู่ในภาวะภาวะเอกฐานที่อธิบายไม่ได้ก็เพิ่มขึ้นเช่นกัน อ่านว่าภาวะเอกฐานอาจมีความหมายสำหรับเราอย่างไร
ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1
AI ในการดูแลสุขภาพได้ก้าวกระโดดอย่างมากจากทศวรรษที่ผ่านมา ดังนั้นอนาคตของ AI ในการดูแลสุขภาพจึงยังคงเติบโตทุกวัน