WordPress 博客部署流程(详细版)

在前一篇文章里,写到了博客的整体想法,那么这一篇就记录一些详细流程,包括用到的几乎每一行代码,希望能帮到以后的我自己,以及各位网友。此次部署在 Debian 12 (一个主流的 Linux 操作系统)上进行。

远程登陆主机

首先要从面前的电脑设备,用 ssh 方式远程登录到初始化好的服务器上,默认是直接给 root 账号和密码的。那么我们就可以从终端输入以下命令登录:

ssh root@YOUR_IP # 用远程主机的IP地址替换掉 YOUR_IP,然后粘贴服务提供商给的 root 账号密码(这里不会显示***,所以粘贴一次就好,不要太怀疑)

更新软件仓库

一般都是最新的了,但还是可以更新一下,说不定有些软件包更新了呢,这也方便下一步的安装

sudo apt update && sudo apt upgrade -y 
sudo apt autoremove 
sudo reboot # 更新完重启一下,又要重新登陆,这一行可以不写

创建一个管理用户

为了避免每次都粘贴不好记的密码,同时保障服务器安全,避免直接使用 root 用户,所以我们创建一个新的管理用户,以后都用新的用户身份登录(参考链接)。

adduser USER # 用你想要的用户名替换USER,比如我的是yu,然后设置密码 
adduser USER sudo # 加入超级用户组
su - USER # 切换用户 
whoami # 验证一下

安装 LEMP stack

首先解释一下, LEMP 是指 Linux, Nginx, MySQL, PHP。其中 Nginx 发音是 Engine-X,而 M 从最初的 MySQL 变成了今天的 MariaDB,所以连在一起就是 LEMP。其中,Linux 是主机提供商预装的操作系统,Nginx 是用来做反向代理和负载均衡的,M 是数据库,Php 是 WordPress 需要使用的程序语言。

安装 MariaDB 并初始化设置

sudo apt install -y mariadb-server # 安装 
sudo mariadb-secure-installation # 安全设置(注意:这里可以安心地选择 disallow access of root user remotely,因为这里的 root 用户是指 mariaDB 的,后面设置数据库时,也要区分数据库用户和 Linux 用户)。

有关数据库的更多内容可以参考 MariaDB 官方文档这里是一个十分钟的小教程。

然后打开数据库,创建数据库用户和数据库表,并给予新用户权限:

sudo mariadb CREATE DATABASE mysite_db; # 注意这里替换数据库名字
GRANT ALL PRIVILEGES ON mysite_db.* TO 'user'@'localhost'IDENTIFIED BY 'password'; # 注意这里替换数据库名字、用户名、密码 
FLUSH PRIVILEGES; EXIT

然后用数据库用户打开数据库:

mariadb -u user -p # 输入上一步设置的密码
SHOW DATABASES; # 显示所有数据库 
USE mysite_db; # 选取默认数据库,为 WordPress 做准备

安装 PHP

sudo apt install -y php-fpm php-mysql

然后更改 /etc/php/8.2/fpm/php.ini 其中的几个设置参数(比如用 sudo vim /etc/php/8.2/fpm/php.ini 或者 nano vim /etc/php/8.2/fpm/php.ini):

max_execution_time = 300 # 最长执行时间5分钟,以免程序卡住?

memory_limit = 256M # 最大内存占用 256M,我的虚拟机整个有 512M,后面不够再调整

post_max_size = 128M # 最大传输限制 128M,方便看大文章?

upload_max_filesize = 16M # WordPress 上传图片大小限制

然后保存文件,重启生效

sudo systemctl restart php8.2-fpm

安装 WordPress

下载 wordpress 并解压,然后移动到目的地目录(有些教程中是 /var/www/html/wordpress,我给改成了 /var/www/mysite.domain,因为后面可能会再加mysite2.domain mysite3.domain,所以这样用名字设置会好一些)。

wget https://wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gz

sudo mkdir-p /var/www/mysite.domain #(创建不存在的文件夹,创建失败发现 -p 会自动创建父文件夹)sudo mv-v ./wordpress/* /var/www/mysite.domain
ls ./wordpress/ # 看看还有啥文件没搬走rmdir./wordpress #(既然搬空了就删掉文件夹)# rm latest.tar.gz #(顺便删掉 wordpress 最新版的安装压缩包)sudo chown-R www-data:www-data /var/www/mysite.domain

这时回到这里的教程第三步,填上相关的数据库信息:

