腾讯云服务器迁移到Vultr

本文共有13684个字,关键词:迁移vultr

首发地址:腾讯云服务器迁移到Vultr-fengxianqi

写在前面

好端端的为什么要迁移?因为已经毕业毕业毕业了。。。几天前腾讯云就发信息告诉我学生身份已过期,心里拔凉拔凉的。然后这几天云服务器也要到期了,已经拿不到64元的优惠券了,再也回不到那1元一个月的日子了。但是65元/月的最低配费用着实感觉有点贵,所以决定还是去找个实惠点服务器或vps(对不起腾讯云了。。)。不过不得不说,在这里要感谢一下腾讯云这两年的支持,1元/月的服务器(现在已经是10元/月)我用了2年多,学习到了很多Linux相关的知识,折腾了很多东西,给学生提供了这么实惠的机会,真的很良心,衷心感谢。

目标

我这里迁移主要是根据我目前服务器已搭建过的服务,重新整理一遍,相当于复制一份出来,还好以前有些记录可以参考,希望这个记录流程对大家有所帮助和启发。

  • 购买新服务器
  • 安装bbr加速
  • 设置并开启防火墙
  • 搭建LNMP
  • 搭建和迁移Git服务器
  • 迁移typecho博客
  • 搭建node服务环境

购买新服务器

服务器选择有很多,国内的腾讯云、阿里云、百度云,美团云、美橙云等等,阿里云算是国内一家独大的了,但都价格较贵吧。
国外比较推荐的有:

  • Vultr 1核1G内存1T流量 $5/月,(也有2.5$的套餐,但是没货买不到),新人注册使用Paypal充值10刀送25刀,真的很优惠。。。
  • BandwagonHost(搬瓦工VPS) 1核512M内存500G流量$19.9/年,良心价,我要买的时候没货。。。
  • DigitalOcean 和vultr差不多的价格。
    更多对比请看知乎

我最后选择了Vultr,东京机房,Centos7,速度方面可以访问一下我博客感受下,具体购买流程请看:vultr中文网
购买前先注册一个PayPal账户,绑定银行卡充值10$,就可以领取25$的优惠了(有些银行需要信用卡,有些不用,我最后用建设银行的借记卡可以)。

安装bbr加速

我也是第一次听说这玩意,既然大家都用来提速然后安装也不麻烦,就也安装一下吧,提升一下访问速度也还不错。

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh 
chmod +x bbr.sh  # 我用的时候需要改一下权限
./bbr.sh 

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

uname -r 

我这里输出:4.17.0-1.el7.elrepo.x86_64

sysctl net.ipv4.tcp_available_congestion_control 

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

sysctl net.ipv4.tcp_congestion_control 

返回值:net.ipv4.tcp_congestion_control = bbr

sysctl net.core.default_qdisc 

返回值:net.core.default_qdisc = fq

lsmod | grep bbr 

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

设置并开启防火墙

Vultr的vps其实需要更改两处地方,相当于双层防护,一是Vultr官网控制台的防火墙策略组,默认阻止所有访问。二是系统内默认安装的firewall。需要配置好这两处地方,才能开放端口让你的网站可以被访问。我这里将要开启的是80端口提供Web服务,22端口ssh远程访问。

防火墙策略组开启22和80端口

微信图片_20180618093326.png
点击Add Firewall Group,需要给个描述,随便就好,在IPv4的标签下添加80和22的规则。
微信图片_20180618092751.png
IPV6的模块可以先不管,然后在Linked Instances中绑定当前的vps。
微信图片_20180618093410.png
至此,vps已开启80端口,22端口也是必须的(shell远程登录)。

firewall开启80端口

远程登录到vps,查看firewall防火墙版本。

firewall-cmd --version
# 0.4.4.4

查看firewall防火墙的状态。提示正在运行。

firewall-cmd --state
# running

在firewall中添加80端口的权限。提示成功。

firewall-cmd --zone=public --add-port=80/tcp --permanent
# success

