最近入手了一臺阿里雲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
在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 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
解決了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; } }
/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的轉換程序,這固然是後話了。