配置基于LNMP的WordPress站点

之前本博客是基于Hexo,托管于Github Pages。这种静态博客有几个缺点:

  • 【更新:现在也慢,因为租不起快的服务器】
  • 动态的服务由外界提供,如不蒜子、来必力等,很容易挂,比如我的博客常常刷不出不蒜子的数据,比如国内的评论服务应该全挂完了吧 【更新:弄完才知道WP也有很多内容需要外部服务,好像对后台来说字体也是谷歌字体提供服务,然后评论啥的的头像是由gravatar提供服务,不清楚前端是自己的服务器还是同样由这些服务提供商提供服务,但还是好很多啦】
  • 主要的工程在本地某台电脑上,发布不方便,重装后还要重新配置;

于是决定换成基于WordPress的动态博客,自己租服务器运行,也就是现在您看到的这个。

配置LNMP环境

WordPress博客系统可以运行于许多环境之上,其中一种是Linux+Nginx+MySQL+PHP。许多服务商提供现成的工作环境,也有一些集成的安装方案。不过虽然搞博客只是随便玩玩,但最好也能顺便学点运维知识嘛,所以还是自己配置这些东西比较好。

Linux

购买腾讯云服务器“标准型S4/1核/2GB/1Mbps”,CentOS 7.5 64 位,秒杀页面https://url.cn/pZMkdlgq,比学生价(9块)还便宜(不到9块)。

控制台->云服务器->实例选项卡,选择地域找到刚买的那台,点击名字可以进去有些设置。点登录就能在浏览器登录了,密码在站内信里。

云服务器真的很方便,还有非常省事的快照服务,之前自己捣鼓Linux整天崩重装还麻烦,现在跟玩游戏存档似的随时保存下快照出问题恢复下就行了。

NGINX

NGINX(即Engine X,所以英文会把LNMP叫做LEMP)是一款面向性能设计(比阿帕奇并发能力强能达到五万用户同时访问、占用内存小,因此LNMP相比LAMP更适合我这种只租得起2G内存服务器的贫民。LAMP好像动态内容很多的话更适合)的HTTP服务器,也能实现反向代理(正向代理就是代理客户端的,帮若干客户端请求服务器;反向代理是代理服务端的,帮若干服务器代理客户端请求。场景是:一个服务可能由若干服务器提供,用户不需要知道自己要向哪个服务器请求,只需要向反向代理请求)和负载均衡(分配请求时不同的服务器有不同的权重,也可以使每个IP访问固定的服务器避免不同服务器session不通)以及动静分离(静态资源直接发给用户,例如集成PHP时,Nginx响应请求后,自行处理静态请求,PHP请求则经过fastcgi_pass交由PHP-FPM处理,处理完毕后返回)。

安装yum install nginx -y、允许自启systemctl reload nginx、启动systemctl start nginx。浏览器中打开http://服务器公网IP(需打开80和443端口)应当可见NGINX默认欢迎页面(/usr/share/nginx/html/index.html,修改这个页面可以显示自己的内容)说明安装成功。

MariaDB

Oracle收购MySQL后,业界的MySQL主流分支版本有Oracle官方版本的MySQL、Percona Server、MariaDB。CentOS 7使用了MariaDB。使用上好像和MySQL差不多。

安装yum install mariadb-server -y、允许自启systemctl enable mariadb.service、启动systemctl start mariadb.service

新安装的MariaDB的密码为空,使用mysql命令直接可登录。

PHP

Yum不自带PHP。Remi是包含最新版本PHP和MySQL包的Linux源,由Remi提供维护。先安装这个源yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y,再启用Remi存储库(可能需要安装yum-utils用于管理yum存储库和包yum install yum-utils -y)作为安装不同PHP版本的默认存储库如安装PHP 7.3yum-config-manager --enable remi-php73。设置好后安装PHP 7以及所有必需的模块yum install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo -y、允许自启systemctl enable php-fpm.service、启动systemctl start php-fpm

安装与配置WordPress

配置数据库

