wordPress原来还可以这么用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: WordPress简直是太香了

wordpress简介

WordPress是一个免费的开源内容管理系统CMS建立在具有PHP处理功能的MYSQL数据库上。凭借其可扩展的插件体系结构和模板系统,以及其大部分管理都可以通过Web界面完成的事实,当创建从博客到产品页面再到电子商务网站的各种类型的网站时,WordPress是一种流行的选择。

运行WordPress通常涉及安装LAMP(Linux,Apache,MySQL和PHP)或LEMP(Linux,Nginx,MySQL和PHP)堆栈,这可能很耗时。但是,通过使用诸如DockerDocker Compose之类的工具,您可以简化设置首选堆栈和安装WordPress的过程。您可以使用images来标准化诸如库,配置文件和环境变量之类的图像,而不是手动安装单个组件,并在容器中运行这些图像,在共享操作系统上运行的隔离进程。此外,通过使用Compose,您可以协调多个容器(例如,一个应用程序和数据库)以相互通信。

在本教程中,您将构建多容器WordPress安装。您的容器将包括一个MySQL数据库,一个Nginx Web服务器和WordPress本身。您还可以通过“加密”获取要与站点关联的域的TLS / SSL证书来保护安装。最后,您将设置一个cron工作来续订证书,以便您的域保持安全。

先决条件

要遵循本教程,您将需要:

  • 安装Docker以及Docker-compose
  • git

步骤1 —定义Web服务器配置

在运行任何容器之前,我们的第一步将是为Nginx Web服务器定义配置。我们的配置文件将包括一些WordPress特定的位置块,以及将“加密”验证请求定向到Certbot客户端以进行自动证书更新的位置块。

首先,为您的WordPress设置创建一个名为的项目目录,wordpress并导航至该目录:

mkdir wordpress && cd wordpress

接下来,为配置文件创建目录:

mkdir nginx-conf

在此文件中,我们将添加一个服务器块,其中包含用于我们的服务器名称和文档根的指令,以及用于指示Certbot客户端对证书,PHP处理和静态资产请求的指令的位置块。

将以下代码粘贴到文件中。确保kubemaster.top用您自己的域名替换:

touch nginx-conf/nginx.conf

然后编辑配置文件:

server {
        listen 80;
        server_name kubemaster.top www.kubemaster.top;

        index index.php index.html index.htm;

        root /var/www/html;

        location ~ /.well-known/acme-challenge {
                allow all;
                root /var/www/html;
        }

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

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

        location ~ /\.ht {
                deny all;
        }

        location = /favicon.ico {
                log_not_found off; access_log off;
        }
        location = /robots.txt {
                log_not_found off; access_log off; allow all;
        }
        location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                expires max;
                log_not_found off;
        }
}

我们的服务器块包含以下信息:

指令:

  • listen:这告诉Nginx监听port 80,这将允许我们使用Certbot的webroot插件来进行证书请求。请注意,我们尚未包括端口443-成功获得证书后,我们将更新配置以包括SSL。
  • server_name:这定义了您的服务器名称和用于请求服务器的服务器块。确保kubemaster.top在此行用您自己的域名替换。
  • indexindex伪指令定义了在处理对服务器的请求时将用作索引的文件。我们在此处修改了默认的优先级顺序,将其移到了优先级的index.php前面,index.html以便Nginxindex.php在可能的情况下对调用的文件进行优先级排序。
  • root:我们的root指令将根目录命名为对我们服务器的请求。这个目录中,/var/www/html作为挂载点的创建由我们的指示在构建时的WordPress Dockerfile。这些Dockerfile指令还确保将WordPress版本中的文件安装到该卷上。

定位块:

  • location ~ /.well-known/acme-challenge:此位置块将处理对.well-known目录的请求,Certbot将在该目录中放置一个临时文件,以验证我们域的DNS可以解析到我们的服务器。有了此配置后,我们将能够使用Certbot的webroot插件来获取我们域的证书。
  • location /:在此位置块中,我们将使用try_files指令检查与单个URI请求匹配的文件。Not Found但是,我们不会使用默认参数返回404状态,而是将控制权传递给WordPress的index.php文件。
  • location ~ \.php$:此位置块将处理PHP处理并将这些请求代理到我们的wordpress容器。因为我们的WordPress Docker映像将基于该php:fpm映像,所以我们还将在此块中包含特定于FastCGI协议的配置选项。Nginx需要一个独立的PHP处理器来处理PHP请求:在我们的示例中,这些请求将由映像php-fpm随附的处理器处理php:fpm。此外,此位置块包括特定于FastCGI的指令,变量和选项,这些指令会将请求代理到运行在我们wordpress容器中的WordPress应用程序,设置已解析请求URI的首选索引以及解析URI请求。
  • location ~ /\.ht:此块将处理.htaccess文件,因为Nginx无法提供文件。该deny_all指令确保.htaccess文件永远不会提供给用户。
  • location = /favicon.icolocation = /robots.txt:这些块确保对/favicon.ico和的请求/robots.txt都不会被记录。
  • location ~* \.(css|gif|ico|jpeg|jpg|js|png)$:此块关闭了静态资产请求的日志记录,并确保这些资产具有很高的可缓存性,因为它们的服务成本通常很高。