命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
重启防火墙,这里开启80端口即可。

systemctl restart  firewalld

附:firewall其他命令:
启动:# systemctl start firewalld
重启:# systemctl restart firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd –state
停止:# systemctl disable firewalld
禁用:# systemctl stop firewalld

搭建LNMP

LNMP即Linux、Nginx、MySQL(MariaDB)、PHP。由于Centos7的yum源默认是MariaDB,所以我这里选择了MariaDB。

安装Nginx

yum install nginx -y

安装好后启动

systemctl start nginx

然后可以通过ip直接访问,出现Nginx欢迎页面说明Nginx已经安装成功(需要先在前面开启防火墙)。

查看Nginx的版本:

nginx -v
# nginx version: nginx/1.12.2

安装php7和相应扩展

Centos7中默认的php版本比较低,坑爹,为了更好的玩耍需要升级到php7。
检查当前安装的php包

yum list installed | grep php

更换rpm源

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

如果想删除上面安装的包,重新安装

rpm -qa | grep webstatic
rpm -e  上面搜索到的包即可

安装php7及相应的扩展

yum install php70w php70w-fpm php70w-mysql -y

启动php-fpm服务

systemctl start php-fpm

php-fpm的默认配置的监听端口为9000,现在需要修改配置将php解析的请求转发到127.0.0.0:9000处理即可。修改nginx的配置:vi /etc/nginx/nginx.conf

server {
  listen       80;
  root   /usr/share/nginx/html;
  server_name  localhost;

  #charset koi8-r;
  #access_log  /var/log/nginx/log/host.access.log  main;

  location / {
      index  index.html index.htm;
  }

  #error_page  404              /404.html;

  # redirect server error pages to the static page /50x.html
  #
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   /usr/share/nginx/html;
  }

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  location ~ \.php$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index   index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
  }
}

主要是添加下面location ~ \.php$ 部分。修改好了后重启nginx:systemctl restart nginx

安装MariaDB

Centos默认的MariaDB也是比较旧的,也需要升级,参考官方文档
更好rpm源

cat <<EOF | sudo tee -a /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

yum安装

yum install MariaDB-server MariaDB-client -y

启动mariadb并设置开机自动启动

systemctl start mariadb.service
systemctl enable mariadb.service

安全配置

/usr/bin/mysql_secure_installation

根据下面的问题回答,我直接拷过来了,英文应该还好理解。

  • Enter current password for root (enter for none): Just press the Enter button
  • Set root password? [Y/n]: Y
  • New password: your-MariaDB-root-password
  • Re-enter new password: your-MariaDB-root-password
  • Remove anonymous users? [Y/n]: Y
  • Disallow root login remotely? [Y/n]: Y
  • Remove test database and access to it? [Y/n]: Y
  • Reload privilege tables now? [Y/n]: Y

至此,LNMP搭建完毕。

搭建和迁移Git服务器

一、 安装最新版的Git

yum源仓库的版本是1.8.3.1,为了安装最新版的git,要通过编译安装。

  1. 查看yum源仓库的git信息
yum info git
  1. 依赖库安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install  gcc perl-ExtUtils-MakeMaker
  1. 卸载低版本的Git
yum remove git
  1. 下载新版的Git源码包,可以到git的官方仓库中找到下载链接(在对应版本的tar.gz标识右键复制链接即可):https://github.com/git/git/releases
    如我现在的最新版是2.17.1。
wget https://github.com/git/git/archive/v2.17.1.tar.gz
  1. 解压到指定目录
tar -xzvf v2.17.1.tar.gz -C ~/app/
  1. 安装Git
cd git-2.17.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
  1. 添加到环境变量
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc # 实时生效
  1. 查看版本号
git --version
# git version 2.17.1

二、 搭建Git服务器

  1. 创建一个git用户用来运行git服务
sudo adduser git

