VPS转移记录

原因

Linode有5美元的机器了,内存也比Vultlr大一些,于是决定切换到Linode东京2机房,记录一下全部流程,以供日后参考。

更新:因为一些原因,再次切换

使用了整快硬盘切换,下次无需再部署环境了。

  1. 两台机器同时开启救援模式。
  2. 通过 Lish 进入Linode 系统后,首先修改 root 密码:passwd
  3. 输入 root 密码。
  4. 输入以下命令启动 SSH 服务。

    1
    /etc/init.d/ssh start
  5. 在旧机器上输入命令开始传输硬盘。

    1
    dd if=/dev/sda | ssh root@123.45.67.89 "dd of=/dev/sda"
  6. 传输完毕,重启即可。

配置VPS和一些服务

系统还是习惯了Centos7,也不用来做开发,不打算换成Ubuntu了,不用学太多东西,毕竟也不是从事相关方面工作,专注核心内容吧。所以,以下内容及命令均基于Centos7。

切换内核并开启BBR

阅读这篇博文按照说明进行操作,以下是部分摘抄。

内核升级方法

1
2
3
yum --enablerepo=elrepo-kernel -y install kernel-ml kernel-ml-devel
grub2-set-default 0
/usr/sbin/update-grub

完成后,去Linode后台把内核切换成Grub2,重启即可。

开启并验证BBR

使用root用户登录

1
2
3
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。输入以下命令验证是否成功安装最新内核并开启 TCP BBR:

1
uname -r

查看内核版本,含有 4.9 就表示 OK 了

1
sysctl net.ipv4.tcp_available_congestion_control

返回值一般为:net.ipv4.tcp_available_congestion_control = bbr cubic reno

1
sysctl net.ipv4.tcp_congestion_control

返回值一般为:net.ipv4.tcp_congestion_control = bbr

1
sysctl net.core.default_qdisc

返回值一般为:net.core.default_qdisc = fq

1
lsmod | grep bbr

返回值有 tcp_bbr 模块即说明bbr已启动。

安装SS

阅读这篇博文按照说明进行操作

转移博客

博客是基于静态网页的,整套系统依赖了nginx nodejs hexo git等,因此需要全部搭建好环境。

安装OpenResty(nginx+lua)

新建www用户

准备把博客网站之类的放在这个用户下管理。

1
2
3
adduser www
groupadd www
usermod -G www www

准备工作

1
yum install wget readline-devel pcre-devel openssl-devel gcc curl

下载并安装

打开OpenResty官方下载页面获取最新版的地址,以下具体文件名或路径以本次操作为例。

1
2
3
4
5
wget https://openresty.org/download/openresty-1.11.2.2.tar.gz
tar zxvf openresty-1.11.2.2.tar.gz
cd openresty-1.11.2.2
./configure --user=www --group=www --prefix=/usr/local --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-pcre-jit --with-http_iconv_module -j4 && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

设置服务和开机启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /usr/lib/systemd/system
vi nginx.service
<i><Paste>
[Unit]
Description=Nginx an HTTP and reverse proxy server.
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/nginx
ExecStop=/usr/local/bin/nginx -s stop
ExecReload=/usr/local/bin/nginx -s reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target
</Paste>
<Esc><:><x><Enter>
systemctl enable nginx
systemctl start nginx

安装最新版本的git

这个页面找到最新版地址。

1
2
3
4
5
6
wget https://github.com/git/git/archive/v2.11.1.tar.gz
mv v2.11.1.tar.gz git-v2.11.1.tar.gz
yum remove git
make prefix=/usr/local/git all
make prefix=/usr/local/git install
ln -s /usr/local/git/bin/git /usr/local/bin/git

新建git用户和组

安装nodejs

安装Node Version Manager

1
2
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | NVM_DIR=/usr/local/nvm bash
source ~/.bashrc

安装Node Lts version

1
2
nvm install --lts
nvm use --lts

安装Hexo

1
npm install hexo-cli -g

转移HTTPS证书和DNS ip

先在DNS服务商那里转移ip。
按照这篇文章重新安装lets-encrypt,并申请证书。
添加dhparam。

1
openssl dhparam -out /home/www/dhparam.pem 2048

完毕后转移nginx配置文件按照原路径到新vps下

安装Gogs(A painless self-hosted Git service)

1
2
3
4
5
wget https://dl.gogs.io/gogs_v0.9.141_linux_amd64.tar.gz
tar zxvf gogs_v0.9.141_linux_amd64.tar.gz
mv gogs /usr/local/gogs
cd /usr/local/gogs
./gogs web

创建gogs服务并设置成开机启动

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
30
31
32
vi /usr/lib/systemd/system/gogs.service
<i><Paste>
[Unit]
Description=Gogs (Go Git Service)
After=syslog.target
After=network.target
#After=mysqld.service
#After=postgresql.service
#After=memcached.service
#After=redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
#Type=forking
User=www
Group=www
WorkingDirectory=/usr/local/gogs
ExecStart=/usr/local/gogs/gogs web
Restart=always
Environment=USER=www HOME=/home/www

[Install]
WantedBy=multi-user.target
</Paste>
<Esc><:><x><Enter>
systemctl enable gogs
systemctl start gogs

配置自动部署博客

新建项目并提交

把本地的博客git更换新地址并提交到gogs。

测试并添加githook

先克隆一个用于生成网站的本地仓库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git clone ${REMOTE_REP} ${BLOG_GENERATE_REP}
cd ${BLOG_GENERATE_REP}
npm install hexo --save
npm install hexo-generator-archive --save
npm install hexo-generator-baidu-sitemap --save
npm install hexo-generator-category --save
npm install hexo-generator-index --save
npm install hexo-generator-search --save
npm install hexo-generator-sitemap --save
npm install hexo-generator-tag --save
npm install hexo-pagination --save
npm install hexo-renderer-ejs --save
npm install hexo-renderer-marked --save
npm install hexo-renderer-stylus --save
npm install hexo-server --save

在仓库设置里添加post-receive的钩子。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash -l
unset $(git rev-parse --local-env-vars)
export NVM_DIR="/usr/local/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nvm use --lts
cd ${BLOG_GENERATE_REP}
git pull
hexo clean
hexo g
rm -rf ${PUBLIC_WWW}/*
cp -rf ${GENERATED_PUBLIC}/* ${PUBLIC_WWW}

提交新文件就会更新博客网站了。

结束

完毕撒花~睡觉~