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