Ubuntu 快速配置指南

简单粗暴且无脑地迅速搭建好一个标准 WEB 服务器。

这篇文章将指导你快速配置一个纯净独立的 Ubuntu Web 服务器环境。对于大多数 Linux 使用者而言,所谓的服务器面板可能相对方便管理,但这类面板其实不太满足最低可持续运维要求——主要指性能和安全。对于前者,面板作为服务端要常驻,大多数时间均会引起毫无必要的开销;而对于后者,面板作为带网页交互层的系统级服务,漏洞在所难免,这对数据库来说相当致命。现代服务器管理面板仍然不够灵活、不够小巧,占据无用的内存,提供若干无用的功能。但如果不使用这些面板而是去亲力亲为,则繁琐的配置和网上繁杂不一的教程足以让初学者们望而却步。

现在有了这篇指南,你将会完全脱离于这一苦海,再也不受傻逼面板的束缚,自由快速地管理自己的服务器——只需要严格按顺序执行下面的操作即可。这篇教程基于 Ubuntu 22.04 LTS,当然 20 或 18 版本也都可以。之所以选择 Ubuntu,是因为它具有优秀的包管理机制,在使用上比 CentOS 要人性化不少。现在越来越多的站长已经意识到这一点,并开始积极使用 Ubuntu。

我们假设现在是从一台全新的 Ubuntu 服务器开始。由于是快速指南,这个教程已经被尽可能地精简;此文章假定你已经知道 SSH 和 (S)FTP 为何物,且完全具备独立使用上述技术相关的工具连接到自己服务器的能力。

准备工作

按照国际惯例,先分别执行一次 sudo apt updatesudo apt upgrade 并等待其操作完成。

下面我们要为 SSH 启用 root 账户。对于不同的服务器平台而言,情况可能不太一样。拿腾讯云举例,他们的 Ubuntu 系统默认就没有启用 root,需要自己手动进行配置;而阿里云(我猜)应该默认就是 root。绝大多数厂商都会默认启用 root。要判断也很简单,观察 SSH 命令行:

saammaa@VM-2-3-ubuntu: ~#

如果 @ 符号前面不是 root 就证明尚未启用 root 用户,比如我这里是 saammaa;反之则可以直接跳过下面的内容。

执行 sudo passwd root 然后输入想要为 root 账户设置的密码。注意:在 Linux 中,密码输入是不可见的。如果你觉得自己输错了密码,不要按 BACKSPACE 回退键删除,因为回退键在 Linux 中也是一个字符。相反需要按 Ctrl + BACKSPACE 来执行删除操作。

输入一次密码之后,按下回车键,然后再输入一次来确认密码,再按回车即可。

执行 sudo vim /etc/ssh/sshd_config,进入一个编辑器。然后:

  1. 先开启大写锁定,然后按下键盘 A 键,进入编辑模式;
  2. 用滚轮将光标移至内容的最底部,回车开辟新行,然后分大小写输入:PermitRootLogin yes
  3. 确认无误后,先按 ESC 键,然后在键盘上输入 :wq(英文冒号接 w 接 q)然后回车,退出编辑模式。

执行 sudo /etc/init.d/ssh restart,然后终端会提示类似这样的信息:Restarting ssh (via systemctl): ssh.service. 至此,Ubuntu 的 root 用户就被开启了,这意味着你可以用 root 用户名及其密码来登录并以最高权限管理服务器,这一点非常重要。

初步安装

执行 sudo apt install apache2 来安装 Apache。如果安装过程中有提示确认是否继续,键盘输入 Y 即可。
安装完成后,执行 sudo apt install php libapache2-mod-php 来安装 PHP 及其 Apache 支持。

执行 sudo a2enmod rewrite proxy proxy_http,然后执行 sudo service apache2 restart

下面讲解一些必须要掌握的 Apache 基础知识:

  • Apache 的默认 WEB 目录是:/var/www,添加网站时可以直接在该目录下创建对应的文件夹;
  • Apache 的默认用户是 www-data,记住该用户名有利于我们以后操作网站文件夹的权限;
  • Apache 的配置文件存放目录是 /etc/apache2,其中的 sites-enabled 文件夹用于手动存放网站的配置文件。这些配置文件可以随意命名,但应确保其类型(后缀)为 .conf。一旦配置文件存在,下次 Apache 服务启动时就会按照其内容来配置对应的网站。
  • 每次新建、删除或修改配置文件之后,均应执行一次 sudo service apache2 restart 来使配置生效。

我们还需要为 Apache 启用 HTTPS 支持,即启用 SSL 模块。依次执行:sudo apt install opensslsudo a2enmod ssl

如果你的网站是 HTTPS,那么就需要向服务器提供网站的 SSL 证书。对于 Apache 而言,它们应该是一份 crt 和一份 key 文件,你应当已经从签发机构获得了这些文件。Apache 并未规定证书应存放在何处,为了追求统一性,我推荐在目录 /etc/apache2 下直接创建名为 sites-certificates 的文件夹并将所有证书存放在该位置。

安装 PHP 扩展

PHP8 相比 PHP7 拥有更加优异的性能,鉴于绝大多数 WEB 程序均已转向 PHP8,故本教程基于 PHP8。使用 php-v 来查看目前系统所安装的 PHP 版本;使用 php-m 来查看已经为 PHP 安装了哪些扩展。下面我们来使用一行指令一次性安装所有常见的基础扩展:

sudo apt install php-curl php-mbstring php-apcu php-bz2 php-gd php-imagick php-imap php-intl php-json php-ldap php-mysqli php-readline php-zip php-soap php-pspell php-gmp php-bcmath php-dom php-xml php-pear

