在 Arch Linux 上安装 LAMP(Linux、Apache、MySQL/MariaDB 和 PHP/PhpMyAdmin)

Arch Linux 提供了一个灵活的前沿系统环境,是开发小型非关键系统上的 Web 应用程序的强大最佳解决方案,因为它是完全开源的,并为服务器和数据库提供了最新版本的内核和 Web 软件。

Install LAMP in Arch Linux

这个教程的主要目的是为您提供一个完整的逐步指导,最终将带领您安装 Web 开发中最常用的软件组合之一:LAMP(Linux、Apache、MySQL/MariaDB 和 PHP/PhpMyAdmin),并将向您介绍一些好用的功能(快速且简单的 Bash 脚本),这些功能在 Arch Linux 系统中没有,但可以简化创建多个虚拟主机、生成SSL 证书以及用于安全的HTTS交易所需的密钥的工作。

要求

  1. 之前的Arch Linux 安装过程 – 跳过最后涉及 DHCP 部分。
  2. 之前的LEMP 在 Arch Linux 上的安装 – 仅包括配置静态 IP 地址和远程SSH 访问的部分。

步骤 1:安装基本软件 LAMP

1. 在安装了带有静态 IP 地址和远程系统访问的最小系统后,使用pacman工具升级您的 Arch Linux 系统。

$ sudo pacman -Syu

2. 当升级过程完成后,逐步安装LAMP,首先安装Apache Web服务器并启动/验证每个服务器进程守护程序。

$ sudo pacman -S apache 
$ sudo systemctl start httpd 
$ sudo systemctl status httpd
Install Apache Web Server

3. 安装PHP动态服务器端脚本语言及其Apache模块。

$ sudo pacman -S php php-apache

4. 在最后一步安装MySQL数据库,选择1(MariaDB)社区数据库分支,然后启动并检查守护程序状态。

$ sudo pacman -S mysql 
$ sudo systemctl start mysqld 
$ sudo systemctl status mysqld
Install MySQL Database
Start MySQL Database

现在您已安装并启动基本的LAMP软件,使用默认配置到目前为止。

步骤2:保护MySQL数据库

5. 下一步是通过为root账户设置密码、删除匿名用户账户、删除测试数据库以及禁止用户root远程登录来保护MySQL数据库(按下[Enter]键输入root账户当前密码,并对所有安全问题回答)。

$ sudo mysql_secure_installation
Secure MySQL Database
Set MySQL root Password

6. 运行以下命令验证MySQL数据库的连接,然后通过quitexit语句退出数据库shell。

$ mysql -u root -p
Verify MySQL Database Connectivity

步骤3:修改Apache主配置文件

7. 下面的配置大多与Apache Web服务器有关,可为使用PHP脚本语言的虚拟主机提供动态界面,SSL或非SSL虚拟主机并通过修改httpd服务文件配置来完成。

首先用您喜欢的文本编辑器打开主Apache文件配置。

$ sudo nano /etc/httpd/conf/httpd.conf

在文件的最底部附加以下两行。

