为什么要从原装到docker
原装的一些说明
- 原装的优点:可直接控制,消耗资源少,性能更优。如果服务器内存低,可以使用原装。
- 原装的缺点:依赖管理复杂,PHP,mysql和nginx版本兼容问题,配置也比较繁琐。维护成本高,我到现在都不想升级php版本,怕出现兼容性问题。容易出现冲突等,适合技术能力强,不愿意折腾的人。
docker的说明
- docker的优点:易于管理,冲突较少,快速部署,可移值性强,方便备份等。
- 缺点:需要学习一下如何使用,性能会有损耗,日志查询要进容器等
为什么要更换?
- 方便随时跑路,随时迁移,随时换服务器,主打一个便宜,反正域名不换,机器随便换。
- 学习一下如何方便地迁移博客。
- 学习如何使用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
这个配置文件要说明的地方:
- 只添加了数据库和wordpress,没有添加nginx,是因为这台机子的nginx在宿主机上安装,有其他服务也需要用到nginx转发,所以就不使用docker了。
/var/www/wordpress/db_data:/var/lib/mysql
和/var/www/wordpress/daogu.work:/var/www/html
修改冒号前面的内容,分别为mysql和wordpress映射到主机的文件。'WORDPRESS_DB_PASSWORD=1345abf.$fd'
:这里添加引号,是因为密码中有特殊字符,所以添加引号,让程序认为是一个字符串,不会报错。- 这里的mariadb版本和wordpress的版本,可以自己去查找,我这里只提供一个参考。你也可以把wordpress的版本改成latest,
wordpress:latest
8090:80
这里的端口之所以不用80,是因为80可能已经被nginx或其他程序占用,所以修改到另一个端口去,不影响的,因为最后都要使用nginx转发的。- 上述的配置文件,最好命名为: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