迁移WordPress至新主机的相关步骤


=Start=

缘由:

这个博客是在2014年6月份左右开始搭建的,当时因为比较熟悉Ubuntu环境,且对LNMP的编译安装配置也不是太清楚,所以选了Ubuntu系统用的LNMP一键安装包搭建的环境。在维护这个博客期间,我学习到了很多知识,也保持了一个较高的更新频率,但是后来工作忙起来了之后就没什么时间在博客上写东西了(并不是太忙而没时间,也不是太懒而不记录……)。前段时间工作没那么忙了之后就想着把博客再好好整理一下,包括后端的系统环境等等。

因为自己做的是安全相关工作,所以在搭建博客的时候也比较注意安全这方面的问题,也做了不少防护措施来避免VPS/博客被轻易黑掉。但近2年出了不少比较大的安全事件,比如:脏牛漏洞、ImageMagick漏洞、……、还有一些WordPress的漏洞,不禁感慨,在安全的世界里漏洞是始终存在的,防不胜防,说不定之前有哪一点没做好或是补丁防护晚了些,然后博客就被上传了个webshell,然后利用最近出来的一个0day漏洞,服务器就被拿下了。更别谈之前很长的一段时间博客根本就没有什么防护手段和措施,所以现在就连我自己都说不准VPS/博客是否是安全的。

再加上现在用的Ubuntu系统比较老了,工作方面主要用的是CentOS,所以就考虑在DigitalOcean上新建一个CentOS的droplet再搭一个环境,把之前的博客和相关服务都迁移过去。下面就主要记录迁移博客和服务的相关过程。

正文:

参考解答:
1.新建主机&初始化主机

先在DigitalOcean的后台页面上新建一个droplet,然后使用之前写的CentOS系统初始化脚本(centos_init.sh)进行主机初始化操作。

2.原始主机的本地&远程备份
  • crontab以及涉及到的相关代码/配置文件
  • 迁移 www 目录和相关日志;
  • 一些主要的系统设置;[MySQL、PHP、Nginx、php-fpm、rsyslog、/etc目录、]
# scp -r -C -P $port -i ./id_rsa.security root@crazyof.me:/root/ /home/crazy
3.在新建主机上搭建相关环境
4.WordPress博客迁移

WordPress内容导出
方法一:
WordPress后台自带导出工具

方法二:
命令行下可使用 wp-cli 进行快速导出
http://wp-cli.org/commands/export/

WordPress内容迁移
方法一:
WordPress后台自带导入工具(只适合内容比较少的情况,比如:XML文件大小不超过2MB)

方法二:
命令行下可使用 wp-cli 进行快速导入
http://wp-cli.org/commands/import/

方法三:
使用工具将大XML文件切分成多个小的XML文件分多次导入。

WordPress主题功能/样式修改

# wp-config.php (WordPress全局安全功能增强 FORCE_SSL_ADMIN / DISALLOW_FILE_EDIT / DISALLOW_FILE_MODS)
 
# content.php (添加「显示摘要」这个功能)
# footer.php (添加「页脚显示内容」这个功能)(cnzz/百度统计)
# header.php (添加「返回至顶部」这个功能)(div.go-top)
# single.php (添加「原创文章声明」这个功能)
# functions.php (添加一些安全功能)
# style.css (个性化设置)

WordPress站点URL修改

方法一:直接修改WordPress数据库表的对应字段

use wordpress;
desc wp_options;
select count(*) from wp_options;
select * from wp_options where option_name IN('siteurl','home');
update wp_options set option_value='https://ixyzero.com/blog' where option_name = 'siteurl';
update wp_options set option_value='https://ixyzero.com/blog' where option_name = 'home';

方法二:修改 wp-config.php 文件内容以间接达到目标

define('WP_HOME', 'https://ixyzero.com/blog');
define('WP_SITEURL', 'https://ixyzero.com/blog');

方法三:修改所使用主题中的 functions.php 文件内容

update_option('siteurl','https://ixyzero.com/blog/');
update_option('home','https://ixyzero.com/blog/');