这里可以为git设置一个用户密码,passwd git,当用户不是通过ssh来clone仓库时可以通过输入密码的方式。

  1. 选定一个目录作为git仓库,如:/srv/git,在//srv/git目录下建立一个sample.git仓库
sudo git init --bare sample.git
  1. 把ouner改为git
sudo chown -R git:git sample.git
  1. 安全考虑,禁用git用户shell登录
vi /etc/passwd

将类似git:x:1001:1001:,,,:/home/git:/bin/bash改为git:x:1001:1001:,,,:/home/git:/usr/local/git/bin/git-shell
这里要注意/usr/local/git是之前安装git的路径,/usr/local/git/bin/git-shell这个文件是可以找到的,请根据自己安装的目录配置。通过su git来测试是否成功,提示如下表示配置成功:

# su git
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
  1. 客户端clone仓库
    git服务器已经搭建好了,可以在自己的电脑clone自己的仓库啦,地址如:git@yourIp:/srv/git/sample.git,如:
git clone git@202.186.11.10:/srv/git/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

注意:如果没有把客户端的id_rsa.pub复制到服务器/home/git/.ssh/authorized_keys中,clone时会提示输入密码。

迁移git仓库

这里的迁移是要保留历史的commit,原有的项目除了地址其他都不变。

  1. 将原来的仓库以镜像的方式备份下来
git clone --bare git://192.168.10.XX/git_repo/project_name.git
  1. 在新服务器初始化同名的仓库
git init --bare project_name.git
  1. 在本地以镜像推送的方式上传代码到新服务器地址
cd project_name.git
git push --mirror git@192.168.20.XX/path/to/path/new_project_name.git
  1. 删除本地原来的工作区代码,重新clone代码即可
git clone git@192.168.20.XX/path/to/path/new_project_name.git

迁移typecho博客

  1. 备份数据库
mysqldump -h host -u root -p dbname >dbname_backup.sql

其实上面命令我没用过,我是在phpMyAdmin上直接导出的。。。反正能弄到typecho这个库的.sql备份就行了,方式随便。。

  1. 在新服务器上还原数据库
    先将前面备份的文件backup.sql发送到服务器,登录到mysql
mysql -uroot -p

分别执行下面命令,创建一个存放typecho的数据库,use 数据库,执行还原

create database typecho;
use typecho;
source ~/backup.sql

查看是否导入成功,如果表都有说明成功。

show tables;
  1. 拷贝typecho目录文件到新服务器
    可以通过FileZilla等工具拷贝文件到服务器对应目录下,这里教大家一个Linux下同步文件的命令:rsync,可以自行搜索用法。
rsync -azcuP --chmod=ugo=rwX ./typecho/  "192.168.0.10:/srv/typecho"

这个命令的意思上,将本地/typecho这个目录下所有文件发送到192.168.0.10服务器下的/srv/typecho目录下。
注意: 拷贝后需要改config.inc.php中的数据库连接方式(如果数据库密码变了的话)

  1. 配置nginx站点
    新建一个nginx的配置文件,vi /etc/nginx/conf.d/typecho.conf,填入以下内容,注意注释内容根据自己情况而定
