LAMP, Linux Apache MySQL PHP
Some people argue that PHP can be replaced with Python or Perl.
- ... and Apache can be replaced by lighttpd!
... and MySQL have been replaced by MariaDB!
Before starting the installation, make sure your distribution is up to date (the '#' indicates that you should do this as root):
# apt update && apt upgrade
Next install MariaDB using the following command:
# apt install mariadb-server mariadb-client
Immediately after you have installed the MariaDB server, you should run the next command to secure your installation.
The previous script change root password and make some other security improvements.
You must never use your root account and password when running databases. The root account is a privileged account which should only be used for admin procedures. You will need to create a separate user account to connect to your MariaDB databases from a PHP script. You can add users to a MariaDB database by using a control panel like phpMyAdmin to easily create or assign database permissions for users.
The web server can be installed as follows:
# apt install apache2 apache2-doc
Configuring user directories for Apache Web Server
# a2enmod userdir
Configure Apache module userdir in /etc/apache2/mods-enabled/userdir.conf as follows:
<IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride All Options MultiViews Indexes SymLinksIfOwnerMatch <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> </IfModule>
From apache 2.4 and later use instead:
<IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride All Options MultiViews Indexes SymLinksIfOwnerMatch <Limit GET POST OPTIONS> Require all granted </Limit> <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept> </Directory> </IfModule>
Create directory as user (not as root):
Change group as root (substitute your username) and restart web server:
# chgrp www-data /home/<username>/public_html # service apache2 restart
If you get a Forbidden error when accessing home folder through Apache check /home/username has permissions drwxr-xr-x. If the permissions are wrong correct them as such:
# chmod 755 /home/<username>
To be able to serve PHP (PHP needs to be installed as per instructions) check that /etc/apache2/mods-available/php5.conf is correct:
<IfModule mod_php5.c> <FilesMatch "\.ph(p3?|tml)$"> SetHandler application/x-httpd-php Require all granted </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source Require all denied </FilesMatch> # To re-enable php in user directories comment the following lines # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it # prevents .htaccess files from disabling it. #<IfModule mod_userdir.c> # <Directory /home/*/public_html> # php_admin_value engine Off # </Directory> #</IfModule> </IfModule>
Place some web content in ~/public_html and see the results at http://localhost/~username
The "P" part
Installing the PHP subset of LAMP in Debian is quite simple, you just type this as root in an console (the # is the root prompt symbol):
# apt install php php-mysql
If you prefer Perl, then you might consider:
# apt install perl libapache2-mod-perl2
If you prefer Python, then you might consider:
# apt install python3 libapache2-mod-python
Apache2 configuration file: /etc/apache2/apache2.conf
You can edit this file when needed, but for most simple applications, this should not be necessary as most stuff is now done using conf.d.
To test the PHP interface, edit the file /var/www/html/test.php:
# nano /var/www/html/test.php
and insert the following code.
<?php phpinfo(); ?>
Afterwards, point your browser to http://<SERVERIP>/test.php to start using it.
Probably you also want to install phpMyAdmin for easy configuration:
# apt install phpmyadmin
To have access to phpMyAdmin on your website (i.e. http://example.com/phpmyadmin/ ) all you need to do is include the following line in /etc/apache2/apache2.conf (needed only before Squeeze, since 6.0 it will be linked by the package install script to /etc/apache2/conf.d/phpmyadmin.conf -> ../../phpmyadmin/apache.conf automatically):
# /etc/init.d/apache2 restart
Go to http://<SERVERIP>/phpmyadmin/ to start using it. (Use the IP or name of your PC/server instead of <SERVERIP> (The localhost IP is always 127.0.0.1).)
A usual issue with PHP configuration is to enable MySQL. Just edit the file and uncomment the following line (tip: search for mysql)
Note that this should not be needed anymore as conf.d is now used.
MySQL : /etc/mysql/my.cnf
You can find configuration examples in /usr/share/doc/mysql-server/examples