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

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

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


现在您已安装并启动基本的LAMP软件,使用默认配置到目前为止。
步骤2:保护MySQL数据库
5. 下一步是通过为root账户设置密码、删除匿名用户账户、删除测试数据库以及禁止用户root远程登录来保护MySQL数据库(按下[Enter]键输入root账户当前密码,并对所有安全问题回答是)。
$ sudo mysql_secure_installation


6. 运行以下命令验证MySQL数据库的连接,然后通过quit或exit语句退出数据库shell。
$ mysql -u root -p

步骤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语句的作用是告诉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.现在是创建a2ensite和a2dissite Apache脚本的时候了,这将作为启用或禁用虚拟主机配置文件的命令。输入cd命令返回到您的$HOME用户路径,使用您喜爱的编辑器创建您的basha2eniste和a2dissite脚本。
$ 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

现在创建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

10.创建文件后,分配执行权限并将它们复制到$PATH可执行目录以使它们在整个系统中可用。
$ sudo chmod +x a2ensite a2dissite $ sudo cp a2ensite a2dissite /usr/local/bin/

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

这里最重要的声明是指令Port和ServerName,指示Apache在端口80上打开网络连接,并将所有使用localhost名称的查询重定向到位于路径/srv/http/中的文件。
12. 创建 localhost 文件后,激活它,然后重新启动httpd守护进程以查看更改。
$ sudo a2ensite localhost $ sudo systemctl restart httpd

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

步骤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

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>

除了Port和ServerName指令之外,这里的其他重要指令是指向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

$ sudo chmod +x apache_gen_ssl
如果您希望该脚本在整个系统中可用,请将其复制到可执行的$PATH中。
$ sudo cp /apache_gen_ssl /usr/local/bin/
18. 现在运行脚本生成您的证书和密钥。提供您的SSL选项,并不要忘记将证书名称和通用名称与您的官方域名(FQDN)匹配。
$ sudo ./apache_gen_ssl


证书和密钥生成完成后,请不要忘记修改SSL虚拟主机证书和密钥配置,以匹配此证书的名称。
19. 最后一步是激活新的SSL虚拟主机并重新启动服务器以应用配置。
$ sudo a2ensite localhost-ssl $ sudo systemctl restart httpd

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

第7步:在Apache上启用PHP
20. 默认情况下,Apache在Arch Linux中仅提供HTML静态文件内容,不支持动态脚本语言。要激活PHP,请首先打开Apache主配置文件,然后搜索并取消注释以下LoadModule语句(在Arch Linux中,php-apache与mod_mpm_event不兼容)。
$ sudo nano /etc/httpd/conf/httpd.conf
使用[Ctrl]+[w]搜索并注释以下行,使其如下所示。
#LoadModule mpm_event_module modules/mod_mpm_event.so

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

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

就是这样!如果一切看起来像上面的图片,那么您现在已经在 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.so、mcrypt.so – 用于内部认证),您还可以为未来的 CMS 平台启用其他需要的模块,如 openssl.so、imap.so 或 iconv.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

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

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>

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

27. 如果登录到PhpMyAdmin后,看到一个有关blowfish_secret的底部错误,请打开并编辑/etc/webapps/phpmyadmin/config.inc.php文件,并插入一个类似以下语句中的随机字符串,然后刷新页面。
$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

第9步:在整个系统中启用LAMP
28. 如果您希望LAMP栈在系统重新启动后自动启动,请运行以下命令。
$ sudo systemctl enable httpd mysqld

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