WordPress

WordPress 搭建博客/网站,基于Docker & Nginx

WordPress 是全球最热门的网站构建器。43% 的网页在 WordPress 上构建。WordPress有两个主要版本:wordpress.com和wordpress.org。它们之间存在一些关键区别:

托管方式:
  • wordpress.com: 这是一个托管平台,你可以在wordpress.com上创建和托管你的网站,无需自己购买主机或进行技术设置。这个平台提供了各种预配置的主题和插件供你选择,但功能可能受到一些限制。
  • wordpress.org: 这是开源项目的官方网站,你可以从这里下载WordPress软件。使用wordpress.org需要你自己购买主机空间,并安装和配置WordPress。这使你有更多的控制权和灵活性,可以自由选择主题、插件,甚至对源代码进行修改。
控制和自定义:
  • wordpress.com: 这个平台更加限制了你对网站的控制和自定义。虽然有一些主题和插件可供选择,但你不能随意安装自己喜欢的第三方主题和插件,也无法编辑网站的源代码。
  • wordpress.org: 你可以完全控制你的网站。你可以选择任何第三方主题和插件,还可以编辑网站的源代码,以满足特定需求。
成本:
  • wordpress.com: 提供免费和付费计划。免费计划通常会在你的网站域名中包含”xxx.wordpress.com”子域名,并且有一些功能限制。付费计划则提供更多功能和定制选项。
  • wordpress.org: 下载和使用WordPress本身是免费的,但你需要支付主机和域名的费用,这取决于你选择的主机提供商和域名注册服务。
技术知识和管理:
  • wordpress.com: 适合那些不想过多涉足技术细节的用户。平台会负责维护和更新,你只需要关注内容创作。
  • wordpress.org: 需要一些技术知识来设置、管理和维护你的网站。你需要处理主机设置、备份、安全性等方面的问题。

Note

本文主要关注wordpress.org提供的WordPress基于Docker容器的搭建问题。首先你需要自备Linux伺服器并已安装好nginx、docker、Mysql/MarliaDB并准备好域名与tls证书。

使用Docker Hub提供的 WordPress 镜像: Image / Source

Prepare

# 准备目录,路径自行调整
mkdir -p /opt/wordpress

# 拉取轻量化版本6.3.0-fpm-alpine
docker pull wordpress:6.3.0-fpm-alpine

编写docker配置

创建Dockerfile

vi /opt/wordpress/Dockerfile
# 填写以下内容
FROM wordpress:6.3.0-fpm-alpine

# 安装phpredis支持
RUN apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        libzip-dev \
  && pecl install redis \
  && docker-php-ext-enable redis \
  && apk del .build-deps

# 自行修改php-fpm端口号
ENV WWW_PORT 10080
RUN echo "change php-fpm port to $WWW_PORT" \
  && sed -i "s|^listen =.*$|listen = ${WWW_PORT}|g" /usr/local/etc/php-fpm.d/zz-docker.conf;

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["php-fpm"]

创建docker-compose.yml

vi /opt/wordpress/docker-compose.yml
# 填写以下内容
version: "3.2"
services:
  wordpress:
    build: ./
    image: my-wordpress
    container_name: wordpress
    # 运行失败时总是重启
    restart: always
    # 直通宿主机的网络
    network_mode: host
    # 限制docker日志文件大小
    logging:
      driver: json-file
      options:
        max-size: '1m'
        max-file: '3'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - html:/var/www/html/
    extra_hosts:
      # 你的数据库自定义域名
      - "db-host:172.17.0.1"
      - "redis-host:172.17.0.1"
# 配置卷为nginx代理准备
volumes:
  html:

配置Mysql/MarliaDB数据库

# 创建数据库用户
CREATE USER '数据库用户名'@'%' IDENTIFIED BY '数据库密码';
# 创建wordpress数据库
CREATE database wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 为用户赋予wordpress数据库完整权限
GRANT ALL PRIVILEGES ON wordpress.* TO '数据库用户名'@'%';
# 使配置生效
FLUSH PRIVILEGES;
# 查看用户权限
SHOW GRANTS FOR '数据库用户名'@'%';

配置Nginx

vi 你的nginx配置目录/wordpress.conf
# 填写以下内容
server {
  listen 80;
  listen 443 ssl http2;
  # 你的域名
  server_name xxx.xxx.com;
  # 你的日志路径
  access_log  logs/wordpress.log main;
  # 你的证书路径
  ssl_certificate /wordpress.crt;
  ssl_certificate_key /wordpress.key;

  # 隐藏服务器信息
  fastcgi_hide_header X-Powered-By;

  # docker配置中的卷
  root /var/lib/docker/volumes/wordpress_html/_data/
  index index.php;

  location ~ \.php(?:$|/) {
    include fastcgi_params;
    fastcgi_param HTTP_AUTHORIZATION $http_authorization;
    # docker配置中自行修改php-fpm端口号
    fastcgi_pass 127.0.0.1:10080;
    # 此处路径前缀使用/var/www/html/而不是$document_root
    fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
    fastcgi_intercept_errors on;
  }

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 6M;
    access_log off;
    log_not_found off;
  }

  location / {
      try_files $uri $uri/ /index.php$request_uri;
  }
}

启动Wordpress

# 测试nginx配置并重新加载
nginx -t && nginx -s reload

# 进入wordpress配置目录
cd /opt/wordpress
# 启动容器,后台运行
docker compose up -d
# 查看容器运行状态
docker ps -a
# 查看容器日志
docker logs -f wordpress

wordpress基础配置

  1. 访问你的wordpress域名,此时已经可以访问。
  2. 在引导页面选择语言。
  3. 配置数据库连接,数据库地址填写docker配置中自定的db-host
  4. 创建管理员账户
  5. 登录wordpress,进入管理界面(https://你的wordpress域名/wp-admin)
  6. 使用博客主题:外观 > 主题 > 安装主题 > 搜索主题 > 点击安装 > 点击启用 (撰写文章时本站使用的主题为: Twenty Fifteen)

配置Redis

vi /var/lib/docker/volumes/wordpress_html/_data/wp-config.php
# 找到以下注释
/* Add any custom values between this line and the "stop editing" line. */
# 在该注释下插入以下内容
/* redis */
define( 'WP_REDIS_CLIENT', 'phpredis');
// docker配置中定义的redis-host
define( 'WP_REDIS_HOST', 'redis-host' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_REDIS_PASSWORD', '你的redis密码' );
define( 'WP_REDIS_PREFIX', 'wp-' );

# 接着重启wordpress
docker restart wordpress
  • 插件 > 安装插件 > 搜索redis > 安装Redis Object Cache > 点击启用
  • 设置 > Redis > Enable Object Cache

很好Wordpress基于Docker & Nginx的搭建已经完成了

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.