ติดตั้ง TaskServer (taskd) บน CentOS 7

TaskWarrior เป็นเครื่องมือจัดการเวลาแบบโอเพ่นซอร์สที่เป็นการปรับปรุงแอพพลิเคชั่น Todo.txt และโคลนของมัน เนื่องจากความจริงที่ว่าคนทั่วไปใช้อุปกรณ์ / แพลตฟอร์มหลายตัวในตารางประจำวันของพวกเขาเป็นสิ่งสำคัญที่จะต้องมีความสามารถในการมีพื้นที่เก็บข้อมูลส่วนกลางที่ข้อมูลสามารถเข้าถึงและปรับปรุงจากอุปกรณ์ใด ๆ บทช่วยสอนนี้จะมุ่งเน้นไปที่การตั้งค่าเซิร์ฟเวอร์ทั้งสองชื่อ TaskServer (taskd) และไคลเอนต์ชื่อ TaskWarrior (ภารกิจ) ช่วยให้อุปกรณ์ไคลเอนต์หลายเครื่องสามารถเข้าถึงและแลกเปลี่ยนข้อมูลได้อย่างปลอดภัย

มันมีคุณสมบัติดังต่อไปนี้:

  • งานไม่ จำกัด
  • จัดลำดับความสำคัญของงาน
  • การกรองการค้นหา
  • แท็ก
  • ซิงค์อัตโนมัติ
  • สำรองข้อมูลอัตโนมัติ
  • การควบคุมและความเป็นส่วนตัว
  • การสื่อสารที่เข้ารหัส

ข้อกำหนดเบื้องต้น

  • อินสแตนซ์เซิร์ฟเวอร์ CentOS 7 x64
  • sudoผู้ใช้
  • ชื่อโดเมนที่ชี้ไปที่อินสแตนซ์ Vultr (taskd.example.com)

ขั้นตอนที่ 1: อัปเดตระบบ

ล็อกอินด้วยชื่อผู้ใช้ sudo ของคุณเพื่อติดตั้ง EPEL Repository และอัพเดตระบบดังต่อไปนี้:

sudo yum install epel-release -y
sudo yum clean all && sudo yum update -y

ขั้นตอนที่ 2: ติดตั้ง RPM Build และเครื่องมือสำหรับการสร้าง

