不作死就不会死, 不捣鼓就不会活 -- via 菲利克斯· 肖恩莱特
什么是作死?作死就是不懂原理乱写代码,不懂环境乱配,不懂工具乱用,打掉一个 bug 再怀上一个 bug,伤元气瞎折腾。
什么是捣鼓?捣鼓和作死相反,在解决问题时力求寻因导果,既能解决问题,又能学到新知识拓展新视野。
在最近折腾 VPS 的时候,我就不断在作死,才捣鼓出了新乐趣,写下来和大家分享一下。
作为一个没有服务器端编程经验的小前端,为何要去折腾 VPS 呢?因为能学到很多东西啊,举几个栗子:
-
搭建个博客写点文章啊
-
既然搭建博客了,那要搞域名啊、CDN 啊、加缓存啊、打补丁啊、流量分析啊、性能分析啊、写主题啊、优化访问速度啊、提高 SEO 啊
-
搭建个 VPN/shadowsock 配个代理锻炼锻炼身体又能科学上网啊,还可能省点钱啊
-
哎呀好多操作都是 Linux 还是纯命令行操作的,能学到不少 Linux 知识啊
-
女朋友不陪你折腾你还可以折腾 VPS 啊
从购买一个 VPS 开始
要过情人节,首先你得上淘宝买个不会漏气的女朋友。
同理,你想折腾 VPS 你得买个靠谱的服务器。
比如,你想访问速度快一些,可以选择购买腾讯云或阿里云提供的服务器;如果你想更自由一些,可以选择国外 Linode 或者 DigitalOcean 等提供的服务器。选择腾讯云可以使用我们的推荐链接, 选择 Linode 则可以使用这个链接。腾讯云最低配只需 65 块,Linode 最低配也只需要 10 美金,具体的配置和价格,可以自己去仔细对比下。
好了,有了充气娃娃,噢不,是服务器,我们就可以放心地上了。
使用 ssh 进行登录,假定服务提供商给你的 IP 是 11.22.33.44, 帐号是 root, 密码是 passwd:
1 |
$ ssh root@11.22.33.44 |
输入密码,第一次登录后建立公钥,我们就和成功上到了服务器。
接着要怎么玩呢?什么姿势舒服就怎么玩嘛。
好了,文章到此结束,我回家找女朋友了。
------------我是回家的分界线------------
快递还没到,我先上一下 VPS 玩一玩好了。
快速实战,试手 VPS 迁移
哎呀~ 想起不少人吐槽过我们团队的 博客 打开速度太慢了,都超过了 12 秒,这怎么能忍?
没办法,忍辱负重,我只能趁女朋友还没到之前,快速优化一下(希望 12 秒内可以解决)。
嗯,先分析下博客为什么访问那么慢?
-
服务器在国外,国内连接过去太远了!
-
使用的是 WordPress 程序,安装了不少冗余插件!
-
HTTP 请求数量太多了,就和女生上厕所一样,得排队才能完啊!
-
Google Analytics 等一些服务器已经被墙!
-
用户上传图片太大,没有经过压缩处理!
好吧,那我们就先进行初步的优化。
VPS 数据迁移
服务器搬家到国内,也就是 Linode 别人家搬回自己家腾讯云,得带上老老少少一家人:
-
网站代码
-
Nginx 配置
-
数据库数据
嗯,学到的第一个 linux 终于派上了用场,将这些数据打包:
1 2 3 4 5 6 |
// tar 将文件进行打包 // -c 表示创建归档 // -z 表示使用 gzip 压缩 // -v 表示打包时显示进度 // -f 指定压缩后的文件名,如 all.tar.gz $ tar -czvf all.tar.gz /path/to/sites /path/to/nginx.conf /path/to/database |
好了,数据量不小,打包后的文件非常大,问题就来了,选哪个交通工具呢?
-
wget 或 curl 简单便携
-
ftp 也是简单便携
-
scp 加密传输
-
rsync 增量传输
-
dropbox 中转传输
wget 或 curl 和 ftp 下载的方式很简单。
scp 和 rsync 下载的方式是加密传输,也常用于两个主机之间进行复制文件(需要先建立 ssh 连接)。
scp 使用加密进行传输,可以在两个主机中进行复制:
1 2 3 4 |
// 先登录 A 主机后,将 B 主机 11.22.33.44 上的 /home/data/ 复制到 A 主机下的 /home/data/ // -r 表示遍历复制目录下的所有文件 $ scp -r root@11.22.33.44:/home/data/ /home/data/ // 若为建立 ssh 连接,则输入后需要输入 A 主机的登录密码 |
rsync 传输也加密,但能将文件夹、文件等的权限等信息也保存下来,采用流式传输,同时是一种增量备份的算法在支持,效率较高:
1 2 3 4 5 6 7 |
// 先登录 A 主机后,将 B 主机 11.22.33.44 上的 /home/data/ 复制到 A 主机下的 /home/data/ // -a 表示使用归档模式,保持所有文件属性 // -v 表示显示传输进度 // -r 表示遍历复制目录下的所有文件 // -z 表示进行压缩处理 // -e 指定一些端口信息 $ rsync -avrz |