前几天准备迁移服务器,正巧打算将所有东西 docker 一下,打算着 mysql、wordpress 都放在 docker 中,想着挺简单,中间也遇到了一些坑,小记一下。
安装过程
安装 mysql
新服务器直接装了宝塔面板,直接装 docker,然后安装 mysql 多版本管理器:
安装 8.35 版的 mysql,直接输入端口和密码即可:
安装好数据库后,新建一个数据库。在 数据库
页面中,添加 mysql 的远程数据库,输入刚才的内容,如果可以点确定,就说明连接并新建成功。
然后添加数据库,这里直接选择指定 ip 访问即可,千万不要选本地访问,这样绝对访问不到。ip 可以在 docker 中查看,也就是 docker 对应的网络,一般是 172.x.x.1
。这样可以杜绝外网访问
安装 wordpress
直接在 docker 中拉取 wordpress,第一个就是官方的镜像,拉取成功后,创建一个容器实例:
名称随便起,端口需要本地空闲的,映射到容器的 80 端口。网络和挂载卷可以根据自己的情况,不填的话,创建时系统会默认提供。
这样,我们所需的东西就都创建好了。
此时,我们应该可以通过 ip:8080
访问我们的博客了。
这个时候,在实例 wordpress 的时候,数据库需要添加刚才创建的那个,ip 就写 172.x.x.1:port
,具体内容根据自己服务器填写,不出意外,应该可以成功了,我们已经可以通过 ip 正常访问了
域名的配置过程
接下来就是配置域名。
首先,我们需要在云服务器站点映射域名到 ip 上,这个自定实现。
然后,我们需要安装 nginx。如果你想,也可以安装 apache。这里只讨论 nginx 的实现。
安装好 nginx 后,在 网站
页面中创建一个 PHP 项目,点击 添加站点
,在 域名
一栏中添加我们的域名,下面会自动填写,不用手动改(除非你另有用处),其余均默认即可。
点击确定,这样我们就创建好了一个静态服务器,宝塔给我们的网站配备了基础的 nginx 配置项。
点击设置,选择 反向代理
,添加一条记录:
此时 nginx 为我们添加了一条监听 80端口的根目录的转发代理。
添加成功后,我们重载 nginx 服务,新开浏览页面,输入域名,此时应该可以看到我们的 wordpress 应该已经可以通过域名访问了。
ssl 配置
宝塔最方便的就是 ssl 的配置。还是在站点的配置项中,选择 ssl,我们选择 Let's Encrypt
,就可以一键配置当前网站的 ssl 了,这个过程如果失败,重试几次即可。
当成功后,我们可以强制 HTTPS,使我们的网站可以强制跳转到 https,提高访问的安全性。
配置好后,重载 nginx 服务,我们就可以通过 https 的方式访问我们的 wordpress 了。
但是!!!!!
我们的 wordpress 应该出现了大量的跨域问题,而且访问二级目录,比如 /wp-login.php 的时候,应该访问不到了。不要慌,我们接下来配置它!
配置https访问
在 wordpress 的 docker 挂载卷里,找到根目录下的 wp-config.php 文件,在文件开始添加:
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
接着,找到 \wp-includes\functions.php 文件,在前面加上:
add_filter('script_loader_src', 'agnostic_script_loader_src', 20,2);
function agnostic_script_loader_src($src, $handle) {
return preg_replace('/^(http|https):/', '', $src);
}
add_filter('style_loader_src', 'agnostic_style_loader_src', 20,2);
function agnostic_style_loader_src($src, $handle) {
return preg_replace('/^(http|https):/', '', $src);
}
然后,修改数据库中的内容。因为 wordpress 很多内容都存库了,所以修改地址后,需要将库中的内容一并修改:
UPDATE wp_options SET option_value = replace( option_value, 'http://www.old.com', 'http://www.new.com' ) WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = replace( post_content, 'http://www.old.com', 'http://www.new.com' ) ;
UPDATE wp_posts SET guid = replace( guid, 'http://www.old.com', 'http://www.new.com' ) ;
执行它。
一般来说,新地址应该是 https 开头的,这样才会正确访问。
此时,我们的网站应该已经成功部署好了。
迁移 wordpress 内容
前面都是新部署一个 wordpress。我们最终需要将原来的数据放进来。我找了好多插件,最后发现只有一个好使,推荐一下:
UpdraftPlus
这个插件免费版基本足够用,而且可以非常快的打包并重新部署包括:数据库、文件、媒体、插件、皮肤 等内容。
具体用法这里就不过多说明了,有需要的小伙伴可以自行研究,非常简单,鼠标点点几下就可以了,没有那么多繁琐的操作。
最关键的,它在恢复数据的时候,可以自动将域名替换成当前网站的域名,这点非常赞!所以我们一定要先把前面部署新站点的工作做好,最后再恢复数据就可以了~
文章评论