騰訊雲伺服器遷移到Vultr

fengxianqi發表於2018-06-21

首發地址:騰訊雲伺服器遷移到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標識右鍵複製連結即可):github.com/git/git/rel… 如我現在的最新版是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備份就行了,方式隨便。。 2. 在新伺服器上還原資料庫 先將前面備份的檔案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中的資料庫連線方式(如果資料庫密碼變了的話) 4. 配置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安裝教程

相關文章