原装wordpress使用docker-compose迁移教程

为什么要从原装到docker

原装的一些说明

  1. 原装的优点:可直接控制,消耗资源少,性能更优。如果服务器内存低,可以使用原装。
  2. 原装的缺点:依赖管理复杂,PHP,mysql和nginx版本兼容问题,配置也比较繁琐。维护成本高,我到现在都不想升级php版本,怕出现兼容性问题。容易出现冲突等,适合技术能力强,不愿意折腾的人。

docker的说明

  1. docker的优点:易于管理,冲突较少,快速部署,可移值性强,方便备份等。
  2. 缺点:需要学习一下如何使用,性能会有损耗,日志查询要进容器等

为什么要更换?

  1. 方便随时跑路,随时迁移,随时换服务器,主打一个便宜,反正域名不换,机器随便换。
  2. 学习一下如何方便地迁移博客。
  3. 学习如何使用docker-compose,之前一直用的docker,没怎么用过docker-compose,正好借机会学习一下。

详细迁移过程

1.原机器上的操作:

1. 打包网站目录(实际上打包wp-content就可以)

daogu.work是目录,替换成你自己的网站目录即可。

tar -zcvf daogu.work.20241119.tgz daogu.work/

2.导出数据库内容

mysqldump -u wordpress -p wordpress > wordpress_backup_20241119.sql
  • 这一步是把数据库的内容导出,-u wordpress是数据库用户名,后面的wordpress是数据库,意思是导出wordpress这个数据库为一个sql文件。文件名为wordpress_backup_20241119.sql
  • 注意这一步需要输入wordpress数据库用户的密码

3.下载内容到本地或者要操作的机器上

可以使用FTP,wincp工具,或者直接使用sz 下载这两个文件到新机器上,或者下载到本地,再上传到新机器上。在我这里,就是以下两个文件

  • daogu.work.20241119.tgz
  • wordpress_backup_20241119.sql

2.新机器上操作

1. 下载并安装docker-compose

curl https://github.com/docker/compose/releases/download/v2.29.5/docker-compose-linux-x86_64 -o docker-compose
mv docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

这里是x86的机子,且下载的docker-compose版本是v2的,不是v1的版本。

2.制定docker-compose配置文件

services:
  db:
    image: mariadb:10.2.41
    volumes:
      - /var/www/wordpress/db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - 'MYSQL_PASSWORD=345abf.$fd'
    command: 'mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password'
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    volumes:
      - /var/www/wordpress/daogu.work:/var/www/html
    ports:
      - 8090:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - 'WORDPRESS_DB_PASSWORD=345abf.$fd'
      - WORDPRESS_DB_NAME=wordpress

这个配置文件要说明的地方:

  1. 只添加了数据库和wordpress,没有添加nginx,是因为这台机子的nginx在宿主机上安装,有其他服务也需要用到nginx转发,所以就不使用docker了。
  2. /var/www/wordpress/db_data:/var/lib/mysql/var/www/wordpress/daogu.work:/var/www/html修改冒号前面的内容,分别为mysql和wordpress映射到主机的文件。
  3. 'WORDPRESS_DB_PASSWORD=1345abf.$fd':这里添加引号,是因为密码中有特殊字符,所以添加引号,让程序认为是一个字符串,不会报错。
  4. 这里的mariadb版本和wordpress的版本,可以自己去查找,我这里只提供一个参考。你也可以把wordpress的版本改成latest,wordpress:latest
  5. 8090:80 这里的端口之所以不用80,是因为80可能已经被nginx或其他程序占用,所以修改到另一个端口去,不影响的,因为最后都要使用nginx转发的。
  6. 上述的配置文件,最好命名为:docker-compose.yml,因为这样方便操作。你改其他名字也可以的,只是启动的时候要多输入一些字符,这里我就不写了,感兴趣的自己去搜索一下。

3.文件准备

