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的轉換程序,這固然是後話了。

相關文章
相關標籤/搜索