在这之前,我个人搭建网站一般是用现成的虚拟主机或者像 openshift 那样的 PaaS,后来随着需求改变开始使用拥有独立系统的 VPS。前者操作简单、上手迅速、价格划算,后者独立性强、方便定制。在服务器操作系统方面,也先后尝试过 CentOS、Ubuntu Server 和 FreeBSD。为了便于入手,目前选择了 Debain 作为服务器操作系统。

刚买来的虚拟机一般什么都没安装,或者像 macOS 那样默认的 Web 服务器也只有 Apache,为了方便部署我们的 WordPress 另外还需要安装的一套软件是 Apache、MySQL 以及 PHP 组件(合起来称为 LAMP)。

在测试这篇文章中的操作步骤时使用的服务器操作系统是 Debain Testing,其他同类系统的操作类似,但仅供参考。

Step 0

开始之前,应该确保你能够正常登录服务器,而且该账户拥有 sudo 权限。因为之后的操作会使用 root 账户的权限,所以你也可以直接用 root 账户管理服务器。

Step 1

为了确保能检索出仓库里最新的软件,首先请更新 APT,之后安装 Apache。

1
2
apt update
apt install apache2

安装成功以后,80 端口呈现了初始的欢迎页面并且告诉了我们 Apache 配置文件的存放地点 /etc/apache2 以及目录结构。我们知道了目录结构,就开始修改第一个独立站点的配置文件 000-default.conf,在这里修改变量 ServerName、AllowOverride、ServerAdmin 以及增减各种各样的参数。

1
vi /etc/apache2/sites-available/000-default.conf
  • 这里 ServerName 的值指向了你的域名或 IP 地址,如果在这里使用 _ 就会代表所有未知的域名以及 IP,也就是 ICP 备案时所说的空头主机。
  • 添加  AllowOverride All 以允许读取该目录下的 .htaccess 并应用重写功能(覆盖配置),跟随 Directory 的目录地址定义了要应用该重写功能的目录。
  • 在 ServerAdmin 补充管理员的电子邮箱地址。
1
2
3
4
5
6
7
8
<VirtualHost *:80>
    ServerName www.example.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    <Directory /var/www/html/>
        AllowOverride All
    </Directory>
    . . .

小提示:为了避免 Apache 加载有错误的配置文件,应该检查配置文件有无逻辑和语法错误。这里可以使用命令 apache2ctl configtest 做自动检测,如果得到的结果包含 Syntax OK 则语法正确。

1
2
apache2ctl configtest
Syntax OK

启动 rewrite 和 proxy_fcgi 模块,以及重启 Apache 让所有配置文件被重新加载进来使前的配置全部生效。

1
2
a2enmod rewrite proxy_fcgi
service apache2 restart

给网站根目录的并授予 www-data 用户权限。由于 Apache 程序工作时的用户是 www-data,因此以 Apache 身份执行的一些程序(比如 WordPress)才有资格访问该目录,比如 .htaccess 文件。

1
2
chown -R www-data /var/www/html
touch /var/www/html/.htaccess

Step 2

安装 MySQL,这里我们用开源的 MariaDB 来作为代替品。

1
apt install mariadb-server

当安装完成后,我们可以再运行一个安全化脚本,用它将删除一些存安全隐患的默认值,增强数据库应用于生产环节的安全性。通过执行以下命令来启动交互式脚本:

1
mysql_secure_installation

Step 3

安装 PHP 以及后面将会常用的扩展模块。

1
apt install php-fpm php-mysql php-gd php-curl php-mbstring php-xml php-xmlrpc php-zip

这样安装 PHP 应该没有任何问题。我们稍后将测试一下。 在大多数情况下,我们希望修改 Apache 在处理目录请求时提供文件的方式,在这里也就是读取和执行文件的先后顺序。目前,如果用户从服务器请求访问一个目录,Apache 会先寻得文件 index.html。而我们要做的是告诉我们的 Web 服务器优先执行 index.php 脚本文件。要做到这一点,只需编辑 dir.conf 中 DirectoryIndex 排列的先后顺序。

1
vi /etc/apache2/mods-enabled/dir.conf

打开文件 dir.conf,起初是这样的。标红的 index.php 被排在了第四位,如此 Apache 就根据配置要求在网站的目录下面依次寻找能够提供网页输出的文件。假如按顺序没能找到 index.html、index.cgi、index.pl 那么 Apache 才会寻找 index.php,如果找到了就会用 PHP 扩展模块来执行它输出网页。

1
2
3
<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

后面是修改后的配置,标红的 `index.php 根据我们的需求被移动到了最前面。Apache 配置生效后,下一次读取文件的读取顺序也就发生了变化。

1
2
3
<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

现在可以重启你的 Apache 看看效果了。

1
systemctl restart apache2

Step 4

要测试服务器上的 PHP 能否正常工作,可以简单地调用 phpinfo() 来呈现出当前的 PHP 工作环境配置。但是要注意,在生产环境中暴露服务器的配置信息是不安全的行为。

1
2
3
4
5
6
7
# 创建一个探针
cat > /var/www/html/info.php <<-'EOF'
<?php phpinfo(); ?>
EOF

# 删除刚刚创建的探针
rm /var/www/html/info.php