遷移Wordpress到Docker,你會嗎?
很多年前我的個人博客是部署在 Linode 的服務器,后來又給女兒弄了一個博客記錄女兒的成長,使用的是 Wordpress ,老婆執筆。現在我的博客早已遷移到了 github ,女兒也長大了,博客好幾年沒有更新,準備停掉 linode 服務器,將女兒博客遷移到本地。
遷移有三個步驟:
- 備份原博客數據;
- 本地部署 wordpress;
- 還原。
備份
將服務器 wwwroot 目錄中的文件拷貝到本地。
將 mysql 數據庫進行備份。
本地部署 wordpress
本地部署 wordpress 采用 docker-compose 的方式,wordpress 使用的是最新版本,mysql 和之前 linode 服務器使用的同一版本,docker-compose.yml 文件內容如下:
version: '3'
networks:
wp_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.88.1.0/24
services:
db:
image: mysql:5.7
volumes:
- ./data:/var/lib/mysql
restart: always
ports:
- "13306:3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=Aa123456
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wpadmin
- MYSQL_PASSWORD=Aa123456
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password
networks:
wp_net:
ipv4_address: 172.88.1.2
wp:
image: wordpress:latest
ports:
- "12000:80"
restart: always
volumes:
- ./wordpress/:/var/www/html
environment:
- TZ=Asia/Shanghai
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=wpadmin
- WORDPRESS_DB_PASSWORD=Aa123456
- WORDPRESS_DB_NAME=wordpress
networks:
wp_net:
ipv4_address: 172.88.1.3
volumes:
db_data: {}
wordpress_data: {}
在 docker-compose.yml 所在目錄執行 docker-compose up -d 進行容器構建,構建完成后,就可以在瀏覽器輸入 http://localhost:12000 進行訪問:
按照向導進行博客的初始化:
還原
因之前部署的 wordperss 版本和現在最新的版本差異很大,所以沒有使用完全覆蓋的方式。
在構建的數據庫中創建一個名為 wordpress_bak 的庫,將備份的數據庫還原到這個庫中。
docker cp backup.sql 78fdd98f5834:/
docker exec -it 78fdd98f5834 bash
>mysql -uroot -pAa123456 wordpress < backup.sql
構建成功后,默認的 wordpress 庫中的表有些示例數據,使用下面語句將示例數據刪除:
DELETE FROM wp_posts
DELETE from wp_terms
備份 wordpress_bak 庫中的 wp_posts 表,發現備份時提示錯誤:
原因是還原的數據庫日期類型的字段有不符合要求的默認值,將 wp_posts 表中的日期字段的默認值去掉即可。
使用下面語句將 wp_posts 表中 post_content 字段中內容的域名進行替換,這一步驟是將文章中的圖片地址替換為本地地址:
update wp_posts set post_content = REPLACE(post_content,'http://xxxx.me','http://localhost:12000')
將 wordpress_bak 庫中的 wp_posts、wp_terms 兩個表的數據同步到 wordpress 庫。同步完后,可以在瀏覽器訪問:http://localhost:12000 ,可以看到所有的文章列表,但點擊去后圖片不能顯示。
將備份的 wwwroot 中的 /wp_content/uploads 目錄復制到新安裝的 wordpress/wp_content 目錄中,這時圖片就能正常訪問了。