认识我的人可能知道我的旧blog的遭遇,因为我以前用的是000webhost免费的主机,没有流量本来就没有做什么宣传,带宽、CPU、磁盘都基本没有用什么,但是被000webhost认为是abuse 使用,提示让我升级到他们的premium服务。但是我没有理会,一周之后,居然直接将我的数据删除了,写了好多的ticket反馈,投诉无果,也是无奈接受数据丢失的现实。

幸好,我在他们后台曾经备份过数据库,从各种邮件里翻出来了最后一份、也是唯一一份的的备份,看了下是2014年3月6日的备份,而000webhost删除我的服务是2015年10月,中间丢了一些东西,不过那段时间,我没有写什么东西,一部分写在了163的Blog上,一部分写在了Facebook上面、还有就是后面的LOFTER ,也就没有深究。 再以后域名续期之后,看国内没有免费稳定的host,国内大一些的服务商还需要域名备案,有些麻烦而且还对备案很反感,所以一直在app里作为默认测试地址的hite.me这个地址一度失效了,打不开。

今年春节过后,忙完了婚礼,接着一家人去了九寨沟,回来接着上班,其实也没有多少的时间来整理这一整年的事情。最近搞翻墙的事情,随便买了腾讯的主机,来了兴趣要搞RESTapi,正好复活下我的blog,也下定决心去备案,为以后自己的其他打算先试试水,现在网站是起来了,但域名还卡在备案部分,事情暂时告一段落,但是网站起来的过程还是比较波折,很合我这两年的心境和感悟,所以决定写下来,以备后续。

1.选择云服务器

云服务器,最近才熟悉起来的名字,而在5年前,刚刚开始去搭服务器的时候,你需要寻找的是免费主机,免费虚拟主机免费的VPS。从14年后,我再也没有去接触到这些东西。当这个月突然想去找的时候,发现已经不是这些了,而是云服务器主机实例,或者叫SSD Cloud,Droplet,Cloud Computing。其实我在论坛看到很多人推荐这些,也不确定我要的东西是这些吗?

一度很迷茫。陆陆续续试过别人买的Linode——慢;自己注册了AWS——官网打开都很慢,就别说是走流程去开通了;DigtalOcean 对新用户有yi’d一段时间免费体验——也是慢。后面在各种朋友的印象下,我在 阿里云、美团云、新浪云、腾讯云、甚至是新出来的网易蜂巢,大概看了他们的介绍,试图了解 我要购买的东西是不是 我要要的虚拟主机,用来建站的东西。

结果是选择了腾讯云,为什么呢?

  1. 腾讯和阿里是第一梯队的,技术本身过硬,大厂不会垮的那么快,而美团和新浪、虽然他们做这个做的比较早,但是在圈内讨论的比较少。
  2. 而阿里呢,从我开始看到慢慢了解这个云服务、云计算、云主机,他购买界面里的购买选项、介绍页,把我这个曾经知道了解虚拟主机的人看起来云里雾里。而反观腾讯云,他的产品界面分类很清晰,购买界面说明又简单,很多名词和我以前的了解很接近。举个例子,阿里的云服务下面有个分类实例,其实是对应腾讯云服务下面的主机——很明显,相比之下,借鉴了数据库里的instance和来自传统概念里的主机,主机的概念更简单。除此之外,腾讯云的后台的UI和交互比起 阿里云要简单和流程些。
  3. 就在我购买期间,阿里云的价格有改动,由原来的一年的基础配置为680左右变为720左右,看v2ex里网友也反映,阿里云在涨价。
  4. 阿里云的后台,登录进去长时间不操作,在background的tab状态是不会失效的,而腾讯云在一定时间不操作,需要你重新操作。相比之下腾讯云更注重安全。

PS:腾讯云貌似不稳定,见链接,https://www.v2ex.com/t/346703#

2.预备WordPress的环境

如上所述,我自己是有旧版本的3.5.0(数字记的不大确定)的WordPress的数据库备份,所以我需要准备WordPress的环境,把旧数据库备份文件导入。

well,遇到第一个问题,如何登陆远程主机。腾讯云提供了网页端的登陆,但是一点都不酷。在管理后台看到有ssh的功能,顺着指引,创建了新的ssh key,并把公钥上传到服务,并且绑定到主机(此时绑定没有问题,一次性操作成功,后面有多次操作失败——不稳定)。ssh登录需要host,这个是知道的,然后username呢?
在网站看到了 云服务的帮助中心看到了关于如何使用 云服务的帮助,甚至还有 搭建WordPress个人站点 »这样比较具体的教程。看了一遍介绍云服务的帮助,没看到有特殊的关于ssh登录的章节,但看到有一段

输入帐号(除Ubuntu系统用户为ubuntu外,其余系统均为root)和站内信中的初始密码(或您修改后的密码)即可登录

有了用户名,只用ssh -i /for_cloud ubuntu@host 直接登录成功。我没有设置过密码,应该是没有密码。因为引导过程中没有提示输入密码,我还在迷糊什么是登录密码?居然是空。虽然我后面需要提权时,直接使用sudo就可以了,但安装一些软件,需要输入密码的时候,空密码 是不接受的,导致需要先提权才能执行。

第一步 安装Apache

刚刚开始时,从网上找到的网站Ubuntu下快速部署安装 Nginx + PHP + MySQL 笔记 ,我安装了Nginx,其实我本意不是要安装Nginx,我只是照做了,导致了下面的坑。接着按照http://www.cnblogs.com/feifeifanye/p/6150551.html 和 http://dearch.blog.51cto.com/10423918/1831036 安装好了Apache、MySQL,PHPMyAdmin之后,去运行看test.php, 总是不成功,老是去下载。

什么原因呢?localhost/index.html,显示是成功的,而去测试php解析是成功,浏览器访问php文件不成功,其他的都没有需要设置的,搜了好多教程都是这样的,后来我注意到如果我去访问不存在的一个文件,显示的从404页面是Nginx的错误页面,我意识到是因为启动了Nginx,所以stop了Nginx,启动了Apache2,显示正常。

有以下收获:

  1. 计算机是个很精巧的机器,干扰是很多的,一不小心就被其他地方的东西干扰,所以debug问题的时候,需要注意很多点,这些点都是平时需要积累的,而我自己平时不注意加入些额外的东西,造成干扰的毛病还是存在的。
  2. Ubuntu作为一个开源的生态,发展是很快,周围的文档和文章都是很多,然后,文章和具体用户实际环境差别还会很大。比方说我自己的环境都是PHP7了,Apache2最新版,Ubuntu16.04,而网上很多教程都是PHP5,其实旧的Ubuntu上的旧的PHP,启动的路径都不一样,启动命令也是不一样的,会有很多 安装教程走不下去的情况。这是开源的弊端,碎片化,无中心化带来的问题。
    2.现在的Ubuntu是越来越好用了,学习了很多Mac上的思路。比方说启动服务,以前是sudo /etc/init.d/apache2 start 这一类的命令,而现在用统一的方法systemctl restart apache2、或者service apache2 restart 。这种命令容易记,而且可以扩展,比方说service apache2 status,同样的命令可以用到Nginx的启动上。

至此,WordPress的环境可以了

第二部,安装WordPress

按照指引执行了以下命令:

wget http://wordpress.org/latest.tar.gz
// 接着使用一下命令解压缩:
tar -xzvf latest.tar.gz

成功解压,访问http://localhost/wordpress/index.php,顺利进入了配置界面,而此时的phpmyadmin也是可以用的。并且按照指引走完了流程,去看了数据库,所有相关的表结构可以已经准备好了。拿出来好不容易从hotmail的旧邮件里找出来的备份文件,想通过phpmyadmin的导入功能,出现了第一个坑 phpmyadmin 无法导入xml文件,因为我的备份文件是从000webhost导出功能,是个很老旧的xml文件。而现在这个版本phpmyadmin导入xml是有代码错误。从网上查了一番,得知,mysql可以在每次插入或者计划任务时,自动将xml转换为sql,做单个记录的替换,或者是单个表的替换,而我需要的一次性批量替换,满足这个要求的是windows上的一款软件 https://www.coolutils.com/XML-to-SQL-In-Batch 里面有很全的,所以第二天,把遗弃了很久不怎么用的PC的电线整理完毕,开机后终于转换为批量的SQL,开开心心去phpmyadmin操作界面import,提示file format error.。自己解开之后,尝试了下单个文件的导入,提示各种语法错误,这就是第二个坑——从XML导出的SQL文件所有的表名和字段名都带了双引号
用Sublime Text打开了各个SQL文件,使用批量替换双引号为单引号,终于可以导入了,但是导入到items表的时候出现了第三个坑 我使用了默认创建DB语句,没有指定chartset和collation,导致所有table和所有字段都是Latin1,所以无法插入中文。重新创建了表和字段之后,可以导入中文,使用了九牛二虎之力,导入完毕,然后,在phpmyadmin中插入成功之后,学习到从bash连接到数据库,使用select * from items语句去看帖子内容——所以中文都显示为“???”,设置好本地的bash的LangLANG_CLL为utf8之后,可以成功导入了。
在浏览器里查看博客首页,报错了,错误是无法连接到数据库。其实在陆续导入的时候,我有意识到我的导出版本是3.5.0 都到现在了4.7了,数据库是不是对不上了?
保存好了处理好双引号的sql文件,我drop tablebase,重新进入了配置流程,生成了全新的表结构,我自己对比了下新旧版本的差别,发现

  1. 表的数量不一样,表名更是绝大部分不同,比如旧版本的item是post的表名,而新版本里就是叫wp-posts.
  2. 相同的表里,字段也变化了很多,新版本里,字段的命名更规范的了,许多字段都是wp-的前缀,原来的表里,wp-只有少数字段有这个前缀,大部分还都是简单的文字。所以现在更规范
  3. 旧表里,还有许多为动态字段预留的部分,现在都去掉了。应该是进行过优化的原因。

所以说起来,旧表是不能引入的新系统的,我找到几个迁移旧版本 WordPress的插件,貌似也是不太支持我导出的文件。

第三部 配置 WordPress

好了,既然不能导入旧数据,索性用全新的博客好了。新的风格,新的内容,毕竟旧blog的风格和内容已经不符合我现在的诉求和心境。首先,需要使用新的主题,官方默认的twentyseventeen系列太复杂,还是很经典蓝色头部两栏的旧版版式。
进入管理后台的theme功能,找了3个还算比较喜欢的,简洁,只有2栏的,marlin-litelightpress,tempo ,然而在后台里,点击install后,需要输入ftp信息,但是我自己搭的系统里,没有设置ftp啊。想想免费的000webhost默认配置的ftp,自己可以完全控制主机缺没有,so ironic .

所以,如果不配置ftp信息,那要怎样上传呢。遥想以前在Windows上用xShell的sz,rz 名字,隐隐约约记得用标准ssh 的scp命令,搜索了一番,发现mac上可以有sz,rz,但是需要安装一个lib包lrzsz-x.x.xx.rpm ,安装成功之后,运行,发现无法弹出 文件选择窗口,没有深究,先放弃。尝试用scp命令;scp ./tempo.zip ubuntu@118.190.x.x:/var/www/, 报错了,原因是因为public key校验失败,原因是 需要指定for_cloud来登录远端服务,然后不知道如何指定。想了个办法,把默认的.ssh/下的private key来登录,这样就不需要指定这个参数了。
登录到后台,尝试绑定默认的public key,然而,重点来了在尝试绑定ssh key的操作中,腾讯云的后台频繁的报错:暂时不可用,请稍后再试,为什么后台如此不堪。而且还有个插曲,后台绑定ssh key需要关机情况下操作,导致我重启了两次之后,再一次启动了Nginx,Apache没有启动。
配置好了ssh,继续执行scp ./tempo.zip ubuntu@118.190.x.x:/var/www/ ,新问题出现了 这个sshkey 需要输入密码,但是我创建时使用密码输入无效,哭了。 而for_cloud 是不需要密码的,还是换回到 旧的ssh key。查了scp的命令,有参数可以指定 ssh key

usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 […] [[user@]host2:]file2

改下语句:scp -i /for_cloud ./tempo.zip ubuntu@118.190.x.x:/var/www/。结果是/var/www/ 下无权限,原来默认解压完毕之后,wp-content这个文件夹对other用户是只读的,然后调用了如下命令chmod o+w wp-content,再次运行,乌拉,成功。

在后台里有配置如何显示URL的,我选择了/year-month-day/模式,保存之后 WordPress 提示需要更新.htaccess文件,在按照网上的说法添加好了文件,重启service apache2 restart,也没有成功。有种说法,说实现redirect不适合用.htaccess,而是用apache的conf文件来配置,.htaccess是给以前旧的 虚拟主机 这种模式的服务器使用的方法。弄了好久没成功,放弃了,还是用比较老套的旧的/wordpress/p123这样的模式,这个是不需要配置redirect命令的。

解压好主题,对比一番,开始先用lightpress的主题,自定义了图片,但是图片太大,上传了尺寸小一点了,发现lightpress的主题css有问题,小图在大屏幕下是不居中的。我自己写了 additional css实现居中效果,重启了服务器也没有生效,然后我自己ssh到远端,WordPress目录下修改了style.css 发现还是没有生效,观察了一会发现应该是因为带了版本号,服务器那边的缓冲。 清空了浏览器的Cache,文件是更新了,但是css规则没有生效,真是奇怪。我开始怀疑自己以前是不是写过css,这么简单的代码不对吗? 转而用marlin-lite,加入了小的头图显示效果也是居中的,然后参考了lightpress的displayName和slogan ,改在marlin-lite的header.php文件里,配置了右侧的search和recent post 和自定义图片,去浏览器了看来一眼,显示效果完美!

收获

  1. 自己有完全访问权限的主机,虽然很灵活,在虚拟主机时代只提供部分功能的服务还是比较方便的,提供的ftp,mail,数据库服务都是那时候最标准的需求。
  2. 使用Ubuntu还是要有基础的Linux知识,如自启动服务等,比方 Nginx的自动,在那儿启动还没找到
  3. 真是技多不压身,CSS,PHP,都有可能用到
  4. 不知道是环境问题,还是我的打开方式不对,老是在一条路上走不下去,而我总是无法真正解决,还是道行不够? 来回选择,最后选择了一套能解决的方法!这个情况和生活中也有类似的体现。
  5. htaccess到现在还没有试成功,不知道他正确的打开方式,网上的帖子里描述的 配置下在我的主机上相同的文件找不到——网上的教程有点旧。

至此可以用IP来访问了,域名备案到了管局,通过之后,我的hite.me就可以真正重生了!