ที่เก็บ EPEL ไม่มี RPM สำหรับ TaskServer (taskd) ดังนั้นเราต้องสร้างจากแหล่งลงในแพ็คเกจ RPM ด้วยตนเอง

  1. ติดตั้ง GCC, Make, RPM Build, การพัฒนาและเครื่องมือเซ็นชื่อ

    sudo yum install gcc gcc-c++ make rpmdevtools rpm-sign rpm-build -y
    
  2. สร้างไดเรกทอรี GnuPG ซึ่งจะเก็บไฟล์ GPG ที่จำเป็นสำหรับการลงชื่อ RPM ของเรา

    mkdir .gnupg
    
  3. เมื่อสร้างคีย์เราต้องการเอนโทรปีในระบบเพื่อสุ่มมันอย่างถูกต้อง ภูตสร้างเอนโทรปีที่จำเป็นจากrngd /dev/urandomดังนั้นมาติดตั้งกันเถอะ

    yum install rngd -y
    
  4. เริ่มต้นrngddaemon เพื่อสร้างเอนโทรปี -rจุดตัวเลือกที่จะแทนการเริ่มต้น/dev/urandom/dev/hwrng

    sudo rngd -r /dev/urandom
    
  5. สร้างรหัส --gen คีย์ตัวเลือกบอก gpg เพื่อสร้างคู่คีย์ใหม่

    gpg --gen-key
    
  6. สำหรับทางด้าน " กรุณาเลือกชนิดของคีย์ที่คุณต้องการ:ตัวเลือก" เลือก " (1) อาร์เอสและอาร์เอส (เริ่มต้น) " สำหรับประเภทที่สำคัญโดยการป้อน1และกดปุ่มย้อนกลับ / ใส่กุญแจ

  7. สำหรับทางด้าน " อะไร keysize ทำคุณต้องการ? (2048) " ตัวเลือกให้เลือกเริ่มต้นโดยการกดที่กลับ / ใส่กุญแจ

  8. สำหรับทางด้าน " โปรดระบุว่าระยะเวลาที่สำคัญที่ควรจะเป็นที่ถูกต้อง. " ตัวเลือกให้เลือกเริ่มต้นโดยการกดที่กลับ / ใส่กุญแจ

  9. สำหรับทางด้าน " ถูกต้องนี้หรือไม่? (y / N)ตัวเลือก" ป้อนYและกดกลับ / ใส่กุญแจ

  10. ภายใต้ " ชื่อจริง: " ใส่ชื่อที่คุณเลือกและกดปุ่มย้อนกลับ / ใส่กุญแจ

  11. ภายใต้ " ที่อยู่อีเมล์: " ป้อนที่อยู่อีเมลที่คุณเลือกและกดปุ่มย้อนกลับ / ใส่กุญแจ

  12. ส่วนความคิดเห็น:สามารถเว้นว่างไว้ถ้าคุณเลือก

  13. ทำการเปลี่ยนแปลงที่จำเป็นหากคุณไม่ได้ป้อนข้อมูลอย่างถูกต้อง หากคุณมีความพึงพอใจที่มีรหัสผู้ใช้ข้อมูลที่แสดงป้อนO (ตัวอักษร O ไม่เป็นศูนย์) และกดกลับ / ใส่กุญแจ

  14. GnuPG จะขอให้คุณสร้างและยืนยันรหัสผ่านสำหรับคู่กุญแจของคุณ

  15. หลังจากคุณป้อนรหัสผ่านแล้วคู่คีย์ GnuPG ของคุณจะถูกสร้างขึ้นภายใต้.gnupgไดเรกทอรีในไดเรกทอรีผู้ใช้ของคุณ

  16. รันคำสั่งนี้เพื่อแสดงเนื้อหาของ.gnupgไดเรกทอรี มันควรจะมีไดเรกทอรีดังต่อไปprivate-keys-v1.dและไฟล์pubring.gpg, pubring.gpg~, random_seed, secring.gpg, ,S.gpg-agenttrustdb.gpg

    ls -la .gnupg
    
  17. ส่งออกคู่คีย์ที่สร้างขึ้น --exportตัวเลือกสั่ง GnuPG เพื่อการส่งออกคู่คีย์ -aตัวเลือกสั่ง GnuPG การส่งออกคู่สำคัญในรูปแบบ ASCII เกราะ แทนที่ " Joe Q. Public " ด้วยชื่อที่คุณป้อนเมื่อสร้างคู่กุญแจในขั้นตอนที่ 10 ข้างต้น แทนที่ " jqpublic " ด้วยข้อความอะไรก็ตามที่คุณเลือก

    gpg --export -a 'Joe Q. Public' > RPM-GPG-KEY-jqpublic
    
  18. อิมพอร์ตคู่ของคีย์ลงในที่เก็บคีย์ RPM แทนที่ " jqpublic " ด้วยข้อความที่คุณเลือกในขั้นตอนที่ 17

    sudo rpm --import RPM-GPG-KEY-jqpublic
    
  19. ตรวจสอบว่ามีการเพิ่มคู่คีย์ลงในที่เก็บคีย์ RPM --q gpg-pubkeyตัวเลือกแบบสอบถามรอบต่อนาที GnuPG keystore % {name} -% {} รุ่น -% {} ปล่อย ->% {} สรุป \ nแสดงผลในรูปแบบที่อ่านมนุษย์

    rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
    
  20. ด้วยการสร้าง a .rpmmacros file, RPM สามารถปรับแต่งเพื่อดำเนินพฤติกรรมที่ได้รับมอบหมาย (ตัวอย่าง: ความสะดวกในการเซ็นชื่อโดยอัตโนมัติของ RPMs) ใช้nanoโปรแกรมเพื่อสร้างไฟล์

    nano .rpmmacros
    
  21. จากนั้นเพิ่มข้อความต่อไปนี้ลงใน.rpmmacrosไฟล์

    %_gpg_name  Joe Q. Public
    %_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}
    %_signature gpg
    %_topdir %(echo $HOME)/rpmbuild
    
  22. บันทึกเอกสารโดยป้อนชุดแป้นพิมพ์ต่อไปนี้ CTRL + Xคีย์ จากนั้นคีย์S สุดท้ายกลับ / ใส่กุญแจ

  23. คำสั่งด้านล่างนี้จะตั้งค่าสภาพแวดล้อมการสร้าง RPM ของคุณ นี่จะผนวกมาโครเพิ่มเติมลงใน.rpmmacrosไฟล์ที่คุณสร้างในขั้นตอนที่ # 20 และสร้างไดเรกทอรีที่ต้องการเพื่อสร้างและจัดเก็บ RPM

    rpmdev-setuptree
    
  24. รันคำสั่งนี้เพื่อแสดงเนื้อหาของไดเร็กทอรี rpmbuild มันควรจะมีดังต่อไปไดเรกทอรีแหล่ง , RPMS , BUILD , SRPMSและSPECS

    find rpmbuild
    
  25. ดาวน์โหลดซอร์สโค้ด TaskServer (taskd) ไปยังrpmbuild/SOURCESไดเร็กทอรี

    wget https://taskwarrior.org/download/taskd-1.1.0.tar.gz -P rpmbuild/SOURCES/
    
  26. ฆ่าrgndกระบวนการทำงาน

    sudo kill -9 rngd
    

