简介
前几天买了新杜甫,迁移博客中,遇到了一些小问题,顺路分享出来,供大家参考。
主要涉及以下问题:1、Docker中,WordPress的数据库配置文件wp-config.php的差异。2、WordPress迁移后的文件权限重新配置。3、WordPress的php.ini优化,避免上传失败。4、WordPress管理员密码忘记,进行重置。
让我们开始
一、WordPress的数据库配置文件wp-config.php的差异
常规部署的WordPress配置文件只需要在配置文件中,填写数据库的连接方式。如下:
define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'db:3306');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
但是Docker中部署的WordPress,wp-config.php需要加入以下函数。
用于获取Docker容器传递过来的数据库参数,否则将无法正确连接到Docker中的数据库。
// a helper function to lookup "env_FILE", "env", then fallback
if (!function_exists('getenv_docker')) {
// https://github.com/docker-library/wordpress/issues/588 (WP-CLI will load this file 2x)
function getenv_docker($env, $default) {
if ($fileEnv = getenv($env . '_FILE')) {
return rtrim(file_get_contents($fileEnv), "\r\n");
}
else if (($val = getenv($env)) !== false) {
return $val;
}
else {
return $default;
}
}
}
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
/** Database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );
/** Database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );
/** Database hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', getenv_docker('WORDPRESS_DB_CHARSET', 'utf8') );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', getenv_docker('WORDPRESS_DB_COLLATE', '') );
二、WordPress迁移后的文件权限重新配置
在新机器还原备份好的WordPress程序目录时,即包含wp-admin、wp-content、wp-includes的这个顶级目录,映射到Docker容器后,发现网站无法上传文件,提示请输入FTP凭据(磁盘操作权限)来进行文件操作,所以判断文件和目录权限有问题。因此需要进入到Docker中的WP容器,对挂载的目录进行权限授予。
先进入WordPress的容器(wp-cxthhhhh-wordpress-1修改为你的WordPress容器名称或容器ID)
docker exec -it wp-cxthhhhh-wordpress-1 bash
我先查看了容器内现有的用户
cat /etc/passwd
然后授予权限
chown -R www-data /var/www/html
chmod -R 775 /var/www/html
chmod -R 777 /var/www/html/wp-content/
然后exit退出WP的容器,刷新你网站,即可发现权限正常,可以上传文件了。
三、WordPress的php.ini优化,避免上传失败。
Docker中的php.ini配置文件默认参数值很小,当我们上传大文件,如WordPress主题,可能就报错了。
那我们就在宿主机创建一个uploads.ini文件修改上传参数,一会再挂载到Docker中
我的宿主机uploads.ini文件放在/cxt/docker-data/wp-cxthhhhh/uploads.ini
博主设置的最大上传大小100MB,你可以自行修改下面的参数,直接用我的也没问题。
echo "file_uploads = On
memory_limit = 300M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 600
" > /cxt/docker-data/wp-cxthhhhh/uploads.ini
修改Docker容器的启动挂载参数,在原有的目录下加一行挂载文件
volumes:
- /cxt/docker-data/wp-cxthhhhh/data:/var/www/html
- /cxt/docker-data/wp-cxthhhhh/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
然后重启容器
cd /cxt/docker-data/wp-cxthhhhh/ && docker compose up -d
即可发现大文件可以上传了。快去上传你66MB的博客主题吧!
四、WordPress管理员密码忘记,进行重置
通过查阅WordPress官方文档,需要修改当前激活的WP主题目录的functions.php文件。
在第一个【<?php】之后,添加一行修改密码的指令。
wp_set_password( 'my_new_password', 1 );
然而我的付费主题functions.php文件是加密的,全乱码。因此去找了开发者,开发者讲主题有考虑到这一点,预留了一个其他接口(也是在functions.php最前面执行),因此我成功的将上面的修改密码的代码写入了开发者指定的接口。(提示,如果你的主题也是加密的,可以咨询你的主题开发者)
然后使用新密码登录WordPress,发现不提示密码错误,但是一直返回登录页。就仔细阅读了官方文档
里面有一句话“Once you are able to login, make sure to go back and remove that code. It will reset your password on every page load until you do so.”
大意是,上述指令将会在每一次页面刷新时,重置你的密码,因此请在刷新使用后,立刻删除这一行。因为登陆后页面要再次加载,然后密码又被重置,登陆状态又掉了。所以才会没有报错,但一直返回登录页。
将上面添加的代码从当前激活主题的functions.php删除后,使用新密码登录,成功进入后台。
最后
成功解决WordPress的迁移问题。你也去试试迁移吧,玩坏了就来一起熬夜排查问题~~~
毕竟,搞迁移和刷机一样,这事情只能中午干!
(不然就像博主,现在还没睡,还有点兴奋,哈哈哈哈哈哈哈。)