1.创建相关的目录
mkdir -p /var/www/wordpress/daogu.work
mkdir -p /var/www/wordpress/db_data
cd /var/www/wordpress
2.文件上传并修改名称
rz 命令上传之前的sql文件和tgz文件
mkdir daogu.work_bak
mv daogu.work.20241119.tgz daogu.work_bak/
cd daogu.work_bak
# 解压打包的文件,我这里是直接打包的整个网站,没有打包wp-content
tar -zxvf daogu.work.20241119.tgz
3.启动并进行后续操作:

  • 打开网站看一下,能否看到一个配置的页面,能看到,说明okay了,不能看到的话,也不要着急。
  • 因为我们有数据库文件,所以不需要进行一步步配置,请跟着下面的步骤来。
  • 出现这个页面,是因为我的nginx已经配置好了,这一步不要着急,我在后面会给出nginx配置文件模板。
# 查找mariadb的container ID
docker ps 
# 假定ID为:c5d4a359ab05 先将内容复制到机器中,成功会的提示:Successfully copied 
docker cp wordpress_backup_20241119.sql c5d4a359ab05:/tmp/wordpress_backup.sql
# 进入容器
docker exec -it c5d4a359ab05 bash
#导入数据
mysql -u wordpress -p"345abf.$fd" wordpress < /tmp/wordpress_backup.sql
# 如果要修改域名,需要在这里修改:
mysql -u wordpress -p"345abf.$fd" wordpress
UPDATE wp_options SET option_value = 'https://blog.daogu.work' WHERE option_name = 'home' OR option_name = 'siteurl';
# 退出数据库和退出容器,都使用exit,如果你修改域名,那应该要修改两次
exit
4.复制内容到指定位置:(migrate.sh)
#!/bin/bash
#
## 定义绝对路径
DAOGU_PATH="/var/www/wordpress/daogu.work"
DAOGU_BAK_PATH="/var/www/wordpress/daogu.work_bak/daogu.work"

## 复制备份文件
sudo cp -rf "$DAOGU_BAK_PATH/wp-content/themes/argon" "$DAOGU_PATH/wp-content/themes/"
sudo cp -rf "$DAOGU_BAK_PATH/wp-content/uploads" "$DAOGU_PATH/wp-content/"
## 删除不需要的主题和插件
sudo rm -rf "$DAOGU_PATH/wp-content/themes/twentytwentyfour"
sudo rm -rf "$DAOGU_PATH/wp-content/themes/twentytwentythree"
sudo rm -rf "$DAOGU_PATH/wp-content/themes/twentytwentytwo"
sudo rm -rf "$DAOGU_PATH/wp-content/plugins/hello.php"
#
## 设置文件权限
sudo chown -R www-data:www-data "$DAOGU_PATH"
#
## 重启 Docker 容器
sudo docker-compose -f "docker-compose.yml" restart
#
echo "迁移完成!"
5.查找网站及登录(cp_plugns.sh)
#!/bin/bash
#
## 定义绝对路径
DAOGU_PATH="/var/www/wordpress/daogu.work"
DAOGU_BAK_PATH="/var/www/wordpress/daogu.work_bak/daogu.work"
## 复制备份文件
sudo cp -rf "$DAOGU_BAK_PATH/wp-content/plugins/wp-statistics" "$DAOGU_PATH/wp-content/plugins/wp-statistics"
sudo cp -rf "$DAOGU_BAK_PATH/wp-content/plugins/wordfence-login-security" "$DAOGU_PATH/wp-content/plugins/wordfence-login-security"

## 设置文件权限
sudo chown -R www-data:www-data "$DAOGU_PATH"

echo "迁移完成!"
  • 因为我设置了二次登录验证,但直接将插件复制过去会出问题,所以就把插件在安装好后再复制过去。
  • 你可以自己添加一些自己用的插件来完成复制。同时修改文件权限。如果不修改权限,是无法进行插件更新的,因为没有权限。
  • 插件不是默认启用的,你需要自己更新,然后启用。网络问题,有时候出现更新的时候504报错,重新试一下就可以了。
6.nginx配置文件
server {
    listen 443 ssl http2;
    ssl_certificate       /path/to/daogu.crt;
    ssl_certificate_key   /path/to/daogu.key;
    ssl_protocols         TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 4h;
    ssl_buffer_size 2k;
    ssl_session_tickets off;

    server_name blog.daogu.work;
    root /var/www/wordpress/daogu.work;
    error_page 400 = /400.html; 
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location / {
        proxy_pass http://127.0.0.1:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }

}

server {
    listen 80;
    server_name blog.daogu.work;
    return 301 https://$host$request_uri;
}
  • 我已经有证书了,所以直接使用了
  • 强制配置的https

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