首发地址:腾讯云服务器迁移到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端口
点击Add Firewall Group,需要给个描述,随便就好,在IPv4的标签下添加80和22的规则。
IPV6的模块可以先不管,然后在Linked Instances中绑定当前的vps。
至此,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,要通过编译安装。
- 查看yum源仓库的git信息
yum info git
- 依赖库安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
- 卸载低版本的Git
yum remove git
- 下载新版的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
- 解压到指定目录
tar -xzvf v2.17.1.tar.gz -C ~/app/
- 安装Git
cd git-2.17.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
- 添加到环境变量
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc # 实时生效
- 查看版本号
git --version
# git version 2.17.1
二、 搭建Git服务器
- 创建一个git用户用来运行git服务
sudo adduser git
这里可以为git设置一个用户密码,
passwd git
,当用户不是通过ssh来clone仓库时可以通过输入密码的方式。
- 选定一个目录作为git仓库,如:/srv/git,在/
/srv/git
目录下建立一个sample.git仓库
sudo git init --bare sample.git
- 把ouner改为git
sudo chown -R git:git sample.git
- 安全考虑,禁用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.
- 客户端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,原有的项目除了地址其他都不变。
- 将原来的仓库以镜像的方式备份下来
git clone --bare git://192.168.10.XX/git_repo/project_name.git
- 在新服务器初始化同名的仓库
git init --bare project_name.git
- 在本地以镜像推送的方式上传代码到新服务器地址
cd project_name.git
git push --mirror git@192.168.20.XX/path/to/path/new_project_name.git
- 删除本地原来的工作区代码,重新clone代码即可
git clone git@192.168.20.XX/path/to/path/new_project_name.git
迁移typecho博客
- 备份数据库
mysqldump -h host -u root -p dbname >dbname_backup.sql
其实上面命令我没用过,我是在phpMyAdmin上直接导出的。。。反正能弄到typecho这个库的.sql备份就行了,方式随便。。
- 在新服务器上还原数据库
先将前面备份的文件backup.sql发送到服务器,登录到mysql
mysql -uroot -p
分别执行下面命令,创建一个存放typecho的数据库,use 数据库,执行还原
create database typecho;
use typecho;
source ~/backup.sql
查看是否导入成功,如果表都有说明成功。
show tables;
- 拷贝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中的数据库连接方式(如果数据库密码变了的话)
- 配置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服务环境
- 安装最新版的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
- 配置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
验证是否成功。
- 安装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
- 使用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安装教程
「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」
(๑>ڡ<)☆谢谢老板~
使用微信扫描二维码完成支付
初學,感謝你的文章貢獻!