在前一篇文章里,写到了博客的整体想法,那么这一篇就记录一些详细流程,包括用到的几乎每一行代码,希望能帮到以后的我自己,以及各位网友。此次部署在 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:
- https://serverfault.com/questions/539125/is-it-possible-to-have-a-fastcgi-cache-path-for-each-website-virtual-host 这里有人遇到过多个文件同时出现这一句的冲突,现在这个办法不能用,我就查了文档,用现在的方法解决了多网站共存的问题。 ↩︎
发表回复