前言

WordPress是一个基于PHP和MySQL技术栈,并且存在很多插件的系统。本教程机遇LEMP技术栈来搭建,版本:

  1. L版本Amazon Linux 2
  2. E版本为nginx 1.22
  3. M版本5.5.60 MariaDB
  4. P版本PHP7.2

首先你需要

  1. 一个域名,我的域名是zhwebsite.com (域名可以从namesilo.com购买)
  2. 一台VPS或者云主机(国内需要备案,我的是海外版AWS)
  3. 拥有sudo权限
  4. 了解防火墙设置(AWS需要在console上配置),并开启http的80端口和https的443端口

安装Nginx

  1. 执行sudo yum install nginx
  2. 启动nginx进程
    • sudo systemctl start nginx
    • sudo systemctl enable nginx

安装MariaDB

  1. sudo yum install mariadb-server -y
  2. 启动Mariadb进程
    • sudo systemctl start mariadb
    • sudo systemctl enable mariadb
  3. sudo mysql_secure_installation来加固Mariadb,你会被要求设置root密码,移除匿名用户,限制root用户使用localhost登陆和移除公有test数据库。可以全部选择Yes
  4. 执行netstat -lntp查看本地监控,默认3306端口会被MariaDB监控
  5. 为WordPress创建数据库,使用mysql -uroot -p,并使用root密码登陆
    CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;  # 创建数据库
    GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '你的密码'; # 创建用户
    FLUSH PRIVILEGES;                                                            # 刷新数据库权限
    EXIT;

安装PHP

在Amazon linux,直接使用yum install php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl。默认PHP版本是5.4。由于版本比较老旧,会无法安装6.1.1新版本的WordPress,所以需要一些额外的准备工作。

  1. which amazon-linux-extras
    /usr/bin/amazon-linux-extras
  2. sudo amazon-linux=extras | grep php
    php7.2
    php7.3
    ...
  3. sudo amazon-linux-extras enable php7.2
  4. sudo yum install yum-utils
  5. sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm (如果运行失败,可以查看log,并安装缺少的依赖)
  6. sudo yum-config-manager --enable remi-php72
  7. sudo yum install php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl

我们安装php-fpm是作为真正的web server。php-fpm默认以apache用户,监控端口会是一个unix sock。我们需要:

  1. 打开/etc/php-fpm.d/www.conf,并修改如下地方
    ...
    user = nginx
    ...
    group = nginx
    ...
    listen = /run/php-fpm/www.sock
    ...
  2. 用命令sudo chown -R nginx:nginx /var/lib/php确保目录的所有组权限为nginx
  3. 重启并允许php-fpm开机自启动
    • sudo systemctl reload php-fpm
    • sudo systemctl enable php-fpm

申请免费TLS证书

我们可以使用免费的证书,Let's Encrypt提供免费的证书,虽然每90天需要重置,但可以依靠脚本配置crontab定期更新

  1. curl https://get.acme.sh | sh -s email=${your email}
  2. sudo service httpd stop (请务必保证80端口没有额外的服务监听,否则代码运行会报错)
  3. sudo ~/.acme.sh/acme.sh --issue -d ${your domain} --standalone -k ec-256
  4. sudo ~/.acme.sh/acme.sh --installcert -d ${your domain} --fullchainpath ${key}/domain.crt --keypath ${key}/domain.key --ecc
  5. 每90天可以利用:sudo ~/.acme.sh/acme.sh --renew -d ${your domain} --force --ecc刷新

下载WordPress并配置Nginx

  1. 将WordPress下载到/shared/目录下wget https://wordpress.org/latest.tar.gz
  2. tar zxvf latest.tar.gz解压WordPress文件
  3. chown -R nginx:nginx wordpress将wordpress目录的所有者改为wordpress用户
  4. sudo vim /etc/nginx/nginx.conf将nginx。由于在nginx上,对同一域名我还有别的服务,所以就不拆分文件了。
server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    return 301 https://$host$request_uri;
}

server {
    listen  443 ssl;
    ssl on;
    ssl_certificate       ${key}/domain.crt;
    ssl_certificate_key   ${key}/domain.key;
    ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers           HIGH:!aNULL:!MD5;
    server_name           ${your domain};

    # log files
    access_log /shared/log/${domain}.com.access.log;
    error_log /shared/log/${domain}.com.error.log;

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

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

    location / {
        root           /shared/wordpress;
        index  index.html index.htm index.php;
        if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
        }

        if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
        }

        if (!-f $request_filename){
        rewrite (.*) /index.php;
        }
}

    location ~ \.php$ {
        try_files $uri =404;
        root           /shared/wordpress;
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    root           /shared/wordpress;
        expires max;
        log_not_found off;
    }

}
  1. 进入/shared/wordpress目录
  2. mv wp-config-sample.php wp-config.php
  3. vim wp-config.php。数据库的密码是之前设置的,填入相应位置。最后WordPress salt生成所有额外信息
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** Database username */
define( 'DB_USER', 'wordpress' );

/** Database password */
define( 'DB_PASSWORD', '${your database password}' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         '...');
define('SECURE_AUTH_KEY',  '...');
define('LOGGED_IN_KEY',    '...');
define('NONCE_KEY',        '...');
define('AUTH_SALT',        '...');
define('SECURE_AUTH_SALT', '...');
define('LOGGED_IN_SALT',   '...');
define('NONCE_SALT',       '...');
  1. nginx -t查看语法是否正常,如果一切正常,则sudo systemctl reload nginx重载服务。
  2. 如果能看到WordPress页面就一切大功告成。

WordPress登陆页面

一些碰到的坑

  1. 获取TLS证书失败:这个在上文提到了。AWS需要认真查看80端口是否有额外的服务阻碍证书服务开启
  2. WordPress启动之后,各种404错误:这个需要查看文件是否存在读取问题,比如Nginx的.js .css文件的root路径配置。也可以看看Nginx和PHP- FPM的用户是否有权限读取修改wordpress的路径(或者你指定的用户是否拥有权限)
  3. 服务莫名宕机:这套服务加上基础的Linux,内存开销在500MB左右,开始我用了乞丐版的LightSail,单核500MB内存,会存在一些内存问题。建议升级到1GB以上内存版本。
  4. HTTPS的服务,可能会导致一些图片加载出现问题。上线之后,建议安装Really Simple SSL来快速支持HTTPS

Leave a Reply

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