วิธีการติดตั้ง 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

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

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