ขั้นตอนที่ 3: สร้าง RPM TaskServer (taskd) จากแหล่งที่มา

  1. ในการสร้าง RPM ใหม่จากแหล่งที่มาจะต้องสร้างไฟล์ TaskServer (taskd) SPEC

    nano rpmbuild/SPECS/taskd.spec
    
  2. เพิ่มข้อความต่อไปนี้ลงในtaskd.specไฟล์

    Name:           taskd
    Version:        1.1.0
    Release:        1%{?dist}
    Summary:        Secure server providing multi-user, multi-client access to task data
    Group:          Applications/Productivity
    License:        MIT
    URL:            http://tasktools.org/projects/taskd.html
    Source0:        http://taskwarrior.org/download/%{name}-%{version}.tar.gz
    Source1:        taskd.service
    Source2:        taskd-config
    Source3:        taskd.xml
    
    BuildRequires:  cmake
    BuildRequires:  libuuid-devel
    BuildRequires:  gnutls-devel
    BuildRequires:  shadow-utils
    
    
    %if 0%{?rhel} && 0%{?rhel} <= 6
    # On rhel, we don't need systemd to build.  but we do on centos.        
    # ...just to define some macros
    %else
    BuildRequires:  systemd
    %endif
    
    # For certificate generation        
    Requires:       gnutls-utils
    
    # Systemd requires
    Requires(post):    systemd
    Requires(preun):   systemd
    Requires(postun):  systemd
    
    %description
    The TaskServer is a lightweight, secure server providing multi-user,
    multi-client access to task data.  This allows true syncing between desktop and
    mobile clients.
    
    Users want task list access from multiple devices running software of differing
    sophistication levels to synchronize data seamlessly.  Synchronization requires
    the ability to exchange transactions between devices that may not have
    continuous connectivity, and may not have feature parity.
    
    The TaskServer provides this and builds a framework to go several steps beyond
    merely synchronizing data.
    
    %prep
    %setup -q %{name}-%{version}
    
    %build
    %cmake
    make %{?_smp_mflags}
    
    %install
    make install DESTDIR=%{buildroot}
    
    mkdir -p %{buildroot}%{_sharedstatedir}/taskd/
    
    # Users will keep their keys here, but we copy some helpful scripts too.
    mkdir -p %{buildroot}%{_sysconfdir}/pki/taskd/
    cp -a pki/generate* %{buildroot}%{_sysconfdir}/pki/taskd/.
    
    mkdir -p %{buildroot}%{_localstatedir}/log/taskd/
    
    %if 0%{?rhel} && 0%{?rhel} <= 6
    # EL6 and earlier needs a sysvinit script
    # Also, no firewalld on old EL
    %else
    mkdir -p %{buildroot}%{_unitdir}/
    cp -a %{SOURCE1} %{buildroot}%{_unitdir}/taskd.service
    
    mkdir -p %{buildroot}%{_prefix}/lib/firewalld/services
    cp -a %{SOURCE3} %{buildroot}%{_prefix}/lib/firewalld/services/taskd.xml
    %endif
    
    mkdir -p %{buildroot}%{_sharedstatedir}/taskd/orgs/
    cp -a %{SOURCE2} %{buildroot}%{_sharedstatedir}/taskd/config
    
    rm -r %{buildroot}%{_datadir}/doc/taskd/
    
    %pre
    getent group taskd >/dev/null || groupadd -r taskd
    getent passwd taskd >/dev/null || \
        useradd -r -g taskd -d %{_sharedstatedir}/taskd/ -s /usr/bin/sh \
        -c "Task Server system user" taskd
    exit 0
    
    # Systemd scriptlets
    %if 0%{?rhel} && 0%{?rhel} <= 6
    # No systemd for el6
    %else
    
    %post
    %systemd_post taskd.service
    
    %preun
    %systemd_preun taskd.service
    
    %postun
    %systemd_postun_with_restart taskd.service
    
    %endif
    
    
    %files
    %doc AUTHORS COPYING ChangeLog NEWS README
    %{_bindir}/taskd
    %{_bindir}/taskdctl
    %{_mandir}/man1/taskd.1.*
    %{_mandir}/man1/taskdctl.1.*
    %{_mandir}/man5/taskdrc.5.*
    
    %{_sysconfdir}/pki/taskd/generate*
    
    %dir %attr(0750, taskd, taskd) %{_sysconfdir}/pki/taskd/
    %dir %attr(0750, taskd, taskd) %{_localstatedir}/log/taskd/
    
    %dir %attr(0750, taskd, taskd) %{_sharedstatedir}/taskd/
    %config(noreplace) %attr(0644, taskd, taskd) %{_sharedstatedir}/taskd/config
    %dir %attr(0750, taskd, taskd) %{_sharedstatedir}/taskd/orgs/
    
    %if 0%{?rhel} && 0%{?rhel} <= 6
    # No sysvinit files for el6
    %else
    %{_unitdir}/taskd.service
    %{_prefix}/lib/firewalld/services/taskd.xml
    %endif
    
    %changelog
    * Thu Aug 17 2017 Jarrett Graham <[email protected]> - 1.1.0
    - Initial packaging.
    
  3. RPM ยังต้องการไฟล์เพิ่มเติมสามไฟล์ที่จะต้องสร้างในrpmbuild/SOURCESไดเรกทอรี ใช้nanoโปรแกรมเพื่อสร้างtaskd-configไฟล์

    nano rpmbuild/SOURCES/taskd-config
    
  4. เพิ่มข้อความต่อไปนี้ลงในtaskd-configไฟล์

    # taskd configuration file
    confirmation=1
    verbose=1
    ip.log=on
    extensions=/usr/libexec/taskd
    queue.size=10
    request.limit=1048576
    server=0.0.0.0:53589
    root=/var/lib/taskd
    log=/var/log/taskd/taskd.log
    pid.file=/var/run/taskd.pid
    ca.cert=/etc/pki/taskd/ca.cert.pem
    server.cert=/etc/pki/taskd/server.cert.pem
    server.key=/etc/pki/taskd/server.key.pem
    server.crl=/etc/pki/taskd/server.crl.pem
    
  5. ใช้nanoโปรแกรมเพื่อสร้างtaskd.serviceไฟล์

    nano rpmbuild/SOURCES/taskd.service
    
  6. เพิ่มข้อความต่อไปนี้ลงในtaskd.serviceไฟล์

    [Unit]
    Description=Secure server providing multi-user, multi-client access to task data
    After=network.target
    Documentation=https://tasktools.org/projects/taskd.html
    
    [Service]
    ExecStart=/usr/bin/taskd server --data /var/lib/taskd
    Type=simple
    User=taskd
    Group=taskd
    
    [Install]
    WantedBy=multi-user.target
    
  7. ใช้nanoโปรแกรมเพื่อสร้างtaskd.xmlไฟล์

    nano rpmbuild/SOURCES/taskd.xml
    
  8. เพิ่มข้อความต่อไปนี้ลงในtaskd.xmlไฟล์

    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>Task-warrior server</short>
      <description>This option allows you to connect to the task warrior server.</description>
      <port protocol="tcp" port="53589"/>
    </service>
    
  9. เพื่อสร้าง TaskServer (taskd) RPM ต้องใช้แพ็คเกจสามแพ็กเกจสำหรับการสร้าง เรียกใช้คำสั่งด้านล่างเพื่อติดตั้งแพ็คเกจเหล่านั้น

    sudo yum install cmake libuuid-devel gnutls-devel gnutls-utils -y
    
  10. ตอนนี้ได้เวลาสร้างจากแหล่งและสร้าง RPM สำหรับ TaskServer (taskd) เรียกใช้คำสั่งด้านล่างเพื่อเริ่มต้น ควรใช้เวลาน้อยกว่าหนึ่งนาทีในอินสแตนซ์ CPU Vultr 1x เพื่อสร้าง RPMs ป้อนรหัสผ่าน GnuPG ที่คุณสร้างในขั้นตอน # 14 เพื่อลงนาม RPM เมื่อได้รับแจ้ง

    cd rpmbuild/SPECS/
    rpm -ba -sign taskd.spec
    
  11. ติดตั้ง TaskServer (taskd) RPM

    cd
    sudo rpm -ivh rpmbuild/RPMS/x86_64/taskd-1.1.0-1.el7.centos.x86_64.rpm
    

ขั้นตอนที่ 4: กำหนดค่า TaskServer (งาน)

  1. เพื่อให้ TaskServer (taskd) สื่อสารและซิงค์กับไคลเอนต์ TaskWarrior (งาน) คุณจะต้องใช้สคริปต์การสร้างที่พบ/etc/pki/taskd/ในการสร้างเซิร์ฟเวอร์ / ใบรับรองไคลเอ็นต์ / คีย์ /etc/pki/taskdยกระดับให้กับผู้ใช้รากใช้คำสั่งด้านล่างและไดเรกทอรีการเปลี่ยนแปลง

    sudo su -
    cd /etc/pki/taskd/
    
  2. ใช้nanoโปรแกรมเพื่อสร้างvarsไฟล์เพื่อสร้างรูท CA ที่ลงชื่อด้วยตนเอง

    nano vars
    

    เพิ่มข้อความต่อไปนี้ลงในไฟล์ vars เปลี่ยนองค์กร , CN , COUNTRY , STATEและLOCALITYให้เป็นที่พอใจของคุณ

    BITS=4096
    EXPIRATION_DAYS=365
    ORGANIZATION="Vultr.com Inc."
    CN=taskd.example.com
    COUNTRY=US
    STATE="New York"
    LOCALITY="New York"
    
  3. สร้างรูต CA ที่ลงนามด้วยตนเอง, ใบรับรอง, คีย์เซิร์ฟเวอร์และรายการเพิกถอนเซิร์ฟเวอร์ (ไม่บังคับ)

    ./generate.ca
    ./generate.server
    ./generate.crl
    

    คำสั่งเหล่านี้จะสร้างไฟล์ต่อไปนี้ ( ca.cert.pem, ca.key.pem, server.cert.pem, server.key.pemและserver.crl.pem) ภายใน/etc/pki/taskd/ไดเรกทอรี เพื่อให้ TaskServer (taskd) เริ่มทำงานต้องมีการปรับเปลี่ยนความเป็นเจ้าของและสิทธิ์ในใบรับรองและกุญแจที่สร้างในขั้นตอนที่ # 37 เพื่อให้ TaskServer (taskd) เข้าถึงได้ เรียกใช้คำสั่งด้านล่างเพื่อเปลี่ยน

    chown taskd.taskd ca.cert.pem ca.key.pem server.cert.pem server.crl.pem server.key.pem
    chmod 400 ca.cert.pem ca.key.pem server.cert.pem server.crl.pem server.key.pem
    
  4. เปิดใช้งานและเริ่มต้น TaskServer (taskd) daemon

    systemctl enable taskd
    systemctl start taskd
    
  5. เปิดพอร์ตในไฟร์วอลล์ TaskServer (taskd) ทำงาน

    firewall-cmd --permanent --zone=public --add-port=53589/tcp
    firewall-cmd --reload
    

    ตอนนี้ TaskServer (taskd) ได้รับการติดตั้งและตั้งค่าบนอินสแตนซ์ CentOS 7 ของคุณแล้ว