准备Docker-compose配置清单

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: db
    restart: unless-stopped
    env_file: .env
    environment:
      - MYSQL_DATABASE=wordpress
    volumes:
      - dbdata:/var/lib/mysql
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - app-network
  wordpress:
    depends_on:
      - db
    image: wordpress:5.2.1-fpm-alpine
    container_name: wordpress
    restart: unless-stopped
    env_file: .env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=$MYSQL_USER
      - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
      - WORDPRESS_DB_NAME=wordpress
    volumes:
      - wordpress:/var/www/html
    networks:
      - app-network
  webserver:
    depends_on:
      - wordpress
    image: nginx:1.15.12-alpine
    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /webserver/nginx18/config:/etc/nginx
      - wordpress:/var/www/html
      - /webserver/nginx18/data:/usr/share/nginx
      - certbot-etc:/etc/letsencrypt
    networks:
      - app-network
volumes:
  certbot-etc:
  wordpress:
  dbdata:

networks:
  app-network:
    driver: bridge

以上部署了wordpressmysqlnginx三个服务,这三个服务的数据均是通过volume提供,因此我们需要对这些目录进行备份,分别为:

  • wordpress
  • dbdata
[root@10-255-20-45 wordpress]# docker inspect wordpress_wordpress
[
    {
        "CreatedAt": "2021-05-08T16:18:45+08:00",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "wordpress",
            "com.docker.compose.version": "1.26.2",
            "com.docker.compose.volume": "wordpress"
        },
        "Mountpoint": "/var/lib/docker/volumes/wordpress_wordpress/_data",
        "Name": "wordpress_wordpress",
        "Options": null,
        "Scope": "local"
    }
]

[root@10-255-20-45 wordpress]# docker inspect wordpress_dbdata
[
    {
        "CreatedAt": "2021-05-08T16:12:46+08:00",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "wordpress",
            "com.docker.compose.version": "1.26.2",
            "com.docker.compose.volume": "dbdata"
        },
        "Mountpoint": "/var/lib/docker/volumes/wordpress_dbdata/_data",
        "Name": "wordpress_dbdata",
        "Options": null,
        "Scope": "local"
    }
]

然后将wordpress的代码数据提交到git

cd /var/lib/docker/volumes/wordpress_wordpress/_data
git init
git remote add origin https://github.com/marionxue/wp.git
git add .
git submodule add https://github.com/LuRenJiasWorld/wp-settings-api-class.git wp-content/plugins/wp-editormd/vendor/lurenjiasworld/wp-settings-api-class
git commit -am "init wordpress site"
git config --global user.email "marionxue@qq.com"
git config --global user.name "marionxue"
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
关系型数据库 MySQL PHP
如何安装WordPress?
【6月更文挑战第6天】如何安装WordPress?
95 1
|
7月前
|
网络协议 网络安全 数据安全/隐私保护
SiteGround搭建WordPress
本文将带你快速使用SiteGround搭建WordPress网站,与使用VPS搭建WordPress相比,使用SiteGround明显更加轻松,因为它无需写代码就能实现。本教程教程内容涵盖了购买域名、SiteGround服务器购买、域名DNS解析配置,以及SSL证书生成,帮助你迅速建立一个完整可用的WordPress网站。
319 0
SiteGround搭建WordPress
|
7月前
|
数据可视化 搜索推荐 开发者
WordPress
WordPress
245 2
|
存储 关系型数据库 MySQL
如何在网站上安装 WordPress?
如何在网站上安装 WordPress?
142 0
|
存储 安全 关系型数据库
如何让你的 WordPress 网站更安全
如何让你的 WordPress 网站更安全
103 0
|
存储 弹性计算 关系型数据库
安装wordpress
ECS安装wordpress
294 0
|
弹性计算 网络协议 数据库
搭建WordPress心得!
小白搭建简单的WordPress用了3天。。
157 0
搭建WordPress心得!
|
存储 缓存 安全
WordPress安装后必做的18件事
创建WordPress博客后该做些什么?安装WordPress后,要正确设置和启动网站,还需要做很多事情。
1457 1
|
Ubuntu Linux 应用服务中间件
关于wordpress 502的问题
关于wordpress 502的问题
493 0
解答什么是WordPress
WordPress是多功能的,可以用来建立任何风格的网站。这种灵活性和定制的关键在于主题和插件的选择。主题位于WordPress CMS之上,并为用户提供最初的自定义选项集。用户可以使用WordPress插件进行进一步的自定义,将新功能添加到网站上。