IncludeOptional conf/sites-enabled/*.conf
IncludeOptional conf/mods-enabled/*.conf
Include Virtual Host Configuration

Include语句的作用是告诉Apache,从现在开始,它应该从位于/etc/httpd/conf/sites-enabled/(用于虚拟主机)和/etc/httpd/conf/mods-enabled/(用于已启用服务器模块)系统路径中以.conf扩展名结尾的所有文件中读取进一步的配置。

8.在Apache已经收到这两个指令的指示后,使用以下命令创建必要的系统目录。

$ sudo mkdir /etc/httpd/conf/sites-available
$ sudo mkdir /etc/httpd/conf/sites-enabled
$ sudo mkdir /etc/httpd/conf/mods-enabled

sites-available路径保存所有未在Apache上激活的虚拟主机配置文件,但接下来的Bash脚本将使用这个目录来链接和启用那些位于其中的网站。

步骤4:创建a2ensite和a2dissite Apache命令

9.现在是创建a2ensitea2dissite Apache脚本的时候了,这将作为启用或禁用虚拟主机配置文件的命令。输入cd命令返回到您的$HOME用户路径,使用您喜爱的编辑器创建您的basha2enistea2dissite脚本。

$ sudo nano a2ensite

向该文件添加以下内容。

#!/bin/bash
if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled  ; then
echo "-------------------------------"
else
mkdir /etc/httpd/conf/sites-available
mkdir /etc/httpd/conf/sites-enabled
fi

avail=/etc/httpd/conf/sites-available/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-available/`

if [ "$#" != "1" ]; then
        echo "Use script: n2ensite virtual_site"
        echo -e "\nAvailable virtual hosts:\n$site"
        exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart Apache server: sudo systemctl restart httpd"
else
echo  -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site"
exit 0
fi
fi
Create a2eniste Apache Script

现在创建a2dissite bash脚本文件。

$ sudo nano a2dissite

追加以下内容。

#!/bin/bash
avail=/etc/httpd/conf/sites-enabled/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-enabled`

if [ "$#" != "1" ]; then
        echo "Use script: n2dissite virtual_site"
        echo -e "\nAvailable virtual hosts: \n$site"
        exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nsudo systemctl restart httpd"
exit 0
fi
fi
Create a2dissite Apache Script

10.创建文件后,分配执行权限并将它们复制到$PATH可执行目录以使它们在整个系统中可用。

$ sudo chmod +x a2ensite a2dissite
$ sudo cp a2ensite a2dissite /usr/local/bin/
Set Execute Permissions

步骤5:在Apache中创建虚拟主机

11. 在 Arch Linux 上,Apache Web 服务器的虚拟主机默认配置文件位于路径 /etc/httpd/conf/extra/ 中的 httpd-vhosts.conf 文件中,但如果您的系统使用了很多虚拟主机,很难追踪哪个网站是激活的。如果您想要禁用一个网站,您必须注释或删除其所有指令,如果您的系统提供了很多网站并且您的网站有更多的配置指令,这可能是一项困难的任务。

使用sites-availablesites-enabled路径,极大地简化了启用或禁用网站的工作,即使它们被激活与否,也保留了所有网站的配置文件。

接下来,我们将构建第一个指向默认 localhost 的虚拟主机,使用默认的DocumentRoot路径来提供网站文件(/srv/http)。

$ sudo nano /etc/httpd/conf/sites-available/localhost.conf

在这里添加以下Apache指令。

<VirtualHost *:80>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin [email protected]
        ErrorLog "/var/log/httpd/localhost-error_log"
        TransferLog "/var/log/httpd/localhost-access_log"

<Directory />
    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

</VirtualHost>
Create Virtual Hosts in Apache

这里最重要的声明是指令PortServerName,指示Apache在端口80上打开网络连接,并将所有使用localhost名称的查询重定向到位于路径/srv/http/中的文件。

12. 创建 localhost 文件后,激活它,然后重新启动httpd守护进程以查看更改。

$ sudo a2ensite localhost
$ sudo systemctl restart httpd
Active a2ensite Script

13. 然后将您的浏览器指向http://localhost,如果您在 Arch 系统上运行,或者http://Arch_IP,如果您使用远程系统。

Browse Apache

步骤6:在 LAMP 上使用虚拟主机启用 SSL

SSL安全套接层)是一种旨在加密网络或互联网上的HTTP连接的协议,使数据流能够通过对称/非对称加密密钥在安全通道上传输,并在Arch Linux中通过OpenSSL软件包提供。

14. 默认情况下,Arch Linux中的Apache未启用SSL模块,可以通过在主httpd.conf配置文件中取消注释mod_ssl.so模块以及附加在额外httpd路径中的Include httpd-ssl.conf文件来激活。

但为了简化操作,我们将在mods-enabled路径中创建一个新的SSL模块文件,并保持主Apache配置文件不变。创建以下文件用于SSL模块,并添加以下内容。

$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf

追加以下内容。

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

Listen 443

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/run/httpd/ssl_scache(512000)"
SSLSessionCacheTimeout  300
Enable SSL with Virtual Hosting

15. 现在创建一个虚拟主机文件,指向相同的本地主机名,但这次使用SSL服务器配置,并略微更改其名称以提醒您它代表带有SSL的本地主机。

$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf

在此文件中添加以下内容。

<VirtualHost *:443>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin [email protected]
        ErrorLog "/var/log/httpd/localhost-ssl-error_log"
        TransferLog "/var/log/httpd/localhost-ssl-access_log"

SSLEngine on

SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt"
SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/srv/http/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/var/log/httpd/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<Directory />

    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

</VirtualHost>
Create SSL Virtual Host

除了PortServerName指令之外,这里的其他重要指令是指向SSL证书文件和SSL密钥文件的指令,这两个文件尚未创建,所以不要重启Apache Web服务器,否则会出错。

16. 为创建所需的SSL证书文件和密钥安装OpenSSL软件包,执行以下命令。

$ sudo pacman -S openssl

17. 然后创建以下Bash脚本,自动创建并存储所有Apache证书密钥/etc/httpd/conf/ssl/系统路径中。

$ sudo nano apache_gen_ssl

添加以下文件内容,然后保存并设置为可执行。

#!/bin/bash
mkdir /etc/httpd/conf/ssl
cd /etc/httpd/conf/ssl

echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"
read cert

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt

echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!"

ls -all /etc/httpd/conf/ssl
exit 0
Store Apache Certificates and Keys
$ sudo chmod +x apache_gen_ssl

如果您希望该脚本在整个系统中可用,请将其复制到可执行的$PATH中。

$ sudo cp /apache_gen_ssl  /usr/local/bin/

18. 现在运行脚本生成您的证书密钥。提供您的SSL选项,并不要忘记将证书名称和通用名称与您的官方域名(FQDN)匹配。

$ sudo ./apache_gen_ssl
Create Apache Certificates and Keys
Enter Certificates Details

证书和密钥生成完成后,请不要忘记修改SSL虚拟主机证书和密钥配置,以匹配此证书的名称。

19. 最后一步是激活新的SSL虚拟主机并重新启动服务器以应用配置。

$ sudo a2ensite localhost-ssl
$ sudo systemctl restart httpd
Activate SSL Virtual Host

就是这样!要验证它,打开浏览器并在URL中添加Arch IP,使用HTTPS协议:https://localhosthttps://system_IP

Browse Apache over SSL

第7步:在Apache上启用PHP

20. 默认情况下,Apache在Arch Linux中仅提供HTML静态文件内容,不支持动态脚本语言。要激活PHP,请首先打开Apache主配置文件,然后搜索并取消注释以下LoadModule语句(在Arch Linux中,php-apachemod_mpm_event不兼容)。

$ sudo nano /etc/httpd/conf/httpd.conf

使用[Ctrl]+[w]搜索并注释以下行,使其如下所示。

#LoadModule mpm_event_module modules/mod_mpm_event.so
Enable PHP Module

21. 然后在 mods-enabled 路径下创建一个新的 PHP 模块文件,内容如下。

$ sudo nano /etc/httpd/conf/mods-enabled/php.conf

添加以下内容(必须使用 mod_mpm_prefork</diy5)。

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule php5_module modules/libphp5.so

Include conf/extra/php5_module.conf
Enable mod_mpm_prefork Module

22. 要验证设置,请在您的 DocumentRoot(/srv/http/)中创建一个名为 info.php 的 PHP 文件,然后重新启动 Apache 并将浏览器指向 info.php 文件:https://localhost/info.php

<?php

phpinfo();

?>
$ sudo systemctl restart httpd
Verify PHP Information

就是这样!如果一切看起来像上面的图片,那么您现在已经在 Apache 上启用了 PHP 动态服务器端脚本语言,您现在可以使用开源 CMS(如 WordPress)来开发网站。

如果您想验证 Apache 语法配置并查看加载的模块列表而不重启 httpd 守护程序,请运行以下命令。

$ sudo apachectl configtest
$ sudo apachectl -M

步骤 8:安装并配置 PhpMyAdmin

23. 如果您不熟练使用 MySQL 命令行,想要通过 Web 界面提供简单的远程访问到 MySQL 数据库,则需要在您的 Arch 系统上安装 PhpMyAdmin 软件包。

$ sudo pacman -S phpmyadmin php-mcrypt

24. 安装完软件包后,您需要启用一些 PHP 扩展(mysqli.somcrypt.so – 用于内部认证),您还可以为未来的 CMS 平台启用其他需要的模块,如 openssl.soimap.soiconv.so 等。

$ sudo nano /etc/php/php.ini

找到并取消注释上述扩展。

extension=mcrypt.so
extension=mssql.so
extension=mysqli.so
extension=openssl.so
extension=iconv.so
extension=imap.so
extension=zip.so
extension=bz2.so
Install and Configuring PhpMyAdmin

在同一文件中,也要搜索并定位open_basedir语句,并添加PhpMyAdmin系统路径(/etc/webapps//usr/share/webapps/)以确保PHP可以访问和读取这些目录下的文件(如果您还更改了虚拟主机的DocumentRoot路径从/srv/http/到其他位置,您也需要在这里追加新的路径)。

Enable open_basedir

25. 要访问PhpMyAdmin Web界面的最后一步是在虚拟主机上添加PhpMyAdmin Apache语句。作为安全措施,确保PhpMyAdmin Web界面只能从本地主机(或系统IP地址)使用HTTPS协议进行访问,而不能从其他不同的虚拟主机访问。因此,打开您的localhost-ssl.conf Apache文件,在最后一个语句之前添加以下内容。

$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"

<Directory "/usr/share/webapps/phpMyAdmin">
    DirectoryIndex index.html index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>
Create PhpMyAdmin Virtual Host Configuration

26. 然后重新启动Apache守护程序,并将浏览器指向以下地址,您应该能够访问您的PhpMyAdmin Web界面:https://localhost/phpmyadminhttps://system_IP/phpmyadmin

Access PhpMyAdmin Web Interface

27. 如果登录到PhpMyAdmin后,看到一个有关blowfish_secret的底部错误,请打开并编辑/etc/webapps/phpmyadmin/config.inc.php文件,并插入一个类似以下语句中的随机字符串,然后刷新页面。

$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;
Fix blowfish_secret Error

第9步:在整个系统中启用LAMP

28. 如果您希望LAMP栈在系统重新启动后自动启动,请运行以下命令。

$ sudo systemctl enable httpd mysqld
Enable LAMP System Wide

这些是在LAMP上的一些主要配置设置,需要将Arch Linux系统转变为一个简单但功能强大、快速且稳健的Web平台,使用先进的服务器软件,适用于小型非关键环境。如果您执意要在大型生产环境中使用它,您应该备足耐心,注意软件包更新,并定期制作系统备份镜像,以便在系统故障时快速恢复系统。

Source:
https://www.tecmint.com/install-lamp-in-arch-linux/