สร้างเว็บไซต์ร้านค้าออนไลน์ด้วย PrestaShop บน CentOS 7

มาทดลองติดตั้ง 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
c-p01-Welcome-to-the-PrestaShop-Installer

กดปุ่ม [Next] เพื่อไปหน้าถัดไป

หน้าจอ License Agreements
c-p02-License-Agreements

คลิกเพื่อเลือก [x] I agree to the above terms and conditions แล้วกดปุ่ม [Next] เพื่อไปหน้าถัดไป

หน้าจอ We are currently checking PrestaShop compatibility with your system environment แสดงข้อมูลการตรวจสอบความต้องการของระบบที่ PrestaShop จำเป็นต้องใช้ เช่นโมดูลของ PHP และสิทธิ์ในการเขียนไฟล์ในไดเรกทอรี
c-p03-We-are-currently-checking-Prestashop-compatibility-with-your-system-environment-1

ขึ้นข้อความ 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 ก็จะหายไป
c-p05-after-yum-install-php-gd

แก้ไขโมดูล 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 ไม่มีแล้ว

c-p06-no-php-error

แก้ไข 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] อีกครั้ง ข้อผิดพลาดต่างๆ ก็น่าจะหายไปทั้งหมด
c-p07-all-ok

ถ้าแก้ไขถูกต้อง ครบถ้วน จะขึ้นแถบสีเขียว PrestaShop compatibility with your system environment has been verified!   สามารถกดปุ่ม [Next] เพื่อไปขั้นต่อไป

หน้าจอ Information about your store ให้กรอกข้อมูลเว็บไซต์เบื้องต้น
c-p08-info

c-p09-info-2

ช่อง E-mail address จะใช้เป็น Username และช่อง Shop password จะใช้เป็น Password ในการล็อกอินเข้าระบบ Back office

กรอกข้อมูลเรียบร้อย กดปุ่ม [Next] เพื่อไปขั้นต่อไป

หน้าจอ Configure your database by filling out the following fields
c-p10-db

กรอกข้อมูลการเชื่อมต่อเข้าฐานข้อมูล เพื่อใช้สำหรับเก็บข้อมูลของโปรแกรม

เช่นเดิม ก่อนที่จะกดปุ่มต่อไป เราต้องใช้คำสั่ง 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
c-p11-db-ok

กดปุ่ม [Next] เพื่อไปขั้นต่อไป

หน้าจอแสดงโปรแกรมกำลังติดตั้ง
c-p12-installing

เมื่อติดตั้งเสร็จเรียบร้อย ก็จะขึ้นหน้าจอ Your installation is finished!
c-p13-finish

มีคำแนะนำในหน้านี้คือ For security purposes, you must delete the “install” folder.

ใช้คำสั่ง rm เพื่อลบไดเรกทอรี install

[alice@cent7 prestashop]$ rm -rf install/

กดปุ่ม [Manage your store] เพื่อเข้าสู่ระบบหลังบ้าน (Back Office) ของ PrestaShop
c-p21-rename-admin

ด้วยเหตุผลด้านความปลอดภัยของระบบ 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
c-p22-login

ตัวอย่างหน้าจอระบบ Back Office ในส่วนหน้า Dashboard
c-p23-dashboard

ตัวอย่างหน้าจอร้านค้าออนไลน์ โดยใช้โปรแกรม PrestaShop
c-p24-index

ข้อมูลอ้างอิง

Leave a Reply