为什么要重装

首先,如果你只是在同一家vps厂商下换个ip的话,理论上只需要做一个snapshot然后重新建一个服务器就好,这样做几乎没有任何需要重新配的东西(除了ip)

当上述操作无法进行的时候,包括但不限于 - 换vps厂商 - 换vps账号 - 换vps的地区 - 降级vps配置

你就需要走上漫漫的重装之路了。当然,如果你是第一次装也可以参考下面的步骤。但因为我不是从零配起,而且有一些先验的知识,我不会事无巨细地讲解(如果你不熟悉linux此时建议找个朋友指导或者email我,我再给出并顺便整理更详细的说明)。

需要做什么

我的服务器上没有跑什么东西,只是部署了几个hexo的网站和v2ray的代理,因此权衡了一下,与其手动迁移大量配置不如重零开始重装来的省事。

创建/购买服务器和域名

我是在Digital Ocean上购买的,每月5刀,没有流量限制(不过挂pt啥的估计也是有限制的),速度的话选加州大约200ms左右,速度可以看油管1080p。有人写了个测速的网页可以参考:测速网址,照它写的先添加书签然后去DO测速网页点击书签就行了。

DO的话还有一个好处就是Github教育优惠给50刀(相当于10个月),然后如果通过推广链接的话进的话还可以获得100刀(不过两个月到期,其实相当于2个月)。我的推广链接是 推广链接,如果打算也用DO的话可以点一下。支付方式的话paypal绑国内借记卡就可以了,有信用卡自然更好。

域名的话到处都可以买,我个人觉得cc的后缀比较好玩所以用这个,大概一年30左右,不介意的话也有很多其他更便宜的域名。Github教育也有一些域名的优惠可以薅。域名到手后建议去扔去 Cloudflare 管理,纯免费,而且里面有很多实用的功能比如https、修改DNS、保护ip、加速和缓存、主机挂了后托管静态页面等服务。

v2ray的搭建

服务器到手后建议先搭v2ray然后测一下google和google scholar能不能上,有些ip段可能被google封了,这样的话反手把服务器干掉然后重新建一个就能换一个ip了。

这里我是用的一键安装脚本 脚本链接。我选择了Nginx+ws+tls的配置,基本上是傻瓜式的了,一路跟着指示走就好。有一步是需要填写伪装的域名,这里你先在Cloudflare那边配好(比如你的域名是yyy.com,在Cloudflare那边的DNS添加一个Type为A的记录,名字可以为xxx,ip为你的ip。然后安装过程中填写xxx.yyy.com就行,他会自动检查你配置的是否正确,然后一路傻瓜进行下去就行,中间有一个编译安装 nginx 的过程需要一些时间(几分钟左右)。安装完后显示了配置的二维码,扫完后客户端就能用了。可以试试访问xxx.yyy.com看是否出现了元素周期表,然后看看代理是否正常工作。脚本链接还提供了一些bbr加速的服务,顺手装了就ok反正没损失。

hexo的搭建

hexo的内容我是在本机写的然后在服务器部署,因此只是需要一个部署的方式。我的部署流是

  1. 首先修改本机ssh/config,配置别名和密钥登陆。我之前配过所以只是需要换ip
  2. 设置hexo的部署。这里其实之前设好的话不用修改,这里只是列一下配置
  3. 设置静态页面存放的路径<path_to_publish_folder>。一般会创建在/var/www之类的地方,记得让nginx的用户需要有权限访问这个目录。然后新增nginx的配置(一般放在/etc/nginx/conf/conf.d/*.conf下),使得访问对应域名的时候,nginx能正确的处理并找到正确的文件夹。记得测试并重启nginx
  4. 设置git和hook。选定并存放的路径<path_to_git_folder>后,在文件夹里面git init --bare,会出现hooks文件夹,进入后创建 post-receive,写入内容。这样每次你hexo deploy后,会触发这里面的操作,清空<path_to_publish_folder>里的东西并用新的替换。

由于这里配置比较多,列一下我的参考配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# ssh/config
Host DO
HostName <your IP>
User root
IdentityFile ~/.ssh/id_rsa

# hexo/_config.yml
deploy:
type: git
repo: root@DO:<path_to_git_folder>
branch: master

# /etc/nginx/conf/conf.d/*.conf
server {
listen 80;
listen [::]:80;
server_name <abc.yyy.com>;
index index.html index.htm;
root <path_to_publish_folder>;

location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{
expires 15d;
}
}

# <path_to_git_folder>/hooks/post-receive
rm -rf <path_to_publish_folder>
git clone <path_to_git_folder> <path_to_publish_folder>

然后试着在本地 hexo g; hexo d; 看看是否成功部署在服务器上。