接下来执行 sudo apt install libmagickcore-6.q16-6-extra 来为 php-imagick 模块启用 SVG 支持,最后执行 sudo apt install imagemagick 来安装并启用 ImageMagick 支持。

使用 PHP-FPM

FPM 是 PHP 运行模式的一种,其实际上是一个 FastCGI 进程管理器,通过与 Web 服务器之间建立持久性连接来显著提高性能。

执行 sudo apt install php-fpm 来安装 FPM,完成后可以执行 sudo service php8.1-fpm status 来查看 FPM 的运行状态,注意其中的“8.1”可能和你的情况有所不同,具体取决于当前所安装的 PHP 版本。如果 FPM 服务已在运行中,则能够找到 active (running) 字样。
P.S. 竟然有人查看完状态不知道怎么退出…好吧,按一下键盘字母 Q 就行了。

执行 sudo apt install libapache2-mod-fcgid 来通知 Apache2 FastCGI 已开启,然后执行 sudo vim /etc/apache2/mods-available/fcgid.conf 来编辑 Apache2 的 FastCGI 相关配置文件。删除该文件中的全部原有内容,然后替换成下面的内容:

<IfModule mod_fcgid.c>
	AddHandler fcgid-script .php .py .pl .fcgi
	SocketPath /var/lib/apache2/fcgid/sock
	IPCConnectTimeout 20
	MaxRequestLen 62914560
</IfModule>

编辑模式的进入和退出方法和上面准备工作所述相同。

执行 sudo apt install php-cgi,等待完成后执行 sudo vim /etc/apache2/apache2.conf,在文件的最后面开辟新行添加:

<Directory />
	FCGIWrapper /usr/bin/php-cgi8.1 .php
	Options ExecCGI SymLinksIfOwnerMatch
</Directory>

保存并退出即可。现在我们已经可以直接启用 Apache Worker MPM。在终端依次执行如下指令:

sudo a2dismod mpm_event
sudo a2dismod php8.1
sudo a2dismod mpm_prefork
sudo a2enmod mpm_worker

注意上面两段代码中的“8.1”要根据你的实际情况而定。最后,我们执行一次 sudo service apache2 restart 便可完成本小节。

修改 PHP 参数

编辑 /etc/php/7.4/fpm/php.ini 文件,找到并修改如下所有参数:

参数名称修改前修改后
upload_max_filesize2M64M
post_max_size8M64M
memory_limit128M512M 或更高
output_buffering添加注释
max_execution_time30300
max_input_time
opcache.enable取消注释
opcache.memory_consumption
opcache.interned_strings_buffer
opcache.revalidate_freq
opcache.fast_shutdown
opcache.enable_cli

修改完成后保存文件,然后执行一次 sudo service php8.1-fpm restart 即可。

配置 mariaDB

mariaDB 是基于 MySQL 的关系型数据库,显然,它比后者性能更高。

执行 sudo apt install mariadb-server,然后执行 sudo mysql_secure_installation,然后输入你想要为数据库 root 用户设置的密码,其注意事项和准备工作中输入密码的注意事项相同。输入密码并回车之后,终端会提出若干问题:

Switch to unix_socket authentication [Y/n]n
Change the root password? [Y/n]n
Remove anonymous users? [Y/n]Y
Disallow root login remotely? [Y/n]Y
Remove test database and access to it? [Y/n]Y
Reload privilege tables now? [Y/n]Y

接下来为 mariaDB 添加一名用户账户。执行 sudo mysql 来进入 MySQL 命令行,然后将下面的命令先修改再粘贴到终端:

GRANT ALL PRIVILEGES ON *.* TO '用户名'@'localhost' IDENTIFIED BY '密码';

把“用户名”和“密码”修改成自己想要的用户名和密码即可,注意别碰两边的单引号,以及不能落下最后面的分号。粘贴后回车即可。

常规部署流程

到现在为止,要创建网站的所有准备工作就完成了。下面我们要做的就只有真正上线自己的网站。流程是:

  1. 在目录 /var/www 下创建一个文件夹,上传并在其中存放网站的内容;
  2. 执行一次 sudo chown -R www-data:www-data /var/www/WEBSITE,后面的“WEBSITE”是所创建文件夹的名字;
  3. 在目录 sites-enabled 中创建一个任意命名的 conf 文件,其内容格式如下:
# 如果网站为 HTTPS,则为 443 端口,否则为 80 端口
<VirtualHost *:443>
# 下方 example.com 是网站的域名
	ServerName example.com
# 下方 WEBSITE 是网站所在文件夹的名字
	DocumentRoot /var/www/WEBSITE
# 下面是 HTTPS 相关配置,HTTP 网站请勿填写
	SSLEngine On
	SSLOptions +StrictRequire
# 网站 crt 证书的绝对路径
	SSLCertificateFile /etc/apache2/sites-certificates/example.com.crt
# 网站 key 证书的绝对路径
	SSLCertificateKeyFile /etc/apache2/sites-certificates/example.com.key
# HTTPS 配置结束
# 下方 WEBSITE 是网站所在文件夹的名字
	<Directory "/var/www/WEBSITE">
		Options +ExecCGI
		AllowOverride All
	</Directory>
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

检查无误后保存,然后执行 sudo service apache2 restart 重启 Apache2 服务。服务会在启动时自动读取目录 sites-enabled 下所有的文件并依次配置对应的网站,若一切正常则终端不会发生任何事情,否则会报 exited with error 红字错误。假定域名已经解析到 IP,现在即可正常访问网站。

添加新评论

点击评论者的头像,即可对其进行回复。