วิธีการติดตั้ง Redmine บน Ubuntu 16.04

Redmine เป็นเครื่องมือการจัดการโครงการบนเว็บฟรีและโอเพนซอร์ส มันเขียนใน Ruby on Rails และสนับสนุนเซิร์ฟเวอร์ฐานข้อมูลหลายตัวสำหรับการจัดเก็บฐานข้อมูล มันเป็นแอพพลิเคชั่นที่เต็มไปด้วยคุณสมบัติที่รองรับหลายโครงการ ACL ตามบทบาทและระบบติดตามปัญหา นอกจากนี้ยังมีแผนภูมิแกนต์และการสนับสนุนปฏิทินการจัดการไฟล์ต่อโครงการวิกิและฟอรัมรวมถึงคุณสมบัติอื่น ๆ อีกมากมาย รองรับระบบควบคุมเวอร์ชันเช่น Git, SVN หรือ CVS นอกจากนี้ยังมีหลายภาษารองรับได้มากถึง 49 ภาษา

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

  • อินสแตนซ์ของเซิร์ฟเวอร์ Vultr Ubuntu 16.04
  • sudo ผู้ใช้
  • ชื่อโดเมนที่ชี้ไปยังเซิร์ฟเวอร์

สำหรับบทช่วยสอนนี้เราจะใช้192.168.1.1เป็นที่อยู่ IP สาธารณะและ redmine.example.com เป็นชื่อโดเมนที่ชี้ไปยังอินสแตนซ์ Vultr โปรดตรวจสอบให้แน่ใจว่าได้แทนที่ชื่อโดเมนและที่อยู่ IP ตัวอย่างทั้งหมดด้วยชื่อจริง

ปรับปรุงระบบฐานของคุณใช้คู่มือวิธีการปรับปรุง Ubuntu 16.04 เมื่อระบบของคุณอัปเดตแล้วให้ดำเนินการติดตั้งการอ้างอิงต่อ

ติดตั้ง Apache

Redmine เขียนด้วย Ruby on Rails ดังนั้นเราจะต้องการ Phusion Passenger เพื่อรวมเข้ากับ Apache เว็บเซิร์ฟเวอร์เพื่อให้บริการแอปพลิเคชัน

ติดตั้ง Apache

sudo apt -y install apache2 apache2-dev libcurl4-openssl-dev

ในการสร้างทับทิมและผู้โดยสารเราจะต้องมีเครื่องมือในการพัฒนาเช่นกัน ติดตั้งเครื่องมือที่จำเป็น

sudo apt -y install imagemagick libmagickwand-dev git build-essential automake libgmp-dev

ติดตั้ง PostgreSQL

Redmine รองรับเซิร์ฟเวอร์ฐานข้อมูลหลายประเภทเช่น MySQL, PostgreSQL และ MSSQL ในบทช่วยสอนนี้เราจะใช้ PostgreSQL เพื่อโฮสต์เซิร์ฟเวอร์ฐานข้อมูล Redmine

PostgreSQL เป็นระบบฐานข้อมูลเชิงวัตถุ ที่เก็บเริ่มต้นของ Ubuntu มี PostgreSQL เวอร์ชันเก่าดังนั้นให้เพิ่มที่เก็บ PostgreSQL ไปยังระบบ

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

ติดตั้งเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL

sudo apt -y install postgresql

เริ่มต้นเซิร์ฟเวอร์ PostgreSQL และเปิดใช้งานให้เริ่มโดยอัตโนมัติเมื่อบูตเครื่อง

sudo systemctl start postgresql
sudo systemctl enable postgresql

เปลี่ยนรหัสผ่านสำหรับผู้ใช้ PostgreSQL เริ่มต้น

sudo passwd postgres

เข้าสู่ระบบในฐานะผู้ใช้ PostgreSQL

sudo su - postgres

สร้างผู้ใช้ PostgreSQL ใหม่สำหรับ Redmine

createuser redmine