进数据库,为WP建个库CREATE DATABASE wordpressdb;、为WP创建用户CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY '密码';(远程是%,一开始以为%是所有都能来着结果死活连不上……),授权GRANT ALL PRIVILEGES ON wordpressdb.* TO 'wordpressuser'@'localhost';,弄完可以mysql -uwordpressuser -p密码登陆下试试。

配置NGINX

NGINX的配置文件位于/etc/nginx/nginx.conf

# 运行用户
user nginx;
# Nginx进程,一般设置为和CPU核数一样
worker_processes 1;   
# 错误日志存放目录
error_log /var/log/nginx/error.log warn;
# pid存放位置
pid /var/run/nginx.pid;

events {
    # 单个后台进程的最大并发数
    worker_connections 1024; 
}

http {
    # 文件扩展名与类型映射表
    include /etc/nginx/mime.types;
    # 默认文件类型
    default_type  application/octet-stream;  
    # 设置日志模式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
    # nginx访问日志存放位置
    access_log  /var/log/nginx/access.log  main;  
    # 开启高效传输模式
    sendfile on;   
    # 减少网络报文段的数量
    #tcp_nopush on;    
    # 超时时间
    keepalive_timeout 65;  
    # 开启gzip压缩
    # gzip  on;  
    # 包含的子配置项位置和文件
    include /etc/nginx/conf.d/*.conf; 

    ...
}

从上面最后一行可以看出可以在那个子配置目录自己写配置文件来更改配置。在/etc/nginx/conf.d/新建default.conf

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;

    # 站点目录
    root /usr/share/nginx/html;
    
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        index index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        access_log off; log_not_found off; expires max;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

因为都监听了同样的端口,好像是会冲突?把原先的配置文件里的server块注释掉。Nginx-t看一下有没有错,systemctl reload nginx.service重启服务。这里应该不会出问题,如果说已经有运行的话lsof -i :80,看一下进程号kill -9 进程号杀掉。在站点目录下新建一个info.php

<?php
    echo phpinfo();
?>

访问http://服务器公网IP/info.php,如果浏览器中出现php info说明php-fpm运行正常。完事记得删掉。

收尾

只欠东风。现在yum install wordpress -y安装WP,修改配置文件/etc/wordpress/wp-config.php里面涉及数据库的三项:

define('DB_NAME', 'wordpressdb');
define('DB_USER', 'wordpressuser');
define('DB_PASSWORD', '密码');

通过yum命令下载的WordPress保存在/usr/share/wordpress目录下。去刚才nginx配置文件把网站目录改成wordpress目录(或者我看到的博客的做法都是把wordpress移过去并为配置文件建立链接)。

现在进http://服务器公网IP/wp-admin/install.php(直接进域名好像自己也会跳转过来)就可以看到WP的页面了。剩下的都是有图形界面的傻瓜式操作了,非常直观友好。

日常维护

装好以后我换了个喜欢的主题(默认太丑,自带的第二个就不错,现在这个就是自带的第二个好像叫“27”),然后调整下侧边栏组件,换下封面图片(竟然自带随机切换功能,我都做好翻源代码改代码的准备了),改一下网站图标就行了。不太想折腾其它的了,平平淡淡才是真~

安装插件

插件默认位于安装目录下/wp-content/plugins/,进去可以看到自带的两个插件,在控制台显示诗文的和屏蔽垃圾评论的,想装插件的话wget下载到这里uzip解压一下到控制台插件页面刷新下启用后就能用。主题同理放到主题文件夹。不过折腾Hexo的时候倒腾主题整得够够的了,自带的第二个主题就挺好,深得我心。

记录下目前安装的插件:

  • https://wordpress.org/plugins/easy-table-of-contents/,该插件可以自动生成目录(我猜是根据html标签,能支持md转成的html),有丰富的设置选项,我设置它在posts中生成,显示于post第一个标题之上,并在widgets中设置在最后浮动显示(缺点是在主页也会显示最后一篇文章的目录);
  • https://cn.wordpress.org/plugins/q2w3-fixed-widget/,在widgets中生成的目录是跟随widgets的,滚过去也就滚过去了,这个插件可以为widgets中每一项增添一个单独的设置项,可允许该widget随视图滚动;

Leave a Reply

Your email address will not be published. Required fields are marked *