มาทดลองติดตั้ง PrestaShop อีกสักโปรแกรม ที่มีขั้นตอนการติดตั้งมากกว่าติดตั้ง WordPress อยู่หน่อย แต่ก็ไม่น่ายากเกินไปสำหรับเราแล้ว :)
PrestaShop เป็นโปรแกรมสร้างเว็บไซต์ร้านค้าออนไลน์ ที่สามารถดาวน์โหลดมาใช้งานได้ฟรี มีคุณสมบัติการใช้งานทั้งระบบการสร้างร้านค้า การซื้อขาย ระบบการจ่ายเงิน ธีมหน้าการออกแบบเว็บให้สามารถเลือกใช้ และอื่นๆ อีกมากมาย
PrestaShop ถูกพัฒนาด้วยภาษา PHP และใช้ MySQL เป็นฐานข้อมูลหลักในการเก็บข้อมูล ดังนั้นเราจะลองติดตั้งบนเว็บเซิร์ฟเวอร์ตัวเดียวกันกับที่เราเพิ่งลองติดตั้ง WordPress ไป
สามารถดูความต้องการของเครื่องที่จะติดตั้งโปรแกรม PrestaShop ได้ที่
บทความนี้ผู้เขียนทดลองต่อจาก ติดตั้ง WordPress บน CentOS 7 โดยจะลองติดตั้งไป แล้วแก้ไขปัญหาที่เกิดขึ้นไป เพื่อเป็นแนวทางให้ผู้อ่านสามารถนำไปใช้ได้
เริ่มต้นด้วยการเข้าหน้าเว็บไซต์ www.prestashop.com แล้วคลิกที่แท็ป Download เพื่อดาวน์โหลดไฟล์ติดตั้ง แล้วส่งไฟล์เข้าไปยังเซิร์ฟเวอร์ (เช่น ถ้าคุณใช้ Windows ในการดาวน์โหลดไฟล์ ลองดูวิธี ถ่ายโอนไฟล์ระหว่าง Windows กับลีนุกซ์ ด้วย pscp เพื่อส่งไฟล์ที่ดาวน์โหลดได้ไปไว้ในเครื่องเซิร์ฟเวอร์)
ตัวอย่างชื่อไฟล์ที่ดาวน์โหลดมาได้
[alice@cent7 ~]$ ls -l prestashop_1.6.1.0.zip -rw-r-----. 1 root root 20758813 Jul 26 23:29 prestashop_1.6.1.0.zip
ขั้นต่อไป แนะนำให้ทำกระบวนการเหมือนเดิมคือล็อกอินด้วย root หรือ sudo เพื่อสร้างไดเรกทอรีที่ใช้เก็บโปรแกรม prestashop แล้วแก้ไขเจ้าของไฟล์ให้เป็นผู้ใข้ธรรมดา (user) สามารถเขียนไฟล์ในนี้ได้
[root@cent7 ~]# cd /var/www/html/ [root@cent7 html]# mkdir prestashop [root@cent7 html]# chown alice prestashop
ล็อกอินด้วยผู้ใช้ธรรมดา ในที่นี้ขอยกตัวอย่าง alice แตกไฟล์ที่ดาวน์โหลดมาไว้ในไดเรกทอรีที่สร้างขึ้น
[alice@cent7 ~]$ cd /var/www/html/prestashop/
[alice@cent7 prestashop]$ unzip ~/prestashop_1.6.1.0.zip
-bash: unzip: command not found
ปัญหาแรกที่เจอคือไฟล์ที่ดาวน์โหลดมาอยู่ในรูปแบบไฟล์ zip แต่เซิร์ฟเวอร์เครื่องนี้ยังไม่มีคำสั่ง unzip ที่ใช้แตกไฟล์
หมายเหตุ ถ้าเครื่องไหนมีโปรแกรม unzip ติดตั้งอยู่แล้ว ก็ไม่ต้องติดตั้งเพิ่ม
ต้องล็อกอินด้วย root (หรือ sudo) อีกครั้ง เพื่อติดตั้งคำสั่ง unzip
ขอยกตัวอย่างเป็นแบบ sudo บ้าง
[alice@cent7 prestashop]$ sudo yum install unzip [sudo] password for alice: ... Installed: unzip.x86_64 0:6.0-15.el7 Complete! [alice@cent7 prestashop]$
ลองใช้คำสั่ง unzip แตกไฟล์อีกครั้ง
[alice@cent7 prestashop]$ unzip ~/prestashop_1.6.1.0.zip Archive: /home/alice/prestashop_1.6.1.0.zip inflating: Install_PrestaShop.html creating: prestashop/ inflating: prestashop/.DS_Store creating: prestashop/Adapter/ ...
ดูไฟล์ที่ได้
[alice@cent7 prestashop]$ ls -l total 8 -rw-r--r--. 1 alice alice 308 Jul 3 14:41 Install_PrestaShop.html drwxr-xr-x. 26 alice alice 4096 Jul 11 08:54 prestashop
ย้ายไฟล์ที่อยู่ในข้างในไดเรกทอรี prestashop ออกมาไว้ในไดเรกทอรีปัจจุบัน (เครื่องหมาย .) แล้วลบไดเรกทอรีที่ unzip สร้างไว้
[alice@cent7 prestashop]$ mv prestashop/* .
[alice@cent7 prestashop]$ rmdir prestashop/
rmdir: failed to remove ‘prestashop/’: Directory not empty
ยังไม่สามารถลบไดเรกทอรีได้ เพราะยังมีไฟล์ที่อยู่ข้างใน ในที่นี้คือไฟล์ .DS_Store ซึ่งเป็นแคชไฟล์จากเครื่อง Mac สามารถลบได้
[alice@cent7 prestashop]$ ls -al prestashop/ total 16 drwxr-xr-x. 2 alice alice 22 Jul 26 23:39 . drwxr-xr-x. 27 alice root 4096 Jul 26 23:39 .. -rw-r--r--. 1 alice alice 8196 Jul 11 08:54 .DS_Store [alice@cent7 prestashop]$ rm -f prestashop/.DS_Store [alice@cent7 prestashop]$ rmdir prestashop/
ตอนนี้ไฟล์ของ PrestaShop จะอยู่ในไดเรกทอรี /var/www/html/prestashop/
[alice@cent7 prestashop]$ pwd /var/www/html/prestashop
ตัวอย่างไฟล์ของโปรแกรม Prestashop
[alice@cent7 prestashop]$ ls Adapter Core index.php override admin css init.php pdf architecture.md docs install README.md cache download Install_PrestaShop.html themes classes error500.html js tools config footer.php localization translations CONTRIBUTING.md header.php log upload CONTRIBUTORS.md images.inc.php mails webservice controllers img modules
เปิดไฟล์คอนฟิกเว็บเซิร์ฟเวอร์ (httpd.conf) เพื่อแก้ไขค่าคอนฟิกไดเรกทอรีเว็บหลัก ให้ชี้มายังไดเรกทอรีที่เก็บไฟล์ของ prestashop
[alice@cent7 prestashop]$ sudo vi /etc/httpd/conf/httpd.conf
...
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html/prestashop"
...
รีสตาร์ตเซอร์วิสเว็บเซิร์ฟเวอร์ (httpd) เพื่อให้คอนฟิกที่แก้ไขมีผล
[alice@cent7 prestashop]$ sudo systemctl restart httpd
ตอนนี้เว็บเซิร์ฟเวอร์พร้อมแล้ว
จากเครื่องไคลเอนต์ ใช้ browser เปิดไปที่ IP Address ของเซิร์ฟเวอร์ เพื่อเข้าหน้าเว็บติดตั้ง
หน้าจอ Welcome to the PrestaShop Installer
กดปุ่ม [Next] เพื่อไปหน้าถัดไป
คลิกเพื่อเลือก [x] I agree to the above terms and conditions แล้วกดปุ่ม [Next] เพื่อไปหน้าถัดไป
หน้าจอ We are currently checking PrestaShop compatibility with your system environment แสดงข้อมูลการตรวจสอบความต้องการของระบบที่ PrestaShop จำเป็นต้องใช้ เช่นโมดูลของ PHP และสิทธิ์ในการเขียนไฟล์ในไดเรกทอรี
ขึ้นข้อความ Oops! Please correct the item(s) below, and then click “Refresh information” to test the compatibility of your new system. หมายถึงเซิร์ฟเวอร์ของเรายังไม่เป็นไปตามเงื่อนไข ที่จะติดตั้ง PrestaShop ได้ ต้องแก้ไขเพิ่มเติม
ปัญหาที่ฟ้องเกี่ยวกับ PHP มีสองหัวข้อคือต้องการ (Required) และแนะนำ (Recommended) ที่จริงติดตั้งโมดูล PHP เพิ่มเติมในส่วนที่ Required ก็เพียงพอแล้ว แต่แนะนำให้ติดตั้งโมดูลในส่วนที่ Recommended ด้วย
Required PHP parameters
– GD library is not installed
Recommended PHP parameters
– Mcrypt extension is not enabled
– Mbstring extension is not enabled
– Dom extension is not loaded
ลองแก้ไขปัญหาสักโมดูลหนึ่งก่อน GD library is not installed
ใช้คำสั่ง yum ติดตั้งโมดูล GD โดยใช้ชื่อแพ็กเกจ php-gd
[alice@cent7 ~]$ sudo yum install php-gd
หลัง yum ติดตั้งแล้ว ลองรีสตาร์ตเซอร์วิสเว็บเซิร์ฟเวอร์
[alice@cent7 ~]$ sudo systemctl restart httpd
บนหน้าเว็บกดปุ่ม [Refresh these settings] เพื่อให้โปรแกรมตรวจสอบระบบอีกครั้ง
ถ้าทำถูกต้อง ข้อความบรรทัด GD library is not installed ก็จะหายไป
แก้ไขโมดูล PHP ที่เหลือ
แก้ไขปัญหา Mbstring extension is not enabled ด้วยการติดตั้ง php-mbstring
[alice@cent7 ~]$ sudo yum install php-mbstring
แก้ไขปัญหา Dom extension is not loaded ด้วยการติดตั้ง php-xml
[alice@cent7 ~]$ sudo yum install php-xml
หมายเหตุ การติดตั้งโมดูลของ PHP เพิ่มเติมโดยใช้ yum ส่วนใหญ่จะพอเดาชื่อแพ็กเกจจากชื่อไฟล์โมดูลที่ต้องการได้ เช่น GD ก็เป็น php-gd แต่ถ้าไม่มีก็ต้องค้นหาจาก Google เช่น ใน CentOS 7 ไม่มีแพ็กเกจชื่อ php-dom ถ้าลองค้นหาจาก Google ดู โดยใช้คีย์เวิร์ด “php dom rpm centos 7” ก็จะได้คำตอบว่า ต้องติดตั้ง php-xml แทน
แก้ไขปัญหา Mcrypt extension is not enabled
ไม่มีแพ็กเกจ mcrypt อยู่ใน repo ดีฟอลต์ ต้องติดตั้ง epel-release เพิ่มเติม
[alice@cent7 ~]$ sudo yum install epel-release [alice@cent7 ~]$ sudo yum install php-mcrypt
รีสตาร์ตเซอร์วิสเว็บเซิร์ฟเวอร์ เพราะมีการติดตั้งโมดูลของ PHP เพิ่มเติม
[alice@cent7 ~]$ sudo systemctl restart httpd
ลองกดปุ่ม [Refresh these settings] อีกครั้ง ข้อความฟ้องเกี่ยวกับ PHP ไม่มีแล้ว
แก้ไข permissions ของไฟล์และไดเรกทอรี ให้ Apache user เขียนได้
Apache user หรือชื่อผู้ใช้ (user) ที่ใช้รันเซอร์วิสเว็บเซิร์ฟเวอร์ บน CentOS 7 คือ apache
[alice@cent7 prestashop]$ ps -ef | grep httpd
root 2661 1 0 20:30 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2663 2661 0 20:30 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2664 2661 0 20:30 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2665 2661 0 20:30 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2666 2661 0 20:30 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2667 2661 0 20:30 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
ถ้าเราใช้ alice ในการแตกไฟล์ เจ้าของไฟล์และไดเรกทอรีทั้งหมดที่สร้างขึ้นภายใน prestashop จะเป็นของ alice ทั้งหมด ทำให้ Apache user ไม่สามารถเขียนหรือแก้ไขไฟล์ตามที่ต้องการได้
มีวิธีการแก้อยู่สองวิธีคือ
ถ้าใช้ root หรือ sudo ได้ ก็สามารถเปลี่ยนเจ้าของไดเรกทอรีให้เป็น apache ได้ เป็นวิธีที่แนะนำ ถ้ามีสิทธิ์เป็น root ได้
[alice@cent7 ~]$ cd /var/www/html/prestashop/
[alice@cent7 prestashop]$ sudo chown -R apache config/ cache/ log/ img/ mails/ modules/
[alice@cent7 prestashop]$ sudo chown -R apache themes/default-bootstrap/lang/
[alice@cent7 prestashop]$ sudo chown -R apache themes/default-bootstrap/pdf/lang/
[alice@cent7 prestashop]$ sudo chown -R apache themes/default-bootstrap/cache/
[alice@cent7 prestashop]$ sudo chown -R apache translations/ upload/ download/
แต่ถ้าเป็นผู้ใช้ธรรมดาแก้ไข ก็ต้องเปลี่ยน permission ให้เป็น 777 คือให้ผู้อื่น (other users) ที่ไม่ใช่เจ้าของไฟล์สามารถเขียนไฟล์ได้
[alice@cent7 ~]$ cd /var/www/html/prestashop/
[alice@cent7 prestashop]$ chmod -R 777 config/ cache/ log/ img/ mails/ modules/
[alice@cent7 prestashop]$ chmod -R 777 themes/default-bootstrap/lang/
[alice@cent7 prestashop]$ chmod -R 777 themes/default-bootstrap/pdf/lang/
[alice@cent7 prestashop]$ chmod -R 777 themes/default-bootstrap/cache/
[alice@cent7 prestashop]$ chmod -R 777 translations/ upload/ download/
หมายเหตุ คำสั่ง chown หรือ chmod สามารถตามด้วยชื่อไฟล์หรือไดเรกทอรีที่ต้องการเปลี่ยนหลายอันพร้อมกันได้
ถ้าลองกดปุ่ม [Refresh these settings] อีกครั้ง ก็จะยังขึ้น error เหมือนเดิม
เป็นเพราะว่าถ้าเครื่องเซิร์ฟเวอร์ของคุณเปิดคุณสมบัติ SELinux เอาไว้ (เปิดโดยดีฟอลต์ใน CentOS 7) ระบบ SELinux จะตรวจสอบเพิ่มเติมว่าไฟล์หรือไดเรกทอรีเป็นไปตามเงื่อนไขที่กำหนด (policy) ไว้หรือไม่
โดยดีฟอลต์ตามกฎ ไฟล์หรือไดเรกทอรีจะไม่สามารถเขียนได้โดยเว็บเซิร์ฟเวอร์ แม้ว่าเราจะเปลี่ยนเจ้าของไฟล์ (chown) ให้เป็น apache หรือเปลี่ยน permission ให้เป็น 777 แล้วก็ตาม
ถ้าเปิดใช้งานคุณสมบัติ SELinux ถ้าต้องการให้ไฟล์หรือไดเรกทอรีนั้นสามารถเขียนโดยเว็บเซิร์ฟเวอร์ได้ ต้องเปลี่ยน Security context type ของไฟล์นั้นให้เป็น httpd_sys_content_rw_t ด้วยคำสั่ง chcon
ตัวอย่างการการใช้คำสั่ง chcon เปลี่ยน Security context type
[alice@cent7 prestashop]$ chcon -R -t httpd_sys_content_rw_t config/ cache/ log/ img/ mails/ modules/ [alice@cent7 prestashop]$ chcon -R -t httpd_sys_content_rw_t themes/default-bootstrap/lang/ [alice@cent7 prestashop]$ chcon -R -t httpd_sys_content_rw_t themes/default-bootstrap/pdf/lang/ [alice@cent7 prestashop]$ chcon -R -t httpd_sys_content_rw_t themes/default-bootstrap/cache/ [alice@cent7 prestashop]$ chcon -R -t httpd_sys_content_rw_t translations/ upload/ download/
คำเตือน เนื่องจาก SELinux ช่วยเพิ่มความปลอดภัยให้เซิร์ฟเวอร์ ดังนั้นไม่แนะนำให้ปิดคุณสมบัติ SELinux
ถ้าลองกดปุ่ม [Refresh these settings] อีกครั้ง ข้อผิดพลาดต่างๆ ก็น่าจะหายไปทั้งหมด
ถ้าแก้ไขถูกต้อง ครบถ้วน จะขึ้นแถบสีเขียว PrestaShop compatibility with your system environment has been verified! สามารถกดปุ่ม [Next] เพื่อไปขั้นต่อไป
หน้าจอ Information about your store ให้กรอกข้อมูลเว็บไซต์เบื้องต้น
ช่อง E-mail address จะใช้เป็น Username และช่อง Shop password จะใช้เป็น Password ในการล็อกอินเข้าระบบ Back office
กรอกข้อมูลเรียบร้อย กดปุ่ม [Next] เพื่อไปขั้นต่อไป
หน้าจอ Configure your database by filling out the following fields
กรอกข้อมูลการเชื่อมต่อเข้าฐานข้อมูล เพื่อใช้สำหรับเก็บข้อมูลของโปรแกรม
เช่นเดิม ก่อนที่จะกดปุ่มต่อไป เราต้องใช้คำสั่ง mysql เพื่ออนุญาตสิทธิ์ (GRANT) ให้ Database login และ Database password ที่เรากรอกไป สามารถเขียนข้อมูลลงใน Database name ที่ระบุได้
ตัวอย่างการใช้คำสั่ง mysql เพื่อ GRANT สิทธิ์
[alice@cent7 ~]$ mysql -u root -p MariaDB [(none)]> CREATE DATABASE prestashop; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON prestashop.* TO 'presta-user'@'localhost' IDENTIFIED BY 'presta-pass'; Query OK, 0 rows affected (0.00 sec)
หลังจาก GRANT เรียบร้อย ลองกดปุ่ม [Test your database connection now!]
หากถูกต้อง จะขึ้นแถบสีเขียว Database is connected
กดปุ่ม [Next] เพื่อไปขั้นต่อไป
เมื่อติดตั้งเสร็จเรียบร้อย ก็จะขึ้นหน้าจอ Your installation is finished!
มีคำแนะนำในหน้านี้คือ For security purposes, you must delete the “install” folder.
ใช้คำสั่ง rm เพื่อลบไดเรกทอรี install
[alice@cent7 prestashop]$ rm -rf install/
กดปุ่ม [Manage your store] เพื่อเข้าสู่ระบบหลังบ้าน (Back Office) ของ PrestaShop
ด้วยเหตุผลด้านความปลอดภัยของระบบ Back Office โปรแกรมจะไม่สามารถเข้าใช้งานได้ จนกระทั่งคุณต้องเปลี่ยนลิงก์เข้าระบบจาก /admin เป็นชื่อโฟลเดอร์อื่น ตามที่หน้าเว็บแนะนำ
For security reasons, you cannot connect to the back office until you have
renamed the /admin folder (e.g. admin329o77yfs/)
Please then access this page by the new URL (e.g. http://192.168.1.1/admin329o77yfs/)
เหตุผลหลักๆ ก็คือไม่ให้คนอื่นเดาลิงก์ของระบบ Back Office ได้
ใช้คำสั่ง mv เพื่อเปลี่ยนชื่อไดเรกทอรีหรือโฟลเดอร์สำหรับเข้าระบบ Back Office
[alice@cent7 prestashop]$ ls -ld admin drwxr-xr-x. 9 alice alice 4096 Jul 11 08:53 admin [alice@cent7 prestashop]$ mv admin admin329o77yfs
หลังจากเปลี่ยนชื่อโฟลเดอร์แล้ว อย่าลืมเปลี่ยนชื่อลิงก์ในการเข้าด้วย
ตัวอย่างหน้าจอล็อกอินเข้าระบบ Back Office ของ PrestaShop
ตัวอย่างหน้าจอระบบ Back Office ในส่วนหน้า Dashboard
ตัวอย่างหน้าจอร้านค้าออนไลน์ โดยใช้โปรแกรม PrestaShop