redmineคุณได้รับอนุญาตให้ใช้ชื่อผู้แทนใด ๆ PostgreSQL จัดเตรียม psql เชลล์เพื่อรันเคียวรีบนฐานข้อมูล สลับไปที่เชลล์ PostgreSQL

psql

ตั้งรหัสผ่านสำหรับผู้ใช้ที่สร้างขึ้นใหม่สำหรับฐานข้อมูล Redmine

ALTER USER redmine WITH ENCRYPTED password 'DBPassword';

แทนที่ DBPassword ด้วยรหัสผ่านที่ปลอดภัย สร้างฐานข้อมูลใหม่สำหรับการติดตั้ง Redmine

CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

ออกจาก psql เปลือก

\q

เปลี่ยนเป็น sudo ผู้ใช้

exit

ติดตั้งการขึ้นต่อกันของ PostgreSQL ที่จำเป็นเพิ่มเติม

sudo apt -y install libpqxx-dev protobuf-compiler

ติดตั้ง Ruby

เราจะติดตั้ง Ruby เวอร์ชั่นล่าสุดโดยใช้ RVM มันถูกใช้เพื่อติดตั้งและจัดการ Ruby หลายเวอร์ชัน

เพิ่มที่เก็บ RVM

sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt update

ติดตั้ง RVM

sudo apt -y install rvm

เนื่องจากเราจำเป็นต้องติดตั้งระบบทับทิมกว้างเราจะเปลี่ยนไปใช้ผู้ใช้รูทชั่วคราว

sudo -i

อัพเดตตัวแปรสภาวะแวดล้อม

echo "source /etc/profile.d/rvm.sh" | tee -a /etc/profile
source /etc/profile.d/rvm.sh

ติดตั้ง Ruby เวอร์ชันล่าสุด

rvm install 2.5.1

หมายเหตุ: หากคุณใช้ Ruby เวอร์ชันอื่นตรวจสอบให้แน่ใจว่าได้อัพเดตพา ธ Ruby ตามลำดับ

ใช้ Ruby รุ่นที่ติดตั้งไว้

rvm use 2.5.1 --default

คุณสามารถตรวจสอบรุ่นของมัน

ruby -v

คุณจะเห็นผลลัพธ์ที่คล้ายกัน

root@vultr:~# ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

ติดตั้งbundlerซึ่งเป็นตัวจัดการการพึ่งพาสำหรับแอปพลิเคชัน Ruby

gem install bundler

ติดตั้ง Ruby แล้ว ก่อนที่เราจะติดตั้ง Redmine เราจะต้องติดตั้ง Phusion Passenger

ติดตั้งผู้โดยสาร

รันคำสั่งต่อไปนี้เพื่อติดตั้ง Passenger

gem install passenger

ติดตั้งโมดูล Apache สำหรับผู้โดยสาร

passenger-install-apache2-module

สคริปต์ตัวติดตั้งจะถามคำถามคุณ ก่อนอื่นจะให้ข้อมูลเกี่ยวกับกระบวนการติดตั้ง จากนั้นจะขอให้คุณเลือกภาษาที่คุณจะใช้ เนื่องจากแอปพลิเคชันของเราเขียนด้วย Ruby on Rails ให้เลือก Ruby จากเมนูและกดENTERเพื่อดำเนินการต่อไป

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 ‣ ⬢  Ruby
   ⬢  Python
   ⬡  Node.js
   ⬡  Meteor

โปรแกรมติดตั้งจะตรวจสอบข้อกำหนดต่างๆ โปรแกรมติดตั้งจะไม่พบการพึ่งพาที่ขาดหายไปและจะดำเนินการรวบรวมและติดตั้งโมดูลโดยอัตโนมัติ

เมื่อติดตั้งโมดูลแล้วจะแจ้งให้คุณเพิ่มโมดูลลงในไฟล์กำหนดค่า Apache

Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
     PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER when you are done editing.

เราจะข้ามสิ่งนี้ไปก่อนและจะทำให้เสร็จในภายหลังในบทช่วยสอน กดENTERเพื่อข้ามขั้นตอนนี้

สุดท้ายสคริปต์ติดตั้งจะตรวจสอบการติดตั้งและคุณจะเห็นคำเตือนว่าโมดูลผู้โดยสารไม่ได้ระบุในการกำหนดค่า Apache

Validating installation...

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓
 * Checking whether Apache is installed... ✓
 * Checking whether the Passenger module is correctly configured in Apache... (!)

   You did not specify 'LoadModule passenger_module' in any of your Apache
   configuration files. Please paste the configuration snippet that this
   installer printed earlier, into one of your Apache configuration files, such
   as /etc/apache2/apache2.conf.


Detected 0 error(s), 1 warning(s).
Press ENTER to continue.

ตอนนี้เราได้ติดตั้งโมดูลผู้โดยสารสำหรับ Apache ดำเนินการดาวน์โหลดและติดตั้ง Redmine เปลี่ยนเป็นsudoผู้ใช้อีกครั้งเนื่องจากเราไม่จำเป็นต้องเรียกใช้คำสั่งเพิ่มเติมโดยใช้rootผู้ใช้

exit

ติดตั้ง Redmine

ขอแนะนำให้ใช้ผู้ใช้ที่ไม่มีสิทธิพิเศษเพื่อเรียกใช้แอปพลิเคชันเพื่อป้องกันไม่ให้ระบบหยุดทำงาน สร้างผู้ใช้ใหม่สำหรับ Redmine และเปลี่ยนเป็นผู้ใช้ที่สร้างขึ้นใหม่

sudo adduser --disabled-password --gecos "Redmine User" redmine
sudo su - redmine

ดาวน์โหลดรุ่นล่าสุดของ Redmine อย่างเป็นทางการจากหน้า Redmine ดาวน์โหลด

cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz

แตกไฟล์เก็บถาวรและเปลี่ยนชื่อไดเร็กทอรีเพื่อความสะดวก

tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/

คัดลอกไฟล์คอนฟิกูเรชันตัวอย่างไปยังตำแหน่งที่ใช้งานจริง

cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml

เปิดไฟล์การกำหนดค่าฐานข้อมูลที่เราเพิ่งคัดลอกเพื่อป้อนรายละเอียดฐานข้อมูล

nano config/database.yml

โดยค่าเริ่มต้นไฟล์ฐานข้อมูลจะถูกกำหนดค่าสำหรับ MySQL ค้นหาการกำหนดค่าสำหรับการผลิตและการพัฒนาและทดสอบที่ใช้อะแดปเตอร์ MySQL ใส่เครื่องหมายบรรทัดทั้งหมดเหล่านี้

#production:
#  adapter: mysql2
#  database: redmine
#  host: localhost
#  username: root
#  password: ""
#  encoding: utf8

#development:
#  adapter: mysql2
#  database: redmine_development
#  host: localhost
#  username: root
#  password: ""
#  encoding: utf8

#test:
#  adapter: mysql2
#  database: redmine_test
#  host: localhost
#  username: root
#  password: ""
#  encoding: utf8

อีกต่อไปค้นหาบรรทัดที่ถูกคอมเม้นต์โดยมี production การกำหนดค่าสำหรับ postgresql อะแดปเตอร์ ยกเลิกหมายเหตุบรรทัดเหล่านั้นและอัพเดตชื่อฐานข้อมูลและข้อมูลรับรองผู้ใช้ ตรวจสอบให้แน่ใจว่าใช้การเยื้องที่ถูกต้องซึ่งเป็นช่องว่างสองช่อง

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "DBPassword"

กำหนดค่าแอปพลิเคชันเพื่อใช้การกำหนดค่า PostgreSQL

bundle config build.pg --with-pg-config=/usr/bin/pg_config

ติดตั้งการพึ่งพาที่แอปพลิเคชันต้องการ

bundle install --path vendor/bundle --without development test

คุณจะเห็นข้อความต่อไปนี้ในตอนท้ายของการติดตั้ง

