9

腾讯云服务器迁移到Vultr

 3 years ago
source link: https://www.fengxianqi.com/index.php/archives/105/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

腾讯云服务器迁移到Vultr

本文共有13617个字,关键词:迁移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 [email protected]:/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 [email protected]/path/to/path/new_project_name.git
  1. 删除本地原来的工作区代码,重新clone代码即可
git clone [email protected]/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
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安装教程

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK