How to Install X-cart e-commerce platform on Debian 9
On this page
This tutorial will guide you on how to install and configure the latest version X-Cart e-commerce platform in Debian 9.2 release, in order to create a free online shopping store.
X-Cart is a powerful and complex commercial open source e-commerce shopping cart platform, with most parts written in PHP programming language and often deployed as a Software as a Service Solution (SaaS). X-cart shopping platform can also be installed in Linux under Apache/Nginx web servers, PHP and MySQL/MariaDB database management system, also known as LAMP or LEMP stack. X-Cart CMS online e-commerce platform is highly used to create on-line shops for different businesses and advertise and sell services and merchandise.
Requirements
- Installation of Debian 9 server on a bare-metal machine or on a virtual private server
- sudo root privileges for a local or remote account or direct access to root account
- A static IP address configured for one of your system network interfaces cards
- A domain name, private or public, depending on your deployment, with the proper DNS records configured for web services. If don’t have a valid or a registered domain name you can perform the installation and access the website via your server IP address
- If you want to use website registration, comment moderation and other features, you should have a running mail server properly configured at your premises with remote access to its IMAP and SMTP services.
Pre-Requirements
Before starting to install and configure X-Cart from sources in your own server, first assure the system meets all the software requirements for compiling and installing the application. On the first step, update your system repositories and software packages by issuing the command below.
apt update
apt upgrade
After the system has been fully updated, setup the name for your system by executing the following command. Replace your hostname variable accordingly.
hostnamectl set-hostname xcart
Verify machine hostname and hosts file by issuing the following commands.
hostnamectl
cat /etc/hostname
hostname –s
hostname –f
Finally, reboot Debian server in order to apply kernel updates and the hostname changes properly.
systemctl reboot
On the next step, execute the following command in order to install some necessary utilities that will be used to further manage your system from command line.
apt install wget bash-completion zip unzip
X-Cart is a web based CMS e-commerce platform written mostly in PHP server-side programming language. In order to execute the PHP file scripts of the application, a web server, such as Apache HTTP server, and a PHP processing gateway must be installed and made operational in the system. In order to install Apache web server and the PHP interpreter alongside with all required PHP modules needed by the application to run properly, issue the following command in your server console.
apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-mbstring php7.0-curl php7.0-gd php7.0-xml php7.0-opcache
After Apache and PHP has been installed, test if the web server is up and running and listening for network connections on port 80 by issuing the following command with root privileges.
netstat –tlpn
In case netstat network utility is not installed by default in your Debian system, execute the following command to install it.
apt install net-tools
By inspecting the netstat command output you can see that the Apache web server is listening for incoming network connections on port 80. For the same task you can also use the ss command, which is automatically installed by default in Debian 9.
ss- tulpn
In case you have a firewall enabled in your system, such as UFW firewall application, you should add a new rule to allow HTTP traffic to pass through firewall by issuing the following command.
ufw allow WWW
or
ufw allow 80/tcp
If you’re using iptables raw rules to manage Firewall rules in your Debian server, add the following rule to allow port 80 inbound traffic on the firewall so that visitors can browse the online shop.
apt-get install -y iptables-persistent
iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT
systemctl iptables-persistent save
systemctl iptables-persistent reload
Next, enable and apply the following Apache modules required by the e-commerce application to run properly, by issuing the below command.
a2enmod rewrite
systemctl restart apache2
Finally, test if Apache web server default web page can be displayed in your client's browsers by visiting your Debian machine IP address or your domain name or server FQDN via HTTP protocol, as shown in the below image. If you don’t know your machine IP address, execute ifconfig or ip a commands to reveal the IP address of your server.
In order to install and access X-Cart web admin panel backend and the frontend website via HTTPS protocol that will secure the traffic for your clients, issue the following command to enable Apache web server SSL module and SSL site configuration file.
a2enmod ssl
a2ensite default-ssl.conf
Next, open Apache default SSL site configuration file with a text editor and enable URL rewrite rules by adding the following lines of code after DocumentRoot directive, as shown in the below sample:
nano /etc/apache2/sites-enabled/default-ssl.conf
SSL site configuration file excerpt:
<Directory /var/www/html>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>
Also, make the following change to VirtualHost line to look like shown in the excerpt below:
<VirtualHost *:443>
Close the SSL Apache file and open the /etc/apache2/sites-enabled/000-default.conf file for editing and add the same URL rewrite rules as for SSL configuration file. Insert the lines of code after DocumentRoot statement as shown in the example below.
<Directory /var/www/html>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>
Finally, restart Apache daemon to apply all rules configured so far and visit your domain via HTTP protocol. Because you’re using the automatically Self-Signed certificates pairs issued by Apache at installation, an error warning should be displayed in the browser.
systemctl restart apache2
Accept the warning in order to continue and be redirected to Apache default web page, as illustrated in the image below.
In case the UFW firewall application blocks incoming network connections to HTTPS port, you should add a new rule to allow HTTPS traffic to pass through firewall by issuing the following command.
ufw allow 'WWW Full'
or
ufw allow 443/tcp
If iptables is the default firewall application installed to protect your Debian system at network level, add the following rule to allow port 443 inbound traffic in the firewall so that visitors can browse your domain name.
iptables -I INPUT -p tcp --destination-port 443 -j ACCEPT
systemctl iptables-persistent save
systemctl iptables-persistent reload
On the next step, we need to make some further changes to PHP default configuration file in order to assure that the following PHP variables are enabled and the PHP timezone setting is correctly configured and matches your system geographical location. Open the /etc/php/7.0/apache2/php.ini file for editing and assure that the following lines are setup as follows. Also, initially, make a backup of the PHP configuration file.
cp /etc/php/7.0/apache2/php.ini{,.backup}
nano /etc/php/7.0/apache2/php.ini
Search, edit, and change the following variables in the php.ini configuration file:
file_uploads = On
allow_url_fopen = On
memory_limit = 128 M
upload_max_file_size = 64M
date.timezone = Europe/London
Increase memory_limit variable as suitable to support large file attachments and replace the time.zone variable accordingly to your physical time by consulting the list of time zones provided by PHP docs at the following link http://php.net/manual/en/timezones.php.
If you want to increase the load speed of your website pages via OPCache plugin available for PHP7, append the following OPCache settings at the bottom of the PHP interpreter configuration file, as detailed below:
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Close the php.ini configuration file and verify the end of PHP configuration file to check if the variables have been correctly added by issuing the below command.
tail /etc/php/7.0/apache2/php.ini
After you’ve made all changes explained above, restart apache daemon to apply the new changes by issuing the following command.
systemctl restart apache2
Finally, create a PHP info file by executing the following command and check if the PHP time zone has been correctly configured by visiting the PHP info script file from a browser at the following URL, as illustrated in the below image. Scroll down to date setting to check php time zone configuration.
echo '<?php phpinfo(); ?>'| tee /var/www/html/info.php
X-Cart e-commerce web application stores different configurations, such as users, sessions, contacts, products, catalogs and others, in a RDBMS database. In this guide we’ll configure X-Cart to use MariaDB database as backend. Issue the below command to install MariaDB database and the PHP module needed to access mysql database.
apt install mariadb-server php7.0-mysql
After you’ve installed MariaDB, verify if the daemon is running and listens for connections on localhost, port 3306, by running the netstat command.
netstat –tlpn | grep mysql
Then, log in to MySQL console and secure MariaDB root account by issuing the following commands.
mysql -h localhost
use mysql;
update user set plugin='' where user='root';
flush privileges;
exit
On the next step, secure MariaDB by executing the script mysql_secure_installation provided by the installation packages from Debian stretch repositories. While running the script will ask a series of questions designed to secure MariaDB database, such as: to change MySQL root password, to remove anonymous users, to disable remote root logins and delete the test database. Execute the script by issuing the below command and assure you type yes to all questions asked in order to fully secure MySQL daemon. Use the following script output except as a guide.
sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
In order to test MariaDB security, try logging in to the database from console with no root password. The access to the database should be denied if no password is provided for the root account. If the password is supplied, the login process should be granted to MySQL console, as shown in the following screenshot.
mysql -h localhost -u root
mysql -h localhost -u root –p
Next, logged in to MariaDB database console, create a database for X-Cart application and a user with a password that will be used to manage the application database, by issuing the following commands. Replace the database name, user and password accordingly.
mysql –u root -p
create database my_xcart;
grant all privileges on my_xcart.* to 'xcart_user' identified by 'x_password';
flush privileges;
exit
In order to apply all changes made so far, restart MySQL and Apache daemons and verify if daemons are running by issuing the following commands.
systemctl restart mysql apache2
systemctl status mysql apache2
Install X-Cart
After all system requirements are met for your e-commerce online shop installation, visit the X-Cart download page at https://www.x-cart.com/download.html from a desktop machine and download the latest zip package compressed archive by filling the required web form from their website.
After the archive download completes, use a file transfer protocol, such as scp to copy the downloaded zip file from desktop machine to your Debian server. Transfer the zip file to your server /tmp directory. List remote server /tmp directory via SSH to confirm if the upload transfer of the zip file completed with success.
scp x-cart-5.3.3.4-gb.zip root@your_server_IP_or_domain:/tmp
ssh root@your_server_IP_or_domain 'ls /tmp'
After the zip archive download finishes, extract X-Cart zip compressed archive to /tmp directory and list the extracted files by issuing the below commands. Also, remove the default index.html file installed by Apache web server to webroot path and also delete the info.php file created earlier.
rm /var/www/html/index.html
rm /var/www/html/info.php
cd /tmp
unzip x-cart-5.3.3.4-gb.zip
ls
The installation files for X-Cart are located in your current working directory (/tmp directory in this case) in xcart directory. Issue ls command to list xcart directory files. Copy all the content of the xcart directory to your web server document root path by issuing the following command. Also, make sure you copy the hidden file .htaccess to webroot path.
cd /tmp
ls -al xcart/
cp -rf xcart/* /var/www/html/
cp xcart/.htaccess /var/www/html/
Next, execute the following commands in order to grant Apache runtime user with full write permissions to the web root path. Use the ls command to list permissions for application’s installed files located in the /var/www/html/ directory.
chown -R www-data:www-data /var/www/html/
ls –al /var/www/html/
Next, proceed X-Cart online shop installation process by opening a browser and navigate your server’s IP address or domain name or server FQDN via HTTPS protocol. On the first installation screen X-Cart installer will display a message saying that X-cart is not installed, as shown in the below image. Click on the Click here link in order to start the installation process.
On the next installation screen of X-Cart, the wizard will present you the license agreement, as shown in the below image. Check I accept the License Agreement and the Privacy policy and hit on Next button to accept the license and continue the installation process.
Next, create an administrator account for your online store backend, based on your email address, and choose a password for this account, as shown in the below screenshot. Hit the Next button to continue the installation process.
In the next installation screen, add MySQL database address, name and credentials created earlier for the X-Cart database. Check Install a sample catalog and hit on Advanced MySQL settings and Advanced server settings
In advanced MySQL settings leave the port value as default to 3306 and the prefix to xc_. Scroll down to Advanced server settings and add your server hostname, or your domain name, in Web server name and in Secure web server name. Select your store default time zone and hit on Next button to finish this installation stage, as illustrated in the image below.
Wait a few minutes for the installer to setup directories and populate the database schema with all required information and for the entire installation process to complete, as shown in the below screenshot.
After the installation completes, the installer will display two links that can be used to access X-Cart Backend Administration panel, which will be used to manage your online shop, and X-cart Online Shop frontend (Customer zone) of your store, which will be displayed to your clients.
In order to visit your online store frontend, click on the Customer zone link and the frontend of your e-commerce application will be displayed in your browser as illustrated in the below screenshot. You can also visit the store frontend by navigating to your server IP address or domain name via HTTPS protocol.
Before logging in to your store backend admin panel, first, return to server console and issue the following commands to secure X-cart shopping system configuration file.
chmod -R 755 /var/www/html/
chmod -R 755 /var/www/html/etc/
chmod -R 644 /var/www/html/config.php
chown -R root:root /var/www/html/etc/
chown root:root /var/www/html/config.php
In order to manage your X-Cart online store, click on Administrator zone (Backoffice) link in order to access the store admin backend. Use the credentials configured during the installation process in order to log in to X-Cart backend panel, as shown in the screenshot below.
You can also visit the X-Cart admin web panel by navigating to your server IP address or domain name via the HTTPS protocol to /admin.php URL.
https://yourdomain.tld/admin.php
After logging in to X-Cart backend admin panel, a notification will appear in your screen and will inform you that the trial version for business will expire in 30 days. Also, you should navigate to Update menu and install all updates released for X-cart current edition, as illustrated in the below screenshot.
Finally, to force visitors to browse X-Cart frontend website and to securely access the backend interface via HTTPS protocol in order to encrypt the traffic between the server and client browsers, return to your server’s terminal and edit the .htaccess file located in your website path, by issuing the below command.
nano /var/www/html/.htaccess
Then, edit the .htaccess file, and at the bottom of the file modify the native PHP settings with the below configurations. You can change PHP settings to match your own server resources.
.htaccess file excerpt:
# Modify PHP settings
php_flag register_globals off
php_flag magic_quotes_gpc Off
php_value max_execution_time 200
php_value max_input_time 200
php_value upload_max_filesize 500M
php_value post_max_size 500M
Finally, ad the below rules to redirect domain traffic to HTTPS and protect install and system directories from being accessed via web requests.
# Redirect to HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
That’s all! You have successfully installed and configured X-Cart e-commerce application in Debian 9.2. However, because Apache HTTP server uses Self-Signed certificates to encrypt the traffic between the server and visitor’s browsers, a warning message will always be generated and displayed in their browsers. This warning is bad for your online shop business. In this case you should buy a certificate issued by a trusted Certificate Authority or get a free certificate pair from Let’s Encrypt CA.
For other custom configurations regarding X-Cart application, visit the documentation page at the following address: https://kb.x-cart.com/en/index.html