Installing roadie-rails 1.1.1
Bundle complete! 31 Gemfile dependencies, 55 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`

คำสั่งต่อไปนี้สร้างโทเค็นลับที่ใช้ในการเข้ารหัสข้อมูลเซสชัน

bundle exec rake generate_secret_token

เขียนฐานข้อมูล PostgreSQL

RAILS_ENV=production bundle exec rake db:migrate

เรียกใช้คำสั่งต่อไปนี้ซึ่งเขียนข้อมูลเริ่มต้นลงในฐานข้อมูล PostgreSQL

RAILS_ENV=production bundle exec rake redmine:load_default_data

คำสั่งด้านบนจะขอให้คุณเลือกภาษาเริ่มต้นที่จะใช้กับแอปพลิเคชัน ตัวเลือกเริ่มต้นคือภาษาอังกฤษ เลือกตามความต้องการของคุณ

[redmine@vultr redmine]$ RAILS_ENV=production bundle exec rake redmine:load_default_data

Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
====================================
Default configuration data loaded.

การติดตั้งแอปพลิเคชัน Redmine เสร็จสมบูรณ์แล้ว เปลี่ยนความเป็นเจ้าของและสิทธิ์ของไดเรกทอรีและไฟล์

mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets

เราได้กำหนดค่าทุกสิ่งที่เราต้องการจากผู้ใช้ที่ไม่มีสิทธิพิเศษ สลับกลับไปยัง ผู้ใช้โดยการเรียกใช้sudo su - <username>

กำหนดค่า Apache

เพิ่มโมดูลผู้โดยสารสำหรับ Apache ลงในไฟล์กำหนดค่า Apache นี่จะโหลดโมดูลผู้โดยสารโดยอัตโนมัติ

echo "LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/apache2/apache2.conf

หมายเหตุ: เส้นทางไปยังโมดูลผู้โดยสารอาจเปลี่ยนแปลงได้เมื่อมีผู้โดยสารรุ่นใหม่ ในการค้นหาพา ธ ไปยังโมดูลให้ใช้sudo find / -name mod_passenger.soคำสั่ง

สร้างไฟล์โฮสต์เสมือนใหม่สำหรับแอปพลิเคชัน Redmine ของคุณ

sudo nano /etc/apache2/sites-available/redmine.conf

เติมไฟล์ด้วยเนื้อหาต่อไปนี้

<VirtualHost *:80>
    ServerName redmine.example.com

    DocumentRoot /home/redmine/redmine/public

    PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
    PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
    PassengerUser redmine

    <Directory /home/redmine/redmine/public>
      Allow from all
      Options -MultiViews
      Require all granted
    </Directory>
</VirtualHost>

ตรวจสอบให้แน่ใจว่าได้แทนที่ redmine.example.com ด้วยชื่อโดเมนจริงของคุณ นอกจากนี้ตรวจสอบให้แน่ใจว่าเส้นทางไปยัง PassengerRoot และ PassengerDefaultRuby ถูกต้อง เส้นทางไปสู่ไบนารีอาจเปลี่ยนแปลงเมื่อมี Ruby หรือ Passenger รุ่นใหม่ ในการค้นหาพา ธ เหล่านี้ให้รันคำสั่งต่อไปนี้

passenger-config about ruby-command

คุณจะได้รับผลลัพธ์ต่อไปนี้

user@vultr:~$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
  To use in Apache: PassengerRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
  To use in Nginx : passenger_ruby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
  To use with Standalone: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/bin/passenger start


## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config about ruby-command'.

เมื่อไฟล์โฮสต์เสมือนถูกสร้างขึ้น เปิดใช้งานการกำหนดค่า

sudo a2ensite redmine

รีสตาร์ทเว็บเซิร์ฟเวอร์ Apache

sudo systemctl restart apache2

ตอนนี้คุณสามารถเข้าถึงส่วนต่อประสาน Redmine ของคุณ http://redmine.example.comได้แล้ว เข้าสู่ระบบด้วยชื่อผู้ใช้ และรหัสผ่านadmin adminเมื่อล���ชื่อเข้าใช้ครั้งแรก Redmine จะแจ้งให้คุณอัปเดตรหัสผ่าน

การรักษาความปลอดภัย Apache ด้วย Let's Encrypt SSL

เนื่องจากการติดตั้ง Redmine ของเราอยู่บนเซิร์ฟเวอร์สาธารณะดังนั้นเราขอแนะนำให้ใช้ SSL เพื่อความปลอดภัยในการแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์

เพิ่มที่เก็บ Certbot

sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update

ติดตั้ง Certbot ซึ่งเป็นแอปพลิเคชันไคลเอนต์สำหรับ Let's Encrypt CA

sudo apt -y install certbot

หมายเหตุ: ในการรับใบรับรองจาก Let's Encrypt CA โดเมนที่จะสร้างใบรับรองนั้นจะต้องชี้ไปที่เซิร์ฟเวอร์ หากไม่มีให้ทำการเปลี่ยนแปลงที่จำเป็นกับระเบียน DNS ของโดเมนและรอให้ DNS เผยแพร่ก่อนทำการขอใบรับรองอีกครั้ง Certbot ตรวจสอบอำนาจโดเมนก่อนที่จะให้ใบรับรอง

สร้างใบรับรอง SSL

sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com

/etc/letsencrypt/live/redmine.example.com/ใบรับรองที่สร้างขึ้นมีแนวโน้มที่จะถูกเก็บไว้ใน ใบรับรอง SSL จะถูกเก็บไว้เป็น และคีย์ส่วนตัวจะถูกเก็บไว้เป็นcert.pem privkey.pem

ลองเข้ารหัสใบรับรองหมดอายุใน 90 วันดังนั้นขอแนะนำให้ตั้งค่าการต่ออายุใบรับรองโดยอัตโนมัติโดยใช้งาน Cron

เปิดไฟล์งาน Cron สำหรับ root ผู้ใช้

sudo crontab -e

เพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์

30 5 * * * /usr/bin/certbot renew --quiet

งาน Cron ด้านบนจะทำงานทุกวันเวลา 5.30 น. หากใบรับรองถึงกำหนดหมดอายุจะมีการต่ออายุโดยอัตโนมัติ

เปิดใช้งานโมดูล SSL สำหรับ Apache

sudo a2enmod ssl

แก้ไขไฟล์โฮสต์เสมือนที่เราสร้างไว้ก่อนหน้านี้สำหรับ Redmine

sudo nano /etc/apache2/sites-available/redmine.conf

แก้ไขไฟล์โฮสต์เสมือนให้เหมือนดังต่อไปนี้

<VirtualHost *:80>
    ServerName redmine.example.com
    Redirect permanent / https://redmine.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName redmine.example.com
    DocumentRoot "/home/redmine/redmine/public"
    <Directory "/home/redmine/redmine/public">
        Options None
        Require all granted
    </Directory>
    PassengerAppEnv production
    PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
    PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
    PassengerUser redmine
    PassengerHighPerformance on

    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/redmine.example.com/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/redmine.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/redmine.example.com/chain.pem

    SSLProtocol             all -SSLv2 -SSLv3
    SSLHonorCipherOrder     on
    SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

    <IfModule headers_module>
        Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
    </IfModule>
</VirtualHost>

บันทึกไฟล์และออกจากตัวแก้ไข

รีสตาร์ท Apache เพื่อให้การเปลี่ยนแปลงมีผล

sudo systemctl restart apache2

ขณะนี้คุณสามารถเข้าถึง Redmine กว่า ที่HTTPS https://redmine.example.com

ยินดีด้วยคุณติดตั้ง Redmine บนอินสแตนซ์ Ubuntu 16.04 เรียบร้อยแล้ว เริ่มพัฒนาโครงการของคุณโดยสร้างหรือนำเข้าโครงการของคุณ



Leave a Comment

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 ในการดูแลสุขภาพจึงยังคงเติบโตทุกวัน