ขั้นตอนที่ 5: กำหนดค่าใบรับรองไคลเอ็นต์และคีย์ของ TaskWarrior

  1. คุณต้องสร้างใบรับรองไคลเอ็นต์และคีย์เพื่อเข้ารหัสการสื่อสารระหว่าง TaskServer (taskd) และ TaskWarrior (งาน) เรียกใช้คำสั่งด้านล่างเพื่อสร้างใบรับรองไคลเอ็นต์และคีย์ แทนที่NAMEด้วยชื่อที่คุณจำได้ง่ายสำหรับลูกค้าของคุณ

    generate.client NAME
    

    คำสั่งนี้จะสร้างไฟล์ต่อไปนี้ ( NAME.cert.pem, NAME.key.pem) ภายใน/etc/pki/taskd/ไดเรกทอรี

  2. คัดลอกไฟล์ต่อไปนี้ไปยังไดเรกทอรีผู้ใช้ของคุณเปลี่ยนความเป็นเจ้าของและสิทธิ์ ทดแทนjoeqpublicด้านล่างด้วยไดเรกทอรีชื่อผู้ใช้จริงของคุณ

    cp ca.cert.pem NAME.cert.pem NAME.key.pem /home/joeqpublic/
    chown joeqpublic.joeqpublic /home/joeqpublic/*.pem
    chmod 400 /home/joeqpublic/*.pem
    
  3. สร้างไฟล์ zip ของใบรับรองและคีย์

    zip certficates.zip ca.cert.pem NAME.cert.pem NAME.key.pem
    
  4. ใช้scp(บรรทัดคำสั่ง) หรือWinSCP (ส่วนหน้า GUI สำหรับ SCP) เพื่อดาวน์โหลดcertificates.zipไฟล์จากอินสแตนซ์ CentOS ของคุณไปยังอุปกรณ์ไคลเอนต์ของคุณ (คอมพิวเตอร์ / แล็ปท็อป / สมาร์ทโฟน)

  5. ดร็อปสิทธิพิเศษรูทและดำเนินการคำสั่งที่เหลือในฐานะผู้ใช้ปกติของคุณ

    exit
    

    TaskServer (taskd) ตอนนี้มีการตั้งค่าและพร้อมสำหรับไคลเอนต์ TaskWarrior (งาน) เพื่อเชื่อมต่อ

ขั้นตอนที่ 6: สร้างกลุ่ม TaskWarrior และผู้ใช้ของคุณ

  1. ในการสร้างลบแก้ไขและซิงค์งานของคุณคุณจะต้องมีบัญชีผู้ใช้ อย่างไรก็ตามก่อนที่คุณจะสามารถเพิ่มผู้ใช้คุณจะต้องสร้างกลุ่มองค์กรก่อน เรียกใช้คำสั่งด้านล่างเพื่อสร้างกลุ่มแรกของคุณ แทนที่GROUPด้วยชื่อที่จดจำได้ง่าย

  2. สิ่งสำคัญ! taskdคำสั่งเพื่อสร้างกลุ่ม / ผู้ใช้จะต้องวิ่งเป็นtaskdผู้ใช้ การรันในฐานะผู้ใช้รูทจะสร้างไดเรกทอรีและไฟล์ที่ผู้ใช้รูทเป็นเจ้าของ/var/lib/taskd/orgsซึ่งจะป้องกันไม่ให้ไคลเอนต์ TaskWarrior (งาน) สามารถเข้าถึงหรือแก้ไขอะไรก็ได้ในกลุ่มที่พวกเขาได้รับมอบหมาย การเข้าถึงจะถูกปฏิเสธ

    sudo -u taskd taskd add org GROUP --data /var/lib/taskd
    
  3. ตอนนี้คุณได้สร้างกลุ่มแรกให้สร้างผู้ใช้คนแรกของคุณ เรียกใช้คำสั่งด้านล่างเพื่อสร้างผู้ใช้ที่กำหนดให้กับกลุ่มที่สร้างในขั้นตอนที่ 1 คัดลอกและวางรหัสผู้ใช้ที่สร้างขึ้นผู้ใช้และกลุ่มในไฟล์ข้อความ ทำซ้ำกระบวนการเพื่อเพิ่มผู้ใช้เพิ่มเติม

    sudo -u taskd taskd add user GROUP 'Joe. Q. Public' --data /var/lib/taskd
    

ขั้นตอนที่ 7: ติดตั้งไคลเอนต์ TaskWarrior

Windows 10 (สร้างในภายหลังกว่า 1607+)

ในการใช้งาน TaskWarrior (งาน) บน Windows 10 คุณจะต้องติดตั้งระบบย่อย Windows สำหรับ Linuxจาก Windows Store

  1. ในการติดตั้ง WSL จำเป็นต้องมีพรอมต์ Powershell กดคีย์หน้าต่างและประเภทPowerShell คลิกขวาที่ Windows Powershell ที่ด้านบนของผลลัพธ์แล้วเลือก " Run as administrator " ที่ควบคุมบัญชีผู้ใช้คลิก prompt ใช่ คัดลอกและวางข้อความที่พบด้านล่างในหน้าต่าง Powershell เมื่อ WSL ติดตั้งเสร็จแล้วให้กดปุ่มYเพื่อรีสตาร์ท Windows

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    
  2. หลังจากรีบูตเปิดคำสั่งที่รวดเร็วและพิมพ์คำสั่งต่อไปทุบตี สิ่งนี้จะติดตั้ง Ubuntu บน Windows กดY สำคัญ ตอนนี้จะถูกดาวน์โหลดและแตกไฟล์ เลือกชื่อผู้ใช้และรหัสผ่าน

    bash
    
  3. ตอนนี้ได้เวลาติดตั้ง TaskWarrior (ภารกิจ) พิมพ์คำสั่งต่อไปนี้ภายในคอนโซล

    sudo apt-get install task -y
    
  4. พิมพ์exitสองครั้งเพื่อออกจาก bash terminal และพรอมต์คำสั่ง Windows

  5. คลิกปุ่มเมนูเริ่ม พิมพ์อูบุนตู คลิกขวาที่ทุบตีบน Ubuntu บน Windows เลือกPin แถบงาน สิ่งนี้ให้ความสะดวกในการเข้าถึง bash อย่างรวดเร็วเพื่อเข้าถึง TaskWarrior (งาน)

  6. คลิกที่ไอคอนอูบุนตูที่คุณเพิ่งสร้างบนทาสก์บาร์ จะเป็นการเปิดหน้าต่างเทอร์มินัลที่ใช้ Bash พิมพ์คำสั่งต่อไปนี้ด้านล่างเพื่อสร้างไดเรกทอรีข้อมูล TaskWarrior (task) ( ~/.task/) และไฟล์การกำหนดค่า ( .taskrc)

    task version
    yes
    
  7. คุณต้องย้ายcertificates.zipไฟล์ที่คุณบันทึกไว้ก่อนหน้านี้ระหว่างการตั้งค่า TaskServer ไปยัง~/.taskd/ไดเรกทอรีภายในไดเรกทอรีผู้ใช้ของคุณ หากต้องการแตกไฟล์จากไฟล์ zip ให้ติดตั้งunzipโปรแกรมก่อน คัดลอกและวางคำสั่งต่อไปนี้ด้านล่างแทนตำแหน่งจริงของสำเนาของcertificates.zipคุณ

    sudo apt-get install unzip -y
    cp /mnt/c/User/WINDOWSUSER/Desktop/certificates.zip .
    cd .task
    unzip ../certificates.zip
    cd
    
  8. พิมพ์คำสั่งต่อไปนี้เพื่อตั้งค่า TaskWarrior (task) ขึ้นเพื่อเชื่อมต่อกับ TaskServer (taskd) แทนที่NAMEกับสิ่งที่คุณได้รับการตั้งชื่อใบรับรองและคีย์ของกลุ่มกับกลุ่มที่คุณสร้างขึ้นโจ Q. สาธารณะด้วยชื่อผู้ใช้ที่คุณได้สร้างขึ้นและXXXXXXXX-XXXXXXXX-XXXX-xxxxxxxxxxxมีคีย์ที่ได้รับมอบหมายเมื่อผู้ใช้ของคุณ ถูกสร้างขึ้นบนเซิร์ฟเวอร์ TaskWarrior (taskd)

    task config taskd.ca -- ~/.task/ca.cert.pem
    task config taskd.certificate -- ~/.task/**NAME**.cert.pem
    task config taskd.key -- ~/.task/**NAME**.key.pem
    task config taskd.server -- taskd.example.com:53589
    task config taskd.credentials -- GROUP/Joe Q. Public/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX
    
  9. ตอนนี้ได้เวลาซิงค์ TaskWarrior (งาน) กับ TaskServer (taskd) เรียกใช้คำสั่งด้านล่างเพื่อเริ่มต้นฐานข้อมูล

    task sync init
    

    การซิงค์ระหว่างไคลเอ็นต์ TaskWarrior (งาน) ของคุณและ TaskServer (taskd) ได้รับการตั้งค่าบนแพลตฟอร์ม Windows 10

Android

ในการใช้ TaskWarrior (งาน) บน Android คุณจะต้องติดตั้งTaskWarrior สำหรับ Androidจาก Google Play Store

  1. ติดตั้ง TaskWarrior (งาน) สำหรับแอพ Android บน Google Play Store

  2. เปิด TaskWarrior (งาน) สำหรับแอพ Android

  3. คุณจะได้รับแจ้งโดย app เพื่อสร้างบัญชีกับชื่อบัญชีที่ต้องการอยากมี ป้อนชื่อที่คุณเลือกเมื่อคุณสร้างชื่อผู้ใช้สำหรับผู้ใช้ TaskServer (taskd)

  4. ปล่อยให้โฟลเดอร์ข้อมูลเป็นค่าเริ่มต้นของ<< สร้างใหม่ >>และแตะปุ่มตกลง ใช้แอปจัดการไฟล์เพื่อสร้างโฟลเดอร์ในรากจัดเก็บข้อมูลของคุณ (เช่น: /storage/emulate/0/Certs) ส่งแอพไปที่พื้นหลัง

  5. คัดลอกcertificates.zipไฟล์ที่คุณสร้างไว้ก่อนหน้านี้และแยกเนื้อหาในไดเรกทอรีของคุณที่สร้างขึ้นในขั้นตอนที่ 4

  6. นำหน้าแอป "TaskWarrior (งาน) สำหรับ Android" แล้วแตะเมนูที่มุมบนซ้ายของแอปเพื่อเปิด

  7. เลื่อนลงไปที่ด้านล่างของเมนูแล้วแตะตัวเลือกการตั้งค่า

  8. สิ่งนี้จะเปิดตัวแก้ไขข้อความแอป TaskWarrior สำหรับ Android แบบง่าย

  9. ป้อนตัวเลือกต่อไปนี้เพื่อตั้งค่าการซิงค์กับ TaskServer ของคุณ (taskd) แทนที่ตัวแปรtaskd.ca/ taskd.certificate/ taskd.key` ด้วยเส้นทางไดเรกทอรี ca / ​​certificate / key จริง, NAMEด้วยสิ่งที่คุณตั้งชื่อใบรับรองและคีย์ของคุณ, GROUPกับกลุ่มที่คุณสร้างขึ้นJoe Q. Publicด้วยชื่อผู้ใช้ที่คุณสร้างและXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXพร้อมคีย์ที่กำหนดเมื่อคุณสร้างผู้ใช้ของคุณบนเซิร์ฟเวอร์ TaskWarrior (taskd)

    taskd.ca=/storage/emulate/0/Certs/ca.cert.pem
    taskd.certificate=/storage/emulate/0/Certs/NAME.cert.pem
    taskd.credentials=GROUP/Joe Q. Public/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    taskd.key=/storage/emulate/0/Certs/NAME.key.pem
    taskd.server=taskd.example.com:53589
    
  10. แตะที่ไอคอนฟลอปปี้ดิสก์เพื่อบันทึกการตั้งค่าของคุณ

การซิงค์ระหว่างไคลเอ็นต์ TaskWarrior (งาน) และ TaskServer (taskd) ของคุณได้รับการตั้งค่าบนแพลตฟอร์ม Android

ลินุกซ์

  1. ดูที่ส่วน TaskWarrior (งาน) การกระจายการติดตั้งสำหรับคุณโดยเฉพาะการกระจาย Linux

  2. เปิดหน้าต่างเทอร์มินัล พิมพ์คำสั่งต่อไปนี้ด้านล่างเพื่อสร้างไดเรกทอรีข้อมูล TaskWarrior (task) ( ~/.task/) และไฟล์การกำหนดค่า ( .taskrc)

    task version
    yes
    
  3. คุณต้องย้ายcertificates.zipไฟล์ที่คุณบันทึกไว้ก่อนหน้านี้ในการตั้งค่า TaskServer ไปยัง~/.taskd/ไดเรกทอรีภายในไดเรกทอรีผู้ใช้ของคุณ หากต้องการแตกไฟล์จากไฟล์ zip ให้ติดตั้งunzipโปรแกรมก่อนเพื่อการแจกจ่ายเฉพาะของคุณ คัดลอกและวางคำสั่งต่อไปนี้ด้านล่างเพื่อแทนที่ตำแหน่งที่แท้จริงของสำเนาของcertificates.zipคุณ

    cp /location/of/certificates.zip .
    cd .task
    unzip ../certificates.zip
    cd
    
  4. พิมพ์คำสั่งต่อไปนี้เพื่อตั้งค่า TaskWarrior (task) ขึ้นเพื่อเชื่อมต่อกับ TaskServer (taskd) แทนที่NAMEกับสิ่งที่คุณได้รับการตั้งชื่อใบรับรองและคีย์ของกลุ่มกับกลุ่มที่คุณสร้างขึ้นโจ Q. สาธารณะด้วยชื่อผู้ใช้ที่คุณได้สร้างขึ้นและXXXXXXXX-XXXXXXXX-XXXX-xxxxxxxxxxxมีคีย์ที่ได้รับมอบหมายเมื่อผู้ใช้ของคุณ ถูกสร้างขึ้นบนเซิร์ฟเวอร์ TaskWarrior (taskd)

    task config taskd.ca -- ~/.task/ca.cert.pem
    task config taskd.certificate -- ~/.task/**NAME**.cert.pem
    task config taskd.key -- ~/.task/**NAME**.key.pem
    task config taskd.server -- taskd.example.com:53589
    task config taskd.credentials -- GROUP/Joe Q. Public/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX
    
  5. ตอนนี้ได้เวลาซิงค์ TaskWarrior (งาน) กับ TaskServer (taskd) เรียกใช้คำสั่งด้านล่างเพื่อเริ่มต้นฐานข้อมูล

    task sync init
    

ภาคผนวก: หากคุณเรียกใช้ Gnome Shell มีส่วนขยายที่เรียกว่าTaskWhisperที่รวมเข้ากับ TaskWarrior (ภารกิจ)

การซิงค์ระหว่างไคลเอนต์ TaskWarrior (งาน) ของคุณและ TaskServer (taskd) ได้รับการตั้งค่าบน distro Linux ที่คุณโปรดปราน



การติดตั้ง Pagekit CMS บน CentOS 7

การติดตั้ง Pagekit CMS บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Pagekit เป็น CMS โอเพนซอร์สที่เขียนด้วย PHP ซอร์สโค้ดของ Pagekit นั้นโฮสต์บน GitHub คำแนะนำนี้จะแสดงให้คุณเห็นว่า

วิธีการติดตั้ง TestLink บน CentOS 7

วิธีการติดตั้ง TestLink บน CentOS 7

TestLink เป็นระบบดำเนินการจัดการทดสอบบนเว็บโอเพ่นซอร์ส ช่วยให้ทีมงานประกันคุณภาพสามารถสร้างและจัดการกรณีทดสอบได้เช่นกัน

วิธีการที่ปลอดภัย vsFTPd ด้วย SSL / TLS

วิธีการที่ปลอดภัย vsFTPd ด้วย SSL / TLS

FTP ที่ปลอดภัยมากหรือเพียงแค่ vsFTPd เป็นซอฟต์แวร์น้ำหนักเบาที่มีความสามารถในการปรับแต่ง ในบทช่วยสอนนี้เราจะรักษาความปลอดภัยของข้อความ

วิธีการติดตั้ง GCC บน CentOS 6

วิธีการติดตั้ง GCC บน CentOS 6

CentOS ติดตามการพัฒนา Red Hat Enterprise Linux (RHEL) RHEL พยายามที่จะเป็นแพลตฟอร์มเซิร์ฟเวอร์ที่มั่นคงซึ่งหมายความว่าจะไม่รีบเร่งในการรวม

ตั้งค่าบัญชีผู้ใช้ SFTP เท่านั้นบน CentOS 7

ตั้งค่าบัญชีผู้ใช้ SFTP เท่านั้นบน CentOS 7

ในบางโอกาสผู้ดูแลระบบอาจต้องสร้างบัญชีผู้ใช้และ จำกัด การเข้าถึงเพื่อจัดการไฟล์ของตัวเองผ่าน sFTP เท่านั้น

วิธีการติดตั้ง Moodle บน CentOS 7

วิธีการติดตั้ง Moodle บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Moodle เป็นแพลตฟอร์มการเรียนรู้โอเพนซอร์ซหรือระบบจัดการหลักสูตร (CMS) - ชุดซอฟต์แวร์โอเพ่นซอร์สฟรีที่ออกแบบมาเพื่อช่วย

ติดตั้ง NGINX พร้อม ModSecurity บน CentOS 6

ติดตั้ง NGINX พร้อม ModSecurity บน CentOS 6

ในบทความนี้ฉันจะอธิบายวิธีสร้าง LEMP สแต็คที่ได้รับการป้องกันโดย ModSecurity ModSecurity เป็นไฟร์วอลล์เว็บแอพพลิเคชันแบบโอเพนซอร์สที่มีประโยชน์

วิธีการติดตั้ง Apache, MySQL และ PHP บน CentOS 6

วิธีการติดตั้ง Apache, MySQL และ PHP บน CentOS 6

Introduction LAMP เป็นคำย่อที่ย่อมาจาก Linux, Apache, MySQL และ PHP ซอฟต์แวร์นี้เป็นโซลูชันโอเพ่นซอร์สที่ได้รับความนิยมสูงสุดสำหรับการติดตั้ง o

การปรับเปลี่ยน Icinga2 ให้ใช้โมเดลต้นแบบ / ไคลเอ็นต์บน CentOS 6 หรือ CentOS 7

การปรับเปลี่ยน Icinga2 ให้ใช้โมเดลต้นแบบ / ไคลเอ็นต์บน CentOS 6 หรือ CentOS 7

Icinga2 เป็นระบบการตรวจสอบที่มีประสิทธิภาพและเมื่อใช้ในโมเดลลูกค้าหลักจะสามารถแทนที่ความต้องการการตรวจสอบที่อิง NRPE ปรมาจารย์

การติดตั้ง Netdata บน CentOS 7

การติดตั้ง Netdata บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Netdata เป็นดาวรุ่งพุ่งแรงในด้านการติดตามการวัดในระบบแบบเรียลไทม์ เมื่อเปรียบเทียบกับเครื่องมือชนิดเดียวกัน Netdata:

วิธีการติดตั้งและกำหนดค่า Buildbot บน CentOS 7

วิธีการติดตั้งและกำหนดค่า Buildbot บน CentOS 7

Buildbot เป็นโอเพ่นซอร์สเครื่องมือที่ใช้การรวมอย่างต่อเนื่องของ Python สำหรับการสร้างซอฟต์แวร์การทดสอบและการปรับใช้โดยอัตโนมัติ Buildbot ประกอบด้วยหนึ่งหรือหมอ

ติดตั้งเซิร์ฟเวอร์มัลติเพลเยอร์ SA-MP San Andreas บน CentOS 6

ติดตั้งเซิร์ฟเวอร์มัลติเพลเยอร์ SA-MP San Andreas บน CentOS 6

ยินดีต้อนรับสู่การกวดวิชา Vultr อื่น ที่นี่คุณจะได้เรียนรู้วิธีการติดตั้งและเรียกใช้เซิร์ฟเวอร์ SAMP คู่มือนี้เขียนขึ้นสำหรับ CentOS 6 ข้อกำหนดเบื้องต้นคุณจะต้อง

ติดตั้ง dotProject บน CentOS 7

ติดตั้ง dotProject บน CentOS 7

แอปพลิเคชั่น dotProject เป็นเครื่องมือการจัดการโครงการแบบโอเพ่นซอร์สบนเว็บ สำหรับตอนนี้มันวางจำหน่ายภายใต้ GPL ดังนั้นคุณสามารถปรับใช้และใช้งานได้บนบริการของคุณ

วิธีการติดตั้ง Selfoss RSS Reader บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Selfoss RSS Reader บน CentOS 7 LAMP VPS

ใช้ระบบที่แตกต่างกันอย่างไร Selfoss RSS Reader เป็นฟรีและเปิดตัวเองบนเว็บโฮสต์อเนกประสงค์, สตรีมสด, ตอบโต้กับผู้ใช้ได้, ฟีดข่าว (RSS / Atom) reade

วิธีการติดตั้ง Kanboard บน CentOS 7

วิธีการติดตั้ง Kanboard บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Kanboard เป็นซอฟต์แวร์ซอฟต์แวร์การจัดการโครงการโอเพ่นซอร์สฟรีที่ออกแบบมาเพื่ออำนวยความสะดวกและมองเห็นภาพการทำงานเป็นทีม

การตั้งค่าเซิร์ฟเวอร์ Half Life 2 บน CentOS 6

การตั้งค่าเซิร์ฟเวอร์ Half Life 2 บน CentOS 6

บทช่วยสอนนี้จะกล่าวถึงกระบวนการติดตั้งเซิร์ฟเวอร์เกม Half Life 2 บนระบบ CentOS 6 ขั้นตอนที่ 1: การติดตั้งข้อกำหนดเบื้องต้นเพื่อตั้งค่า ou

ไดรฟ์ที่แชร์ความพร้อมใช้งานสูงใช้ Vultr Block Storage และ GlusterFS

ไดรฟ์ที่แชร์ความพร้อมใช้งานสูงใช้ Vultr Block Storage และ GlusterFS

GlusterFS เป็นระบบไฟล์ที่เชื่อมต่อกับเครือข่ายซึ่งช่วยให้คุณแบ่งปันไดรฟ์สองตัวในอุปกรณ์หลายตัวบนเครือข่ายได้อย่างมีประสิทธิภาพ ระบบไฟล์นี้คือ

วิธีโยกย้ายกล่องจดหมายอย่างง่ายดายด้วย Imapsync บน CentOS 7

วิธีโยกย้ายกล่องจดหมายอย่างง่ายดายด้วย Imapsync บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร ในขณะที่การโยกย้ายเว็บไซต์มักจะไม่มีปัญหาบางครั้งก็ยากที่จะโยกย้ายกล่องอีเมล นี่คือ CAS โดยเฉพาะอย่างยิ่ง

วิธีการติดตั้ง PrestaShop บน CentOS 7

วิธีการติดตั้ง PrestaShop บน CentOS 7

PrestaShop เป็นโซลูชันอีคอมเมิร์ซแบบโอเพ่นซอร์สที่ได้รับความนิยม คุณสามารถใช้มันเพื่อสร้างร้านค้าออนไลน์ของคุณเองได้ฟรี ในบทช่วยสอนนี้ฉันจะแสดงให้คุณเห็นว่า

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true

ภาวะเอกฐานทางเทคโนโลยี: อนาคตอันห่างไกลของอารยธรรมมนุษย์?

ภาวะเอกฐานทางเทคโนโลยี: อนาคตอันห่างไกลของอารยธรรมมนุษย์?

ในขณะที่วิทยาศาสตร์มีวิวัฒนาการไปอย่างรวดเร็ว โดยรับช่วงต่อความพยายามของเราอย่างมาก ความเสี่ยงในการทำให้ตัวเองตกอยู่ในภาวะภาวะเอกฐานที่อธิบายไม่ได้ก็เพิ่มขึ้นเช่นกัน อ่านว่าภาวะเอกฐานอาจมีความหมายสำหรับเราอย่างไร

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ผลกระทบของปัญญาประดิษฐ์ในการดูแลสุขภาพ 2021

ผลกระทบของปัญญาประดิษฐ์ในการดูแลสุขภาพ 2021

AI ในการดูแลสุขภาพได้ก้าวกระโดดอย่างมากจากทศวรรษที่ผ่านมา ดังนั้นอนาคตของ AI ในการดูแลสุขภาพจึงยังคงเติบโตทุกวัน