这样的软件环境可能最常用于 WordPress 这样的博客系统吧。标题中所述软件均安装为最新版本。
没什么技术含量,软件安装环境配置算是日经问题了,翻阅文档和网上找都可以解决。但过滤信息太麻烦了,而且 Nginx 的配置一向恼人,所以把过程和命令整理在这方便以后使用。
安装篇
Debian
只要你的软件源配置是当前的最新版本代号,那你就应该是用着最新版的,装系统的事情就不讲了吧。
Nginx
首先先安装需要的依赖:
sudo apt install curl gnupg2 ca-certificates lsb-release
为了最新稳定版,需要添加 Nginx 的仓库来获取比 Debian 仓库里更新的版本:
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt update
然后再安装,这样一来我们就可以装到最新版 Nginx 了:
sudo apt install nginx
PHP-fpm
和 Nginx 一样,最新版是需要添加第三方源的,这里使用 sury 源:
sudo apt -y install apt-transport-https wget
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
然后安装。
但稍等一下,对于 PHP 来说其不同版本的 API 变动可能会导致你想要运行的程序跑不起来,所以这里最好先确认一下软件需要的版本。如果一定要装最新版的话,来这里看看现在 release 的最新版是多少:https://www.php.net/
WordPress 这样的软件对于最新版 PHP 的支持是很积极的,全新安装可以无脑上。
截至写这篇文章时候最新版本是 PHP 8.1.4,也就是 PHP 8.1
,那么我们来安装这个最新版:
sudo apt install php8.1-fpm
各类 PHP 程序大多都需要扩展来增强 PHP 本身的功能来运行,这些扩展也需要安装。比方说 WordPress 和大多数使用 MySQL 做数据库的软件都需要的 php-mysql 扩展,就可以用这样的命令来安装:
sudo apt install php8.1-php-mysql
上面的扩展安装完成后,其余可以参考官方列出的这个列表,按上面的命令格式逐个安装。
扩展阅读:WordPress 插件需求列表
然后需要对 PHP-fpm 进行一些配置,放宽一些性能限制,注意这里的版本号是你刚刚装好的那个版本:
sudo nano /etc/php/8.1/fpm/php.ini
用 nano 作为编辑器的话,F6 是搜索快捷键,找到下面的项目并修改保存:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000
配置妥当,重启服务生效,同样注意版本号:
sudo systemctl restart php8.1-fpm
MariaDB
软件源里的不老,直接用:
sudo apt install mariadb-server mariadb-client
安装完成后,进行一些安全配置,遇到看不懂的无脑默认值,看得懂的自己改就可以:
sudo mysql_secure_installation
配置篇
实话说到这里我不会写了,可能会因为软件环境等差异因素需要操作者有一定的基础来灵活变通才行,但其实也没那么复杂,大同小异。
nginx
PHP-fpm 是在 www-data 用户下来运行的,而 Nginx 默认使用 nginx 运行。这样不行,得改成一样的。
打开下面的文件进行编辑:
sudo nano /etc/nginx/nginx.conf
# 把 user nginx 改成 user www-data
# 顺便留意一下这个配置文件最后几行的位置
# 这里有个 include conf.d/* 或者 sites-enabled/* 一类的,这是子配置文件的目录
然后再去改子配置文件,先在这里打开你的默认配置文件:
# 这里根据上面看到的子配置文件目录的不同...
# 需要修改这个文件
sudo nano /etc/nginx/conf.d/default.conf
# 或者这个文件
sudo nano /etc/nginx/sites-sites-enabled/default.conf
然后为了方便大家配置,这里附一个示例配置文件,大家可以根据注释里的说明选择性地复制和修改。
结构的话,通常是一个 server 块内包含多个 location 块:
# 下面的 server 块用于将来自 80 端口走 HTTP 的请求全部重定向到 443 端口走 HTTPS
# 但是由于 server_name 的限制,这样的规则只生效在 server_name 后面写着的域名身上
server {
listen 80;
listen [::]:80;
server_name *.shellbin.me shellbin.me;
return 301 https://$http_host$request_uri;
}
# 下面的 server 块用于响应来自 443 端口的访问
# 但和上面的那个 server 块做对比,会发现这里没有限定 server_name
# 所以包括来自 IP 的直接访问的所有请求,都会由这个 server 块处理
# 希望加以限定或者打算用多个子域来托管多个网站的情况,可以加上 server_name
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
# 更严格的强制 HTTPS 的手段,非必须
add_header Strict-Transport-Security "max-age=31536000;"
# SSL 证书路径写在这里
ssl_certificate /home/shellbin/.acme.sh/shellbin.me/fullchain.cer;
ssl_certificate_key /home/shellbin/.acme.sh/shellbin.me/shellbin.me.key;
# 访问日志的存储路径
access_log /var/log/nginx/docs.shellbin.me.access.log;
error_log /var/log/nginx/docs.shellbin.me.error.log;
# 对应的网站目录写在这个 location 块里
# 本次的例子中,网站根目录为 /var/www/default
location / {
root /var/www/default;
index index.php index.html index.htm;
allow all;
}
# 对于 PHP 而言必须的 location 块,用来处理带参数的请求
location / {
try_files $uri $uri/ /index.php?$args;
}
# 对于 PHP 而言可选的 location 块,用来屏蔽来自 XML-RPC 的请求
# 可能对于提高安全性有一点好处,但一些应用会依赖这个功能,看需求了
location ~ xmlrpc\.php$ {
add_header Content-Type text/plain;
return 404 'Not found';
}
# 对于 PHP 而言必须的 location 块,用来指定处理 .php 文件的 FastCGI 程序
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name include snippets/fastcgi-php.conf;
}
}
以及,不要忘了修改你的 Web 目录所有者:
sudo chown -R www-data:www-data <index>
都完成后,重启一下 Nginx:
sudo systemctl restart nginx
这样,你的服务器就拥有了所谓 LNMP 环境了。
现在可以把 WordPress 拷贝到你的网站根目录了,顺着安装向导执行安装就好。
最后,感谢 @tonoko 的封面图创作,属于是封面比内容更有价值了。