WordPress全站HTTPS

申请StartSSL或Let’sEncrypt的HTTPS证书,在Nginx上进行配置。

5.crontab定时任务迁移
# crontab -l | tee cron_list_${USER}.txt
$ crontab -l | tee cron_list_${USER}.txt
6.防护、扫描、告警操作
  • SSH禁止root登录、仅限密钥登录、增加防爆破机制、增加登录提醒机制
  • MySQL删除无用账户密码、限制root外联、为各服务单独创建用户/数据库
  • Redis等NoSQL增加密码验证、限制可连接IP范围
  • Nginx以低权限用户启动,并添加一些规则,防范敏感文件泄露
  • Web目录增加Inotify监控,防范webshell上传
  • WordPress增加一些安全策略
  • 替换原有Bash,增加命令记录、提权检测、反弹shell操作检测
  • 增加日志分析的定时任务,并将分析结果和可疑情况以邮件的形式发给自己
参考链接:

=END=

, ,

《 “迁移WordPress至新主机的相关步骤” 》 有 15 条评论

  1. wordpress更换域名的几个步骤
    http://www.2zzt.com/jcandcj/5883.html
    https://codex.wordpress.org/Moving_WordPress

    如何完美更换WordPress网站的域名
    http://wpchina.org/how-to-change-wordpress-domain-prefectly-1528/
    如何手动备份WordPress数据库
    http://wpchina.org/how-to-backup-wordpress-database-manually-1437/

    WordPress博客网站搬家和换域名方法
    https://blog.fazero.me/2015/07/11/WordPress%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99%E6%90%AC%E5%AE%B6%E5%92%8C%E6%8D%A2%E5%9F%9F%E5%90%8D%E6%96%B9%E6%B3%95/

    WordPress更换域名详细攻略
    https://www.liaosam.com/how-wordpress-changes-domain.html

    WordPress搬家更换域名,实现301完美重定向!
    http://www.ha97.com/2511.html
    `
    情况分类:
    换空间 + 换域名
    0.开始之前,请先做好网站的备份,备份好网站数据库和网站文件。尤其是数据库,一定要做好备份,以防操作过程中出现错误,我们可以使用备份的数据库重新进行操作。然后注意更新 wp-config.php 文件中的配置。
    1.将新域名做好解析和绑定操作。
    2.更新数据库中的域名。
    3.全站301重定向。

    换域名
    0.开始之前,请先做好网站的备份,备份好网站数据库和网站文件。尤其是数据库,一定要做好备份,以防操作过程中出现错误,我们可以使用备份的数据库重新进行操作。[可选]
    1.将新域名做好解析和绑定操作。
    2.更新数据库中的域名。
    3.全站301重定向。
    `

  2. DigitalOcean除了在刚开始的时候有些优惠,后来基本上就没什么折扣了,5美元一个月的虽然不算太贵,不过只有512MB的内存,考虑切换到Linode上的5美元套餐了,起码机器性能会好点,不至于MySQL经常挂掉。。。
    https://www.linode.com/?r=fe5819c58f2f569dff908597542fbbf526d86c14

    Linode测速链接
    https://www.linode.com/speedtest
    多地点ping(测试的情况来看日本节点的机器会比较好,不过貌似被封的也厉害,可以实际使用试试再做决定)
    http://ping.chinaz.com/speedtest.tokyo2.linode.com

  3. 1. CentOS 7 上安装 PHP7的方法
    `
    function install_php7() {
    # check php’s version before install
    # php -v

    # install some tools
    sudo yum install -y epel-release
    sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
    sudo yum install -y yum-utils

    # enable remi-php73 repo
    sudo yum-config-manager –enable remi-php73

    # yum search php73 | more
    # sudo yum search php73 | egrep ‘fpm|gd|mysql|memcache’

    sudo yum install -y php73 php73-php-fpm php73-php-gd php73-php-json php73-php-mbstring php73-php-mysqlnd php73-php-xml php73-php-xmlrpc php73-php-opcache php73-php-soap php73-php-mcrypt php73-php-bcmath php73-php-cli php73-php-common php73-php-devel php73-php-dba php73-php-curl php73-php-snmp php73-php-imap php73-php-ldap php73-php-pecl-memcache php73-php-pecl-memcached php73-php-pecl-mysql php73-php-pecl-mysql-xdevapi

    # check php’s version after install
    php73 -v

    # enable first, then start
    sudo systemctl enable php73-php-fpm
    sudo systemctl start php73-php-fpm
    }
    `

    2. 对应的 php + php-fpm 配置文件位置
    /etc/opt/remi/php73/php-fpm.conf
    /etc/opt/remi/php73/php-fpm.d/www.conf

    /etc/nginx/nginx.conf
    /etc/nginx/conf/

  4. 我的博客安装了哪些Wordpress插件?
    https://mp.weixin.qq.com/s/Mifx4ju7RZtMCLET5C83CA
    `
    第一:做数据分析和追踪的插件
    插件一:All in one seo pack
    插件二:Jetpack (WordPress官方出品,不过需要很多的数据,这个看个人的接受程度吧)

    第二:做网站站内优化的插件
    插件三:ShortPixel Image Optimizer
    插件四:WP Smush
    插件五:WP Fastest Cache
    插件七:SEO Friendly Images
    插件八:Wp Seo Schema

    第三:做网站安全防御的插件
    插件九:updraftplus
    插件十:WordfenceScan
    `
    https://cn.wordpress.org/plugins/all-in-one-seo-pack/
    https://wordpress.com/jetpack/connect
    https://wordpress.org/plugins/shortpixel-image-optimiser/
    https://wordpress.org/plugins/wp-smushit/
    https://wordpress.org/plugins/wp-fastest-cache/
    https://wordpress.org/plugins/seo-image/
    https://wordpress.org/plugins/wp-seo-structured-data-schema/
    https://wordpress.org/plugins/updraftplus/
    https://wordpress.org/plugins/wordfence/

  5. 32步WordPress网站安全终极检查清单 – 目录
    https://wpchina.org/32-step-checklist-security-your-wordpress-site-5076/
    `
    32步WordPress网站安全终极检查清单:第1~5步
    * 保持使用最新版本的WordPress;
    * 不要修改WordPress的内核代码;
    * 确保所有插件更新到最新版本;
    * 移除所有未激活、未启用的插件;
    * 确保所有主题更新到最新版本;

    32步WordPress网站安全终极检查清单:第6~12步
    * 仅安装下载自其官方网站的插件、主题和脚本程序;
    * 选择安全可靠的WordPress主机服务商;
    * 确保你的网站运行在最新版的PHP版本上;
    * 修改默认的admin用户名;
    * 使用强健安全的密码;
    * 不要重复使用密码;
    * 注意保护密码的安全,不要使用文本格式来保存密码;

    32步WordPress网站安全终极检查清单:第13~17步
    * 只在可信任网络中更新你的网站;
    * 本地计算机要安装杀毒软件;
    * 使用Google Search Console等类似服务监控网站安全;
    * 使用安全防护插件来保护你的WordPress网站;
    * 如果其他步骤失败了,那使用备份文件恢复网站;

    32步WordPress网站安全终极检查清单:第18~22步
    * 限制尝试登录的行为;
    * 启用双重认证(可参考本站推荐的25个最受欢迎的WordPress插件之25)
    * 确保文件权限设置正确;
    * 修改默认的数据库表前缀;
    * 确保设置了WordPress秘密认证验证密钥;

    32步WordPress网站安全终极检查清单:第23~27步
    * 禁用执行PHP代码;
    * 隔离数据库;
    * 限制数据库用户的权限;
    * 禁止文件编辑;
    * 保护wp-config.php文件的安全;

    32步WordPress网站安全终极检查清单:第28~32步
    * 禁用xml-rpc功能(如果你不需要这一功能的话);
    * 禁用PHP错误报告功能;
    * 安装防火墙;
    * 使用CDN防火墙;
    * 通过安全日志监视WordPress网站安全。
    `

  6. 十条关于 WordPress 安全性的小贴士 操作
    https://mp.weixin.qq.com/s/HaPAKZLvrVzRUftumMDrmA
    `
    1. 切换到 HTTPS
    2. 限制 MySQL 连接地址
    3. 使用强大的数据库凭据
    4. 使用强大的管理员帐户凭据
    5. 移动或保护 wp-config.php 配置文件
    6. 尽可能授予用户最低权限角色
    7. 限制 IP 地址访问
    8. 隐藏 WordPress 版本号
    9. 理智选择第三方插件和主题
    10. 定期更新 WordPress 和插件
    `
    https://www.sitepoint.com/10-easy-wordpress-security-tips/

  7. 6款最好用的WordPress安全插件推荐
    https://themeforwp.net/archives/best-wordpress-security-plugins/
    `
    Wordfence Security
    iThemes Security
    Hide My WP
    All In One WP Security & Firewall
    SecuPress
    Sucuri Security

    以上就是我们为大家推荐的Wordperss安全插件,它们都会为你的网站添加强大的安全防护。当然你不需要将这些插件全部安装,只需要挑选一款适合自己的即可。

    * 新手用户,建议使用 iThemes Security 和 All In One WP Security,这2款插件都是中文界面,而且使用起来比较简单;
    * 注重性能,选择 Sucuri Security,这一款比较简洁;
    * 付费的话建议 SecuPress,功能全,界面漂亮,价格也便宜;
    * 综合性能较强的 Wordfence ;
    * 另外如果你不想暴露自己使用WordPress程序,Hide My WP是最好的选择。

    最后,记得养成良好的习惯,注意Wordpress主题插件安全,定期进行站点备份、网站维护等操作,更多WordPress安全技巧可以查看我们的WordPress安全防护建议。
    `

  8. 禁止在Wordpress控制面板里编辑文件
    https://www.douban.com/note/242107890/
    https://www.cnblogs.com/wpsnippet/archive/2012/12/20/2826751.html
    `
    在你WordPress根目录的 wp-config.php 文件中添加如下两行:

    define(‘DISALLOW_FILE_EDIT’, true); //禁止通过Wordpress的后台编辑任何文件
    define(‘DISALLOW_FILE_MODS’,true); //禁止安装或者升级Wordpress

    在 wp-config.php 中添加
    define(‘DISALLOW_FILE_EDIT’, true);
    之后,还可以进行【主题、插件】的安装(但无法在线编辑)。

    添加了以下这一行
    define(‘DISALLOW_FILE_MODS’, true);
    之后,就无法进行【主题、插件、版本】的安装或升级操作了。
    `

  9. 如何禁用WordPress主题以及插件的更新提示?
    https://www.wpmee.com/1779.html

    https://trickspanda.com/disable-plugin-update-notification-specific-wordpress-plugin/
    https://trickspanda.com/disable-plugin-theme-updates-installation-wordpress/
    `
    Just add following snippet to your wp-config.php file:

    define(‘DISALLOW_FILE_MODS’,true);
    `

    wordpress怎么禁止后台编辑主题和插件
    https://baijiahao.baidu.com/s?id=1637295965872223237&wfr=spider&for=pc

    WordPress 技巧:移除 WordPress 后台的主题编辑器
    https://blog.wpjam.com/m/remove-theme-editor/

    WordPress 技巧:关闭后台的文件编辑功能
    https://blog.wpjam.com/m/disable-file-edition-in-wordpress-admin/

  10. WordPress 技巧:隐藏登录失败未知用户名和密码不正确的错误信息
    https://blog.wpjam.com/m/hide-wordpress-login-real-errors/
    `
    add_filter(‘wp_login_errors’, function($errors){
    $error_code = $errors->get_error_code();

    if(in_array($error_code, [‘invalid_username’, ‘invalid_email’, ‘incorrect_password’])){
    $errors->remove($error_code);
    $errors->add($error_code, ‘用户名或者密码错误。’);
    }

    return $errors;
    });
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注