docker基于源码搭建wordpress我的博客

背景

最近入手了一台阿里云ECS,就寻思着搭建个我的博客,记录本身的一些技术研究,技术只有记下来才是属于你的,不记下来只是暂时属于你的。不少时候辛辛苦苦通宵熬夜研究技术解决了难题,若是当时没记下来下次要用的时候又得从新来一遍,永远不会成长。因此好记性不如烂笔头,学到新的东西要及时记下来,不只对本身是技术积累的过程,也能惠及广大同行,何乐而不为。php

一开始并不想把事情搞复杂,安装docker,运行wordpress官方docker镜像,一键完成部署。html

docker run --name blog -p 80:80 -d wordpress

wordpress初次启动会有引导界面,经过引导界面输入数据库信息,初始化完数据库后就就完成了安装。mysql

安装是很是方便,但问题也随之而来。nginx

官方docker镜像没有中文版,后台管理界面是英文倒也不影响,但博客首页默认变成了英文,很是影响阅读,能够安装中文包,但须要修改wp-config.php文件,但因为wordpress源码打包在docker镜像里,修改起来较为复杂。所以决定放弃docker镜像,直接基于源码安装。在docker环境下基于源码安装须要如下几个镜像的配合:web

  • php cgi docker镜像的选择
  • 负载均衡服务器的选择
  • 数据库

在wordpress中文网站下载最新wordpress源码,我下载的是最新版本WordPress 5.2.4,官网对WordPress 5.2.4要求PHP 7.3或者更高,MySQL 5.6或更高,在选择docker镜像的时候须要注意下,否则没法运行。sql

wordpress全部的官网打开都是429错误 429 Too Many Requests,起初我觉得是我网络的问题,但不管怎么切换网络都是429,我以为这个问题已经超出技术范围,技术解决不了政治问题,429解决的办法只能是多刷新几回,直到刷出来为止。

PHP

PHP源码须要php cgi支持,在dockerhub上找到了php官方镜像,在tag里搜索fpm,能够查看各个 php-fpm版本,PHP-FPM(PHP FastCGI Process Manager)是为了更好的管理php-fastcgi而实现的一个程序,能够接收web服务器请求处理php脚本。docker

我选择了php:7.3-fpm做为wordpress运行环境。数据库

docker run --name php -v /data/wordpress/src:/var/www/html -d php:7.3-fpm

/data/wordpress/src为wordpress源码目录,运行后访问报错bash

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/wp-includes/wp-db.php:1645 Stack trace: #0 /var/www/html/wp-includes/wp-db.php(639): wpdb->db_connect() #1 /var/www/html/wp-includes/load.php(427): wpdb->__construct('wordpress', 'helen0226', 'wordpress', 'db:3306') #2 /var/www/html/wp-settings.php(120): require_wp_db() #3 /var/www/html/wp-config.php(88): require_once('/var/www/html/w...') #4 /var/www/html/wp-load.php(37): require_once('/var/www/html/w...') #5 /var/www/html/wp-blog-header.php(13): require_once('/var/www/html/w...') #6 /var/www/html/index.php(17): require('/var/www/html/w...') #7 {main} thrown in /var/www/html/wp-includes/wp-db.php on line 1645

看错误日志是缺乏mysql相关模块。根据dockerhub上相关介绍,须要自行构建包含mysql模块的fpm镜像,经过工具docker-php-ext-install加入mysql模块,步骤也很简单,写一个Dockerfile文件便可。服务器

FROM php:7.3-fpm
RUN docker-php-ext-install mysqli pdo pdo_mysql

保存为Dockerfile,执行如下命令构建新镜像。

docker build -t php:7.3-fpmx .

这里取了一个名字php:7.3-fpmx.

从新运行

docker run --name php -v /data/wordpress/src:/var/www/html -d php:7.3-fpmx

nginx

解决了php运行环境的问题,就要搭建负载均衡服务器,毕竟php只是cgi,还须要一个web服务器的支持。这里选择了nginx做为web服务器。

docker run --name nginx -v /data/nginx/conf.d:/etc/nginx/conf.d -v /data/wordpress/src:/usr/share/nginx/html --link php:php -p 2001:80 -d nginx

目录/data/nginx/conf.d下的配置文件default.conf以下

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index index.php index.html;

    }
    
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
  • index index.php 设置根目录默认请求文件名。
  • /var/www/html/是php-fpm容器内的路径而非文件系统中的路径。

启动nginx后就能够经过nginx进行访问。

数据库

wordpress初次启动后须要输入数据库信息,若是没有能够当场搭建一个mysql数据库服务器。

# docker run --name mysql -p 2000:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql

# docker exec -it mysql bash
root@ac169daba7b0:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 798
Server version: 8.0.18 MySQL Community Server - GPL

这里用的是8.0.18版本的mysql,能够经过docker exec命令进入mysql容器内,建立用户和数据库,脚本能够参考以下:

CREATE DATABASE  wordpress default charset utf8 COLLATE utf8_general_ci;

CREATE USER 'wordpress'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%';

ALTER USER 'wordpress'@'%' IDENTIFIED WITH mysql_native_password;
alter user 'wordpress'@'%' identified by 'password'

FLUSH   PRIVILEGES;

wordpress源码提供了一个配置文件的参考代码wp-config-sample.php,能够直接复制并重命名为wp-config.php。修改数据库链接信息

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wordpress' );
define( 'DB_PASSWORD', 'password' );
define( 'DB_HOST', 'db:3306' );

这里db:3306用别名表示数据库,方便记忆和书写,能够经过docker命令 --link设置,link能够实现docker容器内互相通讯。安装完mysql后重启php:

docker rm -f php
docker run --name php -v /data/wordpress/src:/var/www/html --link mysql:db -d php:7.3-fpmx

主题

将主题zip包复制到源码目录wp-content/themes下解压后,在wordpress的后台管理界面就能够看到主题。这里推荐一款比较喜欢的主题,coogee,能够直接点击这里进行下载。

插件

将插件zip包复制到源码目录wp-content/plugins下解压后,在wordpress的后台挂你就能够看到插件列表,对于技术博客,离不开的插件就是代码高亮,这里推荐一款代码高亮的插件Google Syntax Highlighter,点击这里能够直接下载。

写在最后

搭建一个我的博客并非一件容易的事,还须要有一个域名,有了域名后还须要备案,若是你有过备案的经历你就懂了,还须要解决markdown到wordpress的转换,目前用了几个插件都不是很理想,主要是代码没法兼容高亮插件,这一点比较头疼,本身有过冲动想本身写一个markdown到wordpress html的转换程序,这固然是后话了。

相关文章
相关标签/搜索