server {
    listen       80;
    server_name fengxianqi.com www.fengxianqi.com; # 域名,需要提前解析到服务器

    location / {
        root   /srv/typecho; # typecho目录文件所在目录
        index  index.html index.php;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        root           /srv/typecho; # typecho目录文件所在目录
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

:wq保存退出,以后如果再新增一个网站a,同样只需要在/etc/nginx/conf.d下新建一个a.conf即可,重启nginx即可访问网站啦

systemctl restart nginx

遇到问题:打开Typecho博客时发现无法链接数据库,Database Error

搜索了很久,对php不熟悉,后来才知道是没有开启php的mysql扩展,vi /etc/php.ini,在文件的末尾添加

extension=mysqli.d

然后重启php`systemctl restart php-fpm即可。`

搭建node服务环境

  1. 安装最新版的node
    在官网https://nodejs.org/en/download/找到最新版链接,下载并解压
wget http://nodejs.org/dist/v0.10.24/node-v8.11.3.tar.gz
tar zxvf node-v8.11.3.tar.gz
  1. 编译安装
cd node-v8.11.3
./configure --prefix=/usr/local/node/8.11.3
make
make install
  1. 配置NODE_HOME,进入profile编辑环境变量,vi /etc/profile
    设置nodejs环境变量,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:
#set for nodejs
export NODE_HOME=/usr/local/node/8.11.3
export PATH=$NODE_HOME/bin:$PATH

:wq保存并退出,编译/etc/profile 使配置生效

source /etc/profile

node -v验证是否成功。

  1. 安装pm2模块保持node程序运行
    为了退出服务器,node服务依然可以在后台运行,需要用到forever或pm2等模块来支持,以前用过forever,后来发现pm2更好用,支持高亮,所以这次用pm2,安装pm2
npm install -g pm2

pm2安装好后,会自动创建下面目录.

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs will contain all applications logs
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration
    pm2常用命令
pm2 start app.js              # 启动app.js应用程序
pm2 start app.js -i 4         # cluster mode 模式启动4个app.js的应用实例     # 4个应用程序会自动进行负载均衡
pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
pm2 start app.js --watch      # 当文件变化时自动重启应用
pm2 start script.sh           # 启动 bash 脚本
pm2 list                      # 列表 PM2 启动的所有的应用程序
pm2 monit                     # 显示每个应用程序的CPU和内存占用情况
pm2 show [app-name]           # 显示应用程序的所有信息
pm2 logs                      # 显示所有应用程序的日志
pm2 logs [app-name]           # 显示指定应用程序的日志
pm2 flush
pm2 stop all                  # 停止所有的应用程序
pm2 stop 0                    # 停止 id为 0的指定应用程序
pm2 restart all               # 重启所有应用
pm2 reload all                # 重启 cluster mode下的所有应用
pm2 gracefulReload all        # Graceful reload all apps in cluster mode
pm2 delete all                # 关闭并删除所有应用
pm2 delete 0                  # 删除指定应用 id 0
pm2 scale api 10              # 把名字叫api的应用扩展到10个实例
pm2 reset [app-name]          # 重置重启数量
pm2 startup                   # 创建开机自启动命令
pm2 save                      # 保存当前应用列表
pm2 resurrect                 # 重新加载保存的应用列表
pm2 update                    # Save processes, kill PM2 and restore processes
pm2 generate                  # Generate a sample json configuration file
pm2 deploy app.json prod setup    # Setup "prod" remote server
pm2 deploy app.json prod          # Update "prod" remote server
pm2 deploy app.json prod revert 2 # Revert "prod" remote server by 2
pm2 module:generate [name]    # Generate sample module with name [name]
pm2 install pm2-logrotate     # Install module (here a log rotation system)
pm2 uninstall pm2-logrotate   # Uninstall module
pm2 publish                   # Increment version, git push and npm publish
  1. 使用nginx代理node搭建的网站
    这个我以前有做过笔记,请直接参考:部署Nodejs服务器并绑定域名

写在最后

能从头看到这里同学也是不容易了,服务器迁移整个过程我慢慢来大概用了一天半,有很多不熟悉的都是面向搜索引擎,但是这篇文章拖拖拉拉断断续续写了一个多星期,后面自己都忘了一些东西,写到自己都想吐了。。。最后的最后,只想说:mmp我再也不要写这么长的文章了。。

部分参考链接:
Vultr中文网
vultr的VPS安装BBR
CentOS 7 安装最新的 Git
How to Install MariaDB 10.1 on CentOS 7
VULTR的VPS在centos 7.3的操作系统中出现网站无法访问
Vultr云主机中启用防火墙和添加安全组教程
node安装教程

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

fengxianqi

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
仅有一条评论
  1. Lin:

    初學,感謝你的文章貢獻!