How To Install on GNU/Linux CentOS 7 the LAMP stack (Apache, MySQL, PHP) + phpMyAdmin
Following you will find the commands to perform the installation of the LAMP
stack (Apache
, MySQL
, PHP
) and phpMyAdmin
on a GNU
/Linux CentOS 7
.
In this guide we kept the information to the bare minimum about what is what.
Installation
To perform the installation, please execute the following as a user with administrative rights:
#Update your system sudo yum update -y; #Install Apache, MariaDB (MySQL), PHP (with MySQL support and phpMyAdmin which is a free software tool written in PHP, intended to handle the administration of MySQL over the Web) sudo yum install httpd mariadb-server mariadb php php-mysql phpmyadmin -y; #Start Apache (PHP will start with Apache as module) sudo systemctl start httpd; #Enable Apache to start on boot sudo systemctl enable httpd; #Start MariaDB(MySQL) sudo systemctl start mariadb; #Enable MariaDB(MySQL) to start on boot sudo systemctl enable mariadb;
Configuration of MariaDB (MySQL)
By now, your system should have all necessary packages installed and the services up and running.
Now it is best to configure your MariaDB
(MySQL
) in a way to disable some test data and test accounts and assign a password to your root user.
Execute the following to do so:
sudo mysql_secure_installation;
This tool will ask you for your current database root password. Since you just installed MariaDB
(MySQL
) you should not have one, so leave the field empty and press enter.
We recommend to answer with Y
(Yes
) in all of the security questions of this tool and set a strong password for your root user.
sudo mysql_secure_installation;
Following is the output we got from this tool:
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. Set 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!
Configuration of the firewall
Executing the following will enable access to your web-server from the network for http
and https
.
sudo firewall-cmd --permanent --zone=public --add-service=http; sudo firewall-cmd --permanent --zone=public --add-service=https; sudo firewall-cmd --reload;
Location of files / Where to upload your website
In CentOS 7
, the directory where the website pages are located is at /var/www/html/
.
You can place your html
and php
code there.
Configuration of phpMyAdmin
phpMyAdmin
should be available at http://<IP of the web server>/phpmyadmin
The access to phpMyAdmin
is controlled by the Apache Virtual Host File
for phpMyAdmin
that is found here /etc/httpd/conf.d/phpMyAdmin.conf
.
By default, this configuration file only allows access to phpMyAdmin
from the localhost
(127.0.0.1
).
In case you want to access it from another machine, you need to modify this file.
Before doing any changes, make a backup of the original file first:
sudo cp /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf.original;
To enable access only for a specific IP
Edit the Apache Virtual Host File
for phpMyAdmin
(/etc/httpd/conf.d/phpMyAdmin.conf
) and change every reference of 127.0.0.1
with the IP
address of the machine you want to give access to.
There should be four lines that you need to change.
In our installation it was the following lines:
17
–Require ip 127.0.0.1
25
–Allow from 127.0.0.1
34
–Require ip 127.0.0.1
42
–Allow from 127.0.0.1
Then restart the Apache
service to apply the changes:
sudo systemctl restart httpd;
To enable access to any IP
Delete the existing file and create a new one.
sudo rm /etc/httpd/conf.d/phpMyAdmin.conf; sudo touch /etc/httpd/conf.d/phpMyAdmin.conf;
Using the editor of your choice add the following content and save it:
Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin <Directory /usr/share/phpMyAdmin/> AllowOverride None Options None Allow from All Require all granted </Directory>
Then restart the Apache service to apply the changes:
sudo systemctl restart httpd;
Following is the original content of our Apache Virtual Host File
for phpMyAdmin
(/etc/httpd/conf.d/phpMyAdmin.conf
)
[download id=”3647″]
$ cat /etc/httpd/conf.d/phpMyAdmin.conf # phpMyAdmin - Web based MySQL browser written in php # # Allows only localhost by default # # But allowing phpMyAdmin to anyone other than localhost should be considered # dangerous unless properly secured by SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin <Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 192.168.0.20 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 192.168.0.20 Allow from ::1 </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 192.168.0.20 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 192.168.0.20 Allow from ::1 </IfModule> </Directory> # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # <Directory /usr/share/phpMyAdmin/libraries/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/lib/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/frames/> Order Deny,Allow Deny from All Allow from None </Directory> # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # #<IfModule mod_security.c> # <Directory /usr/share/phpMyAdmin/> # SecRuleInheritance Off # </Directory> #</IfModule>
[download id=”3647″]