How to Install a LAMP Stack on Arch Linux

A LAMP (Linux, Apache, MySQL, PHP) stack is a common web stack used to prepare servers for hosting web content. This guide shows you how to install a LAMP stack an Arch Linux server.

 

Note:

1. This guide is written for a non-root user. Commands that require elevated privileges are prefixed with sudo

2. Update your system:

sudo pacman -Syu

Apache Install and Configure

  1. Install Apache 2.4:

    sudo pacman -Syu apache

     

  2. Edit the httpd-mpm.conf Apache configuration file in /etc/httpd/conf/extra/ to adjust the resource use settings. 

    Note:

    Before changing any configuration files, it is advised that you make a backup of the file. To make a backup:

    cp /etc/httpd/conf/extra/httpd-mpm.conf ~/httpd-mpm.conf.backup

    /etc/httpd/conf/extra/httpd-mpm.conf
    StartServers 4 MinSpareServers 20 MaxSpareServers 40 MaxRequestWorkers 200 MaxConnectionsPerChild 4500

     

  3. Edit the httpd-default.conf file to turn KeepAlive off.
    /etc/httpd/conf/extra/httpd-default.conf
    KeepAlive Off

     

  4. Set Apache to start at boot: sudo systemctl enable httpd.service

Add Name-Based Virtual Hosts

Virtual hosting can be configured so that multiple domains (or subdomains) can be hosted on the server. These websites can be controlled by different users, or by a single user, as you prefer. There are different ways to set up virtual hosts; however, we recommend the method below.

 

1. Open httpd.conf and edit the line DocumentRoot /srv/http to define the default document root:

/etc/httpd/conf/httpd.conf
DocumentRoot "/srv/http/default"

 

2. Uncomment the line that reads Include conf/extra/httpd-vhosts.conf near the end of the /etc/httpd/conf/httpd.conf file:

/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf

 

3. Open httpd-vhosts.conf, under the extra folder. Edit the example virtual hosts block to resemble the ones below, replacing example.com with your domain.

/etc/httpd/conf/extra/httpd-vhosts.conf
 
<VirtualHost *:80>
     ServerAdmin webmaster@example.com
     ServerName example.com
     ServerAlias www.example.com
     DocumentRoot /srv/http/example.com/public_html/
     ErrorLog /srv/http/example.com/logs/error.log
     CustomLog /srv/http/example.com/logs/access.log combined
            <Directory />
               Order deny,allow
               Allow from all
            </Directory>
</VirtualHost>         

Remove the second example in the file, or use it configure the second website.

Note:

ErrorLog and CustomLog entries are suggested for more fine-grained logging but are not required. If they are defined (as shown above), the logs directories must be created before you restart Apache.

 

4. Create the directories referenced in the configuration above:

sudo mkdir -p /srv/http/default
sudo mkdir -p /srv/http/example.com/public_html
sudo mkdir -p /srv/http/example.com/logs

 

5. After you’ve set up your virtual hosts, issue the following command to run Apache for the first time:

sudo systemctl start httpd.service

 

You should now be able to access your website. If no files are uploaded you will see an Index of / page.

 

MySQL Install and Configure

By default, Arch Linux provides MariaDB as a relational database solution. MariaDB is an open source drop-in replacement for MySQL, and all system commands that reference mysql are compatible with it.

1. Install the mariadb, mariadb-clients and libmariadbclient packages:

sudo pacman -Syu mariadb mariadb-clients libmariadbclient

 

2. Install the MariaDB data directory:

sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

 

3. Start MySQL and set it to run at boot:

sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service

 

4. Run mysql_secure_installation, a program that helps secure MySQL. mysql_secure_installation gives you the option to set your root password, disable root logins from outside localhost, remove anonymous user accounts, remove the test database and then reload the privilege tables:

mysql_secure_installation Create

 

Create a Database

1. Log into MySQL:

mysql -u root -p

-u specifies the user, and -p will prompt you for the password.

 

2. You will see the MariaDB prompt. Create a database and create and grant a user permissions on the database:

CREATE DATABASE databasename;
GRANT ALL ON databasename.* TO 'username' IDENTIFIED BY 'password';

 

3. To quit MariaDB type:

quit

With Apache and MySQL installed, you are now ready to move on to installing PHP to provide scripting support for your web application.

 

PHP

PHP makes it possible to produce dynamic and interactive pages using your own scripts and popular web development frameworks. Many popular web applications like WordPress are written in PHP. If you want to develop your websites using PHP, you must first install it.

1. Install PHP:

sudo pacman -Syu php php-apache

 

2. Edit /etc/php/php.ini for better error messages and logs, and upgraded performance.

/etc/php/php.ini

error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
log_errors = On
error_log = /var/log/php/error.log
max_input_time = 30
extension=mysql.so

Note:

Ensure that all lines noted above are uncommented. A commented line begins with a semicolon (;).

 

3. Create the log directory for PHP and give the Apache user ownership:

sudo mkdir /var/log/php
sudo chown http /var/log/php

 

4. Enable the PHP module in the /etc/httpd/conf/httpd.conf file by adding the following lines in the appropriate sections:

/etc/httpd/conf/httpd.conf
 
# Dynamic Shared Object (DSO) Support
LoadModule php7_module modules/libphp7.so
AddHandler php7-script php

# Supplemental configuration
# PHP 7
Include conf/extra/php7_module.conf

# Located in the <IfModule mime_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

In the same file, comment out the line LoadModule mpm_event_module modules/mod_mpm_event.so by adding a # in front, and add the line LoadModule mpm_prefork_module modules/mod_mpm_prefork.so:

/etc/httpd/conf/httpd.conf

#LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

 

5. Restart the Apache:

sudo systemctl restart httpd.service

 

Was this answer helpful? 0 Users Found This Useful (0 Votes)