sudo cp /var/www/mysite.domain/wp-config-sample.php /var/www/mysite.domain/wp-config.php

vim /var/www/mysite.domain/wp-config.php # 修改其中的内容

将其中的几个关键内容改一下:

DB_NAME 设置为之前创建的数据库名字: 'mysite_db'

DB_USER 设置为数据库用户的名字: 'user'

DB_PASSWORD 设置为数据库用户 'user'对应的密码: 'password'

DB_HOST 保持默认的 'localhost'

安装并设置 nginx

这一步参考了这里的教程:

安装:

sudo apt install nginx -y

然后写两个配置文件,第一个就一句:

fastcgi_cache_key "$scheme$request_method$host$request_path";

可以放在 /etc/nginx/conf.d/fastcgi_cache_key.conf 文件里,是通用的。

第二个文件放在 /etc/nginx/sites-available/mysite.domain.conf 里,内容如下:

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=WP:100m inactive=60m;

server {
        listen 80;

server_name mysite.domain www.mysite.domain;
        root /var/www/mysite.domain;
        index index.php index.html index.htm;

location = /favicon.ico {
                log_not_found off;
                access_log off;
                expires max;
        }

location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

location / {
                # try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                # Enable FastCGI Caching
                fastcgi_cache WP;
                fastcgi_cache_valid 200 60m;
        }
}

然后执行以下操作:

sudo ln -s /etc/nginx/sites-available/mysite.domain.conf /etc/nginx/sites-enabled/mysite.domain.conf # 将文件软链接到 /sites-enabled 里,启用规则sudo nginx -t # 测试规则是否可用sudo unlink /etc/nginx/sites-enabled/default # 取消默认规则sudo systemctl restart nginx # 重启一下确保生效

设置 DNS 解析

这一步会将域名定向到 IP,建议设置和 nginx 对应的两个,一个是空的(cloudflare 上是 @,google domain 上就什么都不用填)mysite.domain,一个是 www 的,都跳转租用的云服务器对应的公网 IP

安全设置

这时在防火墙设置一下,允许 http 和 https 访问:

sudo ufw allow http
sudo ufw allow https

然后安装 certbot 自动给网站签发 SSL 证书:

sudo apt install -y snapd
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
sudo certbot renew --dry-run

等待解析一会儿,访问 mysite.domain/wp-admin/install.php 初始化一下,整个网站就算是完成啦!

完成之后,可以通过运行 WordPress Dashboard内的 Tools / Site Health 查看有哪些问题,我这边如下:

Fig. WordPress Site Health 3 critical issues

对于没有安装、没有启用的 php 模块,可以安装:

sudo apt install php php-curl php-fpm php-bcmath php-gd php-soap php-zip php-curl php-mbstring php-mysqlnd php-gd php-xml php-intl php-zip php-imagick

重启服务 sudo systemctl restart php8.2-fpm。

(应该会自己启用,如果没有,可以在 /etc/php/8.2/fpm/php.ini 中将行首的; 删除掉以启用,例如; extension=gd 改为 extension=gd )

对于REST API 的问题,我这边是 SSL 相关的问题,于是也删掉了 ; extension=openssl 前面的 ;

安装完了所有php模块,这三个致命问题就都没有了。

性能优化

其实在设置 nginx 的时候已经有一部分代码是针对性能优化的了,开了缓存什么的。这里会继续记录更多的内容,如在 /etc/nginx/nginx.conf 中取消注释 gzip types 前面的#(井号),从而启用压缩,并且添加一行 gzip_min_length 512; 避免对小文件的压缩。

添加新 WordPress 网站

添加新网站只需要做类似的事情:

  • 申请新的域名并解析到IP地址
  • 新建数据库和数据库用户
  • 解压 WordPress 并更改设置文件
  • 添加 /etc/nginx/sites-available/newsite.domain.conf 文件
  • 重新运行 sudo certbot –nginx 添加证书

注意其中替换不同的部分,数据库用户、wordpress设置、nginx 缓存目录、关键区名等。

另外吐槽一句,domains.google 土耳其区 的 .group 域名,居然比 cloudflare 便宜!

Ref:

  1. https://serverfault.com/questions/539125/is-it-possible-to-have-a-fastcgi-cache-path-for-each-website-virtual-host 这里有人遇到过多个文件同时出现这一句的冲突,现在这个办法不能用,我就查了文档,用现在的方法解决了多网站共存的问题。 ↩︎

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注