docker版wordpress的搭建

这些步骤操作起来简单,但是走错了路就是坑,留个笔记,后续可以查询。

docker安装

本人用的centos环境,首先要更新docker,不要用系统自带的,可能版本是旧的,有些命令运行不了。

安装docker参考链接:https://docs.docker.com/engine/install/centos/

1
2
3
4
5
6
7
sudo yum remove docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker # 这个不要忘了
sudo docker run hello-world # 这个只是测试一下而已

也可以安装一下docker-compose:https://docs.docker.com/compose/install

1
2
3
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

unbuntu版本安装docker,更多参考:https://docs.docker.com/engine/install/ubuntu/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
apt update
apt upgrade -y
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo tee /etc/docker/daemon.json <<EOF
{
"builder": {
"gc": {
"defaultKeepStorage": "100GB",
"enabled": true
}
},
"data-root": "/home/redhat/MyDocker",
"experimental": false,
"registry-mirrors": [
"https://dockerproxy.net",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.unsee.tech",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"http://mirror.azure.cn",
"https://dockerpull.org",
"https://dockerhub.icu",
"https://hub.rat.dev"
]
}
EOF
cat /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
systemctl enable docker --now
docker info
docker compose version

安装wordpress

参考链接:https://registry.hub.docker.com/_/wordpress

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
vim docker-compose.yml
####### 例子 #######
services:
db:
image: mysql:8.0.27
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASS:?Set DB_PASS}
MYSQL_DATABASE: ${DB_NAME:-wordpress}
MYSQL_USER: ${DB_USER:-wordpress}
MYSQL_PASSWORD: ${DB_PASS:?Set DB_PASS}

wordpress:
image: wordpress:latest
depends_on:
- db
volumes:
- ./wp_data:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/uploads.ini
ports:
- "${WP_PORT:-2233}:80"
restart: always
environment:
WORDPRESS_DB_HOST: ${DB_HOST:-db}
WORDPRESS_DB_NAME: ${DB_NAME:-wordpress}
WORDPRESS_DB_USER: ${DB_USER:-wordpress}
WORDPRESS_DB_PASSWORD: ${DB_PASS:?Set DB_PASS}

volumes:
db_data:
wp_data:

vim .env
# Database
DB_NAME=wordpress
DB_USER=wordpress
DB_PASS=wordpress
DB_HOST=db

# WordPress
WP_PORT=2233

配置完成并启动wordpress就可以在浏览器访问wordpress了。

关于docker pull下载慢的问题。

1
2
3
4
5
6
7
8
9
10
# 更改系统的docker配置
vim /etc/docker/daemon.json
# 添加
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
service docker restart

配置https

参考文档:https://github.com/nephen/nginx-web-overseas/blob/main/DOCKERHUB_DEPLOY.md

1
2
3
4
5
6
mkdir nginx-proxy && cd nginx-proxy
curl -o docker-compose.yml https://raw.githubusercontent.com/nephen/nginx-web-overseas/main/docker-compose.hub.yml
curl -o .env.example https://raw.githubusercontent.com/nephen/nginx-web-overseas/main/.env.example
cp .env.example .env
nano .env
docker compose up -d

wordpress配置

找到/var/www/html/wp-content/themes目录替换主题,找到宿主机目录/var/lib/docker/volumes/wordpress_wordpress/_data/替换就行。

容器时区不对的解决方法:docker cp /usr/share/zoneinfo/Asia/Shanghai c177fc4749c0:/etc/localtime

Docker 环境下的 MySQL + WordPress,用于将localhost:2233 和 localhost 统一替换为 railogroup.com

这是最优方案,尤其适合你当前的 WordPress 项目(ACF、Elementor、WooCommerce 都大量使用序列化数据)。

1. 进入 WordPress 容器

1
docker ps

找到 WordPress 容器名,例如 wp_app

1
docker exec -it wp_app bash

2. 确认 WP-CLI 是否存在

1
wp --info

若不存在,可临时安装(一次性):

1
2
3
4
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

3. 执行搜索替换(核心命令)

① 先替换 localhost:2233

1
2
3
4
5
6
wp search-replace 'localhost:2233' 'railogroup.com' \
--all-tables \
--precise \
--recurse-objects \
--skip-columns=guid \
--allow-root

② 再替换 localhost

1
2
3
4
5
6
wp search-replace 'localhost' 'railogroup.com' \
--all-tables \
--precise \
--recurse-objects \
--skip-columns=guid \
--allow-root

说明:

  • --recurse-objects:安全处理 ACF / Elementor / WooCommerce 序列化数据
  • --skip-columns=guid:避免 GUID 被破坏(推荐做法)
  • --all-tables:包含 wp_postmeta、wp_options、自定义表等

4. 同步更新站点 URL(必要)

1
2
wp option update siteurl 'https://railogroup.com'
wp option update home 'https://railogroup.com'

5. 清缓存

1
wp cache flush

插件

https://github.com/bestony/wx-subscribe