Wordpress 容器化、HTTPS化全攻略
大家可能都在用Wordpress寫博客,之前都都是買個VPS部署一個一鍵L/WAMP程序完成整個部署,部署可能也容易但是操作比較費勁。前兩天蟲蟲的博客VPS出問題導致數據丟失,需要重新部署,在這次部署中為了追求***使用了docker容器方式并對網站升級使用全站HTTPS的方式進行部署,站點支持TLS 1.3協議以***程度提高性能,本文蟲蟲就給大家介紹整個部署的全過程供大家參考優化。
概述
站點采用Docker方式部署,使用兩個容器一個是mysql 5.7數據庫容器,一個是apache(2.4.25)、php(7.3.6),Wordpress(5.2.2)容器,容器部件都是***版本。為了安全連個容器都映射到宿主機127.0.0.1端口不直接對外提供服務。宿主機上部署nginx***版本1.17反向代理到容器,nginx對外提供https服務:使用TLS 1.3協議,證書是從Let's Encrypt申請免費SSL,可以一鍵申請證書并且免費3個月更新。整個架構結構如下:
VPS和容器環境準備
基礎VPS環境是centos 7.2,默認是vi我們先將它換成vim
- yum install vim
掛載VPS數據盤
初始化VPS數據盤,注意該盤為外掛的盤VPS變化重新初始化時候數據不會丟失,一般為sdb,比如蟲蟲的盤,60G

創建分區并格式化
- fdisk /dev/sdb
- mkfs.ext4 /dev/sdb1
掛載,掛載目錄我們設為/data
- mkdir /data
- mount /dev/sdb1 /data
修改/etc/fstab實現重啟自動掛載:
通過dumpe2fs或者blkid查看磁盤UUID
- d179868b-6fb9-414c-8901-b990f7c586bd

- echo 'UUID="d179868b-6fb9-414c-8901-b990f7c586bd" /data ext4 defaults 0 0' >>/etc/fstab
mount –a測試fstab配置,如果沒提示表示正確,如果有錯誤會顯示,比如我們給UUID前面加個1,測試信息如下:

更換防火墻關閉selinux
系統其默認的防火墻firewalld,先將其修改為比較熟悉稱手的iptables:
- yum install iptables iptables-services
- systemctl disable firewalld
- systemctl stop firewalld
- systemctl enable iptables
- systemctl start iptables
selinux配置太復雜,我們先暫時關閉(在正式生產環境不建議該操作):
- setenforce 0
為了一直關閉,需要修改其配置文件,這樣重啟后就不會再加載。方法
- perl -i -lpe 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
更改ssh安全配置
為了VPS已經修改掉系統默認的ssh 22端口,并且禁止root登陸,方法修改/etc/ssh/sshd_config,查找Port去掉其前面的注釋#號,并把22修改為其他端口,比如12322:
- Port 12322
增加一行" PermitRootLogin no"禁止root登陸:

事先添加證書登陸,然后禁止密碼登錄方式"PasswordAuthentication no":

防火墻開啟新sshd端口,并刪掉22端口
- iptables -I INPUT -p tcp -m state --state NEW -m tcp -dport 12322 -j ACCEPT
重啟sshd服務
- systemctl restart sshd.service
用新端口證書方式訪問服務器,如果沒有問題:
刪掉22端口
- iptables -D INPUT -p tcp -m state --state NEW -m tcp -dport 22 -j ACCEPT
保存防火墻規則
- systemctl save sshd.service
添加epel和源管理工具
- yum install epel-releaseyum install -y yum-utils
docker和容器部署
添加docker源

安裝docker服務
- yum install docker-ce docker-compose
- systemctl enable docker
- systemctl start docker
啟用docker過程中報了一個錯誤"SELinux is not supported with the overlay2 graph drive...false",原因是linux的內核中的SELinux不支持 overlay2 graph drive,解決方法,修改docker配置文件/etc/sysconfig/docker修改--selinux-enabled為--selinux-enabled=false

還有一個典型錯誤如下:

fatal msg="Error starting daemon: error initializing graphdriver: "/var/lib/docker" contains several valid graphdrivers: devicemapper, overlay; Please cleanup or explicitly choose storage driver (-s )"是由于docker初始化數據有問題導致,只需清理/var/lib/docker/目錄下文件
"rm -rf /var/lib/docker/",然后重啟就OK了
拉取docker應用鏡像
- docker pull wordpress
- docker pull mysql:5.7.25
遷移docker數據目錄
- systemctl stop docker.service
- mv /var/lib/docker /data/docker
vim /usr/lib/systemd/system/docker.service 查找ExecStart給其參數增加:
"--graph /data/docker":

重新加載配置文件
- systemctl daemon-reload
重啟docker服務
- systemctl restart docker.service
創建應用數據目錄
首先是數據庫mysql目錄:
- mkdir -p /data/web/data
- chown -R 999:999 /data/web/data
網站目錄:
- mkdir /data/web/webapps
- chown -R 33:33 /data/web/webapps
啟動應用容器
mysql容器:
- docker run --name mysql -h mysql
- --restart=always
- -e MYSQL_ROOT_PASSWORD=wp12345
- -p 127.0.0.1:13306:3306
- -v /data/web/data:/var/lib/mysql
- -d mysql:5.7.25
注意上面加重的參數表示mysql的root初始化密碼,需要根據實際修改。
wordpress應用容器
- docker run -h wordpress --name wordpress
- --restart=always
- --link mysql:mysql
- -p 2880:80
- -v /data/web/webapps:/var/www/html
- -d wordpress
注意上面黑體表示連接到mysql容器,注意兩個服務啟動順序,現有mysql,wordpress放棄才能連接到這個數據庫,在宿主機上映射的端口為2880。
數據遷移
以上兩個個容器啟動后,wordpress部署就完全完成,現在通過瀏覽器訪問
http://ip:2880就可以訪問到wordpress安裝界面了。
就可以通過web安裝wordpress和配置了。

有可能報錯數據庫連接錯誤:

提示信息表示數據庫服務沒有創建wordpress數據庫,這時候需要連接到mysql容器:
- docker exec -it mysql /bin/bash
在容器中執行mysql -uroot -p 輸入上面我們設置mysql密碼,wp12345
在mysql命令行創建一個數據庫wordpress
create database wordpress;
然后再訪問就可以了

注意該處保存好系統給你設置的密碼,或者修改為自己的密碼。
進過以上步驟,一個全新版本的wordpress服務就可以:

安裝好后需要遷移歷史數據,最主要是兩部分數據:數據庫數據和上傳的文件數據。
上傳文件數據遷移:
這部分遷移很簡單把以前保存的目錄中的wp-content下的uploads目錄復制過來所有上傳數據就ok了。
數據庫遷移:
數據庫遷移,如果wordpress版本相同,可以直接把以前保存的數據文件導入到新數據庫就可以。如果版本不同需要注意版本差異,否則會導致錯誤,可以只導入wp-post和wp-comments這兩個表的數據。
通過wordpress導入導出功能:
如果你以前通過wordpress的導出插件導出過歷史數據,就可以利用它導入所有數據信心,結合uploads目錄導入文件就可以***恢復歷史數據。具體方法:
點擊"工具"-"導入":

在該頁面點擊WordPress下的現在安裝,先安裝該插件。安裝后點擊"插件":

點擊"啟用"。
然后再返回"工具"-"導入":

點擊"運行導入器"。

彈出頁面選擇以前保存的xml文件,然后點擊"上傳并導入"按鈕,

選擇好需要遷移的用戶,點解"Submit"按鈕。
根據保存文件大小,該步驟需要比較長的時間。***會顯示如下頁面,表示導入過程已經完成:

文章頁面:

遷移問題
遷移目前遇到問題有些插件不好使用,最主要是代碼高亮插件"Crayon Syntax Highlighter"在***版本中不能用了,啟用該插件后,前臺不能顯示文章列表和內容,目前還未知道解決方案,暫時安裝了另一個代碼高亮插件"Enlighter"來代替。
總結:
本文我們使用部署中docker容器方式重新部署和遷移了Wordpress站點,涉及了VPS基礎設置、docker容器環境和安裝、應用容器的安裝和Wordpress歷史數據的遷移。限于篇幅我們總體文章分兩篇來介紹,本文第二篇將介紹nginx編譯安裝支持TLS 1.3,站點https設置和wordpress https化存在的問額和解決。