前言:這是一篇教你如何在阿里雲的ECS CentOS 7服務器上搭建一個個人博客的教程,教程比較基礎,筆者盡可能比較詳細的把每一步都羅列下來,包括所需軟件的下載安裝和域名的綁定,筆者在此之前對Linux系統也是了解甚少,通過這個過程,自感學到很多東西,我喜歡用文字整理並且分享,也希望因此交到更多的朋友,可能以下教程存在很多描述不清或者措辭不當的地方,還請資深人士給予指出。即使你是小白,也沒關系,一步一步按照教程來,可能會遇到一些困難,多百度一下,或者跟我交流,都OK的。在教程之前,你需要對整個流程有一個初步全面的了解,主要是安裝的軟件列表和之間的關系。雖然這個教程是基於我自己開發的一個博客程序(前端工程師最好的全棧開發實踐-設計開發屬於自己的nodejs博客)來部署的,應該說除了step5以外,其他步驟都是通用的。當你用優惠券在阿里雲購買了一個ECS服務器后,你需要選擇一個鏡像作為系統平台,支持你的程序運行,我這里用阿里自帶提供的Cent OS 7,教程也是以CentOS 7為根本。接着你需要在CentOS平台上安裝一些軟件去支撐你的博客,這些軟件有以下:
- WEB服務器(Nginx or Apache)用來做域名綁定和指向,這里是Nginx
- Node.js(支撐你的程序運行)
- MongoDB(數據庫,支撐你的博客數據存儲)
另外你還需要在你的windows系統安裝一個連接CentOS上MongoDB數據庫的工具Robomongo用於測試連接數據庫和查看數據庫信息,還有一個連接遠程ECS服務器的工具,我推薦用MobaXterm。
Step1. 使用MobaXterm終端在windows上連接阿里雲CentOS服務器
這個終端左側有一個目錄樹,你可以用它像ftp一樣方便的上傳,編輯,下載文件,也支持從windows拖動到目錄下,當然你可以在右側一直使用命令行,對於敲命令行生疏的朋友是一個幫助。

連接很簡單,依次點擊左上角Session,彈窗左上角點擊SSH,填寫IP地址和用戶名,點擊保存即可,請看下圖:

Step2. 在CentOS7上安裝Node.js
安裝有不同方式,這里用個人覺得比較簡單的直接部署
方式:
進入相應目錄,下載bin包
打開MobaXterm終端,一般是進入到/usr/local/src/下
cd /usr/local/src/
在https://nodejs.org/en/download/
頁面找到Linux Binaries (x86/x64) ,一般是64bit,右鍵復制鏈接地址(https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz)
wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
解壓包
等待下載完成之后,在命令行輸入 ls
,或者點擊MobaXterm終端左側目錄樹到當前目錄下,你會看到node-v8.11.3-linux-x64.tar.xz文件,接着用下面的兩行命令將xz文件先解壓成tar文件,再解壓成文件夾。
xz -d node-v8.11.3-linux-x64.tar.xz
此時在命令行輸入 ls
,或者點擊MobaXterm終端左側目錄樹到當前目錄下可以看到node-v8.11.3-linux-x64.tar文件,下面解壓tar文件。
tar -xf node-v8.11.3-linux-x64.tar
此時在命令行輸入 ls
,或者點擊MobaXterm終端左側目錄樹到當前目錄下可以看到node-v8.11.3-linux-x64文件夾
部署bin文件
確認node.js的路徑,進入node-v8.11.3-linux-x64文件夾下的bin目錄,cd node-v8.11.3-linux-x64/bin
,輸入pwd
獲取當前node.js路徑,我的是/usr/local/src/node-v8.11.3-linux-x64/bin,然后分別執行下面兩行命令,給node和npm創建軟鏈接,ln指令用於創建關聯(類似Windows的快捷方式)。
ln -s /usr/local/src/node-v8.11.3-linux-x64/bin/node /usr/local/bin/node ln -s /usr/local/src/node-v8.11.3-linux-x64/bin/npm /usr/local/bin/npm
測試
node -v
npm -v
如果軟鏈接關聯成功,輸入以上命令,會輸出響應的版本號,至此,nodejs安裝完畢。
Step3. 在CentOS7上安裝MongoDB
這里仍然用相對最簡單的安裝方式。
下載和解壓
打開https://www.mongodb.com/download-center
,點擊Community Server選項卡,切換到Linux部分,這里的version有很多種版本,我也很困惑該如何選擇,因為我是CentOS 7,后來查了相關資料,選擇了RHEL 7 Linux 64-bit x64,下面是從網上摘抄為什么選擇這個版本的依據資料:
CentOS和rhel最重要的區別是版權問題,redhat 的紅帽圖標是有版權的,CentOS被稱為redhat的社區版,即大家把redhat系統里的所有圖標都換了就成了centos了。再就是redhat是有相應的服務的,也是有些收費的服務,centos沒有。其他都一樣:使用,性能,穩定性。。。。都一樣。
復制下載鏈接https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.0.tgz
,然后進入相應目錄下載:
cd /usr/local/src wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.0.tgz
之后輸入ls
,會看到mongodb-linux-x86_64-rhel70-4.0.0.tgz已經下載完畢,然后解壓文件
tar -zxvf mongodb-linux-x86_64-rhel70-4.0.0.tgz
之后輸入ls
,會看到mongodb-linux-x86_64-rhel70-4.0.0文件夾表示解壓完畢
部署
我們把mongodb直接部署在/usr/local/src/
下面,由於文件夾文字太長,我們修改一下文件夾名稱為mongodb
mv mongodb-linux-x86_64-rhel70-4.0.0 mongodb
上面命令做的事情是在
/usr/local/src
下創建一個mongodb
文件夾,然后把/usr/local/src
下面的mongodb-linux-x86_64-rhel70-4.0.0
文件夾下的內容全部移動到mongodb
下,並刪除mongodb-linux-x86_64-rhel70-4.0.0
文件夾。
創建日志目錄和數據文件目錄
cd /usr/local/src/mongodb/ mkdir -p data/logs mkdir -p data/db
啟動MongoDB有2種方式,一是直接指定配置參數,二是指定配置文件。這里先介紹創建配置文件,如果你熟悉linux的vim命令,可以在命令行編輯,如果不熟悉,可以按照如下的方式,先在你的windows系統桌面上准備一個文件mongodb.conf,填寫下列項:
port=27899 #端口號(默認的端口號是27017,這里修改也是為了安全性) dbpath=/usr/local/src/mongodb/data/db #數據目錄(指向剛才創建的數據文件目錄) logpath=/usr/local/src/mongodb/logs/mongodb.log #日志目錄(指向剛才創建的日志目錄,並指定mongodb.log文件名,系統會自動創建) fork=true #設置后台運行 logappend=true #日志輸出方式(寫日志的模式:設置為true為追加。默認是覆蓋。如果未指定此設置,啟動時MongoDB的將覆蓋現有的日志文件。) auth=true #開啟認證(默認是flase,不需要認證的,這里開啟認證是為了安全性)
然后通過MobaXterm直接拖到/usr/local/src/mongodb/
目錄下。
啟動和終止
進入/usr/local/src/mongodb/bin/
目錄下,啟動MongoDB
cd /usr/local/src/mongodb/bin/ ./mongod --config ../mongodb.conf
如果啟動成功,你會看到以下內容:
2018-07-11T17:45:05.312+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none' about to fork child process, waiting until server is ready for connections. forked process: 12674 child process started successfully, parent exiting
你可以通過ps aux |grep mongodb
命令查看mongodb進程是否開啟
root 12674 1.6 3.6 1084292 69128 ? Sl 17:45 0:01 ./mongod --config ../mongodb.conf root 12705 0.0 0.0 112660 964 pts/0 R+ 17:46 0:00 grep --color=auto mongodb
第一個就是剛剛啟動的進程,12674是進程ID,如果你想終止進程,可以用kill -9 12674
來終止。
進入終端操作數據庫
cd /usr/local/src/mongodb/bin/ ./mongo --port=27899
這里說明一下,因為你的conf配置文件的端口改成了27899,所以這里啟動終端要指定端口號,如果是27017默認端口號,則不需要指定,直接./mongo
就可以進入交互控制台,接着你輸入show dbs
,就會看到以下默認集合:
> show dbs admin 0.000GB config 0.000GB local 0.000GB
假如你在本地的windows環境安裝MongoDB,通常我們測試是否開啟MongoDB的辦法是直接在瀏覽器輸入http://127.0.0.1:27017
去查看,但是linux系統並不方便,我們還可以用一個命令去查看是否開啟:
netstat -anpt|grep 27899 27899是MongoDB的進程端口號
如果正常開啟,你會看下以下的信息,注意這里的ip地址是0.0.0.0,而不是127.0.0.1,這是因為我在mongodb.conf文件里面加了bind_ip = 0.0.0.0
,代表外網也可以連接這個阿里雲的Mongodb,這里牽扯很多內容,具體在下面講。
tcp 0 0 0.0.0.0:27899 0.0.0.0:* LISTEN 12674/./mongod
從外網訪問阿里雲的MongoDB
通常情況下,你的MongoDB成功啟動后,你在瀏覽器端輸入你的ECS服務器的公網IP再加上你自己的MongoDB的端口號(例如:http://47.98.xxx.152:27899),可以看到It looks like you are trying to access MongoDB over HTTP on the native driver port.
信息,如果訪問不到,可能有以下三種情況:
你的阿里雲ECS服務器的安全組沒有設置對外網開放
阿里雲的服務器為了安全,默認的禁止外網訪問,早期的ECS服務器是可以訪問的,最新的centos7+版本沒有開啟安全組,你需要在阿里雲后台的安全組設置規則,具體操作請在阿里雲后台提交工單咨詢,下面是我的咨詢結果,供大家參考。
****** : 服務器IP : 47.98.xxx.152:27899 問題描述 : 我已經安裝了mongodb,並且啟動了,但是我在外網訪問不了47.98.xxx.152:27899,請幫忙排查 2018-07-10 15:20:34 工程師 62134 號 : 您好,我們已經收到您提交的問題,正在為您查看,請稍等 2018-07-10 15:22:29 工程師 62134 號 : 尊敬的客戶您好,根據您的反饋,我們將問題定義如下: [問題總結] 實例名ID :i-bp1ixbos2x1xxxxxxx 客戶端IP地址 : 47.98.xxx.152 出現問題時間段 : 2018-07-10 15:20:34 問題描述 :我已經安裝了mongodb,並且啟動了,但是我在外網訪問不了47.98.xxx.152:27899 接下來,我們將對上述問題進行分析排查,如果針對上述問題定義及范圍有任何疑問,歡迎隨時聯系我們。 [處理意見] 您好: 請您在安全組添加一條允許27017端口的策略。 添加安全組規則請您參考:https://help.aliyun.com/document_detail/25471.html?spm=5176.11065259.1996646101.searchclickresult.5bc177d5XwTU1y
防火牆沒有關閉
systemctl status firewalld 查看防火牆狀態
systemctl start firewalld 開啟防火牆
systemctl stop firewalld 關閉防火牆
以上是CentOS的防火牆命令,你可以輸入systemctl status firewalld
查看防火牆狀態,如果防火牆是關閉的,你會看到下列信息:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) 這里表示防火牆是關閉的狀態 Docs: man:firewalld(1)
如果是開啟狀態,Active一欄是Active: active (running) since Thu 2018-07-12 11:18:45 CST; 2s ago
如果你並不希望關閉防火牆,但是希望仍然能打開MongoDB的端口,你可以單獨開啟MongoDB端口,比如你的MG端口是27899,你可以使用下列命令永久打開這個端口:
firewall-cmd --zone=public --permanent --add-port=27899/tcp; firewall-cmd --reload
成功后會顯示兩個success
[root@frogo2 bin]# firewall-cmd --zone=public --permanent --add-port=27899/tcp; firewall-cmd --reload success success
地方法針對端口,適用所有端口的開啟。如果你想知道你永久打開了哪些端口,你可以通過以下命令:
firewall-cmd --list-ports
MongoDB.conf文件bind_ip
參數應該設置為0.0.0.0
在終端輸入命令行netstat -anpt|grep 27899
,如果顯示的IP地址是127.0.0.1,說明MongoDB端口只對本地開放,需要將MongoDB.conf文件增加bind_ip=0.0.0.0
,表示外網可以訪問本地的MongoDB
port=27899 #端口號(默認的端口號是27017,這里修改也是為了安全性) dbpath=/usr/local/src/mongodb/data/db #數據目錄(指向剛才創建的數據文件目錄) logpath=/usr/local/src/mongodb/logs/mongodb.log #日志目錄(指向剛才創建的日志目錄,並指定mongodb.log文件名,系統會自動創建) fork=true #設置后台運行 logappend=true #日志輸出方式(寫日志的模式:設置為true為追加。默認是覆蓋。如果未指定此設置,啟動時MongoDB的將覆蓋現有的日志文件。) auth=true #開啟認證(默認是flase,不需要認證的,這里開啟認證是為了安全性) bind_ip=0.0.0.0 #對外開放端口(默認是127.0.0.1)
修改完mongodb.conf,先kill -9 掉原先的mongodb進程,然后進入bin目錄,重啟mongodb。
cd /usr/local/src/mongodb/bin/ ./mongod --config ../mongodb.conf
此時在netstat -anpt|grep 27899
會看到IP地址改成了0.0.0.0,然后在瀏覽器端輸入你的ECS服務器的公網IP再加上你自己的MongoDB的端口號去測試是否成功。
Step4.給MongoDB開啟密碼訪問
MongoDB 默認是沒有開啟安全認證的,對於部署在雲上就顯得及其不安全,下面我們為mongodb的admin數據庫創建用戶。
MongoDB數據庫有以下特點:
1,沒有默認管理員賬號,所以要先添加管理員賬號,在開啟權限認證。 2,切換到admin數據庫,添加的賬號才是管理員賬號。 3,用戶只能在用戶所在數據庫登錄,包括管理員賬號。 4,管理員可以管理所有數據庫,但是不能直接管理其他數據庫,要先在admin數據庫認證后才可以。這一點比較特別。
首先cd 到bin目錄:
cd /usr/local/src/mongodb/bin/ ./mongo --port=27899 進入MongoDB交互台,如果是默認是27017,則不需要加上后面的--port參數 在控制台輸入 show dbs 你會看到以下數據庫,blog是你剛才創建的 > show dbs admin 0.000GB blog 0.000GB config 0.000GB local 0.000GB 使用 use admin 切換到admin數據庫 > use admin switched to db admin 使用db.createUser()函數在admin數據庫下創建用戶,老版本的MongodDB是db.addUser()函數,這里注意一下,因為網上很多沒有指明版本 > db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } 我們看到已經成功在admin下創建了一個用戶名為root,密碼為123456的用戶 userAdminAnyDatabase:授予在所有數據庫上管理User的權限-意思是可以在所有的數據庫管理User,但是沒有操作權利,只有你在那個數據庫驗證了User,然后才能去操作數據庫的讀寫。(如果不能白,可以百度MongoDB的role方面知識)
現在我們成功的創建了用戶和密碼,下面請將mongodb.conf文件中的開啟安全認證項修改為true
cd /usr/local/src/mongodb
用vim 命令或者通過MobaXterm終端直接修改文件,文件最后呈現以下樣子
# idae - MongoDB config start # 設置數據文件的存放目錄(根據實際的db文件夾的路徑填寫) dbpath = /usr/local/src/mongodb/data/db # 設置日志文件的存放目錄及其日志文件名(根據實際的logs文件夾的路徑填寫) logpath = /usr/local/src/mongodb/data/logs/mongodb.log # 設置端口號(默認的端口號是 27017) port = 27899 # 設置為以守護進程的方式運行,即在后台運行 fork = true # 日志 logappend=true # 開啟認證 auth = true # 開啟遠程訪問 bind_ip = 0.0.0.0
然后找到MongoDB進程,先kill掉,再重啟
[root@frogo2 mongodb]# ps aux |grep mongodb root 22083 0.2 4.5 1078336 85724 ? SLl Jul19 2:38 ./mongod --config ../mongodb.conf root 23111 0.0 0.0 112660 964 pts/1 R+ 11:07 0:00 grep --color=auto mongodb [root@frogo2 mongodb]# kill -9 22083 [root@frogo2 mongodb]# cd bin [root@frogo2 bin]# ./mongod --config ../mongodb.conf 2018-07-20T11:08:32.841+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none' about to fork child process, waiting until server is ready for connections. forked process: 23115 child process started successfully, parent exiting
然后再次打開MongoDB交互台,使用show dbs命令會報出未驗證的提示:
./mongo --port=27899 進入MongoDB交互台 > show dbs 2018-07-20T11:09:51.770+0800 E QUERY [js] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "command listDatabases requires authentication", "code" : 13, "codeName" : "Unauthorized" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1 shellHelper.show@src/mongo/shell/utils.js:865:19 shellHelper@src/mongo/shell/utils.js:755:15 @(shellhelp2):1:1
我們可以看到結果顯示失敗未驗證,說明我們剛才開啟MongoDB密碼登錄成功,下面我們需要驗證,首先切換到admin數據庫下,也就是說,驗證步驟必須在admin數據庫下面進行
> use admin switched to db admin > show collections Warning: unable to run listCollections, attempting to approximate collection names parsing connectionStatus > db.auth("root","123456") 1 > show dbs admin 0.000GB blog 0.000GB config 0.000GB local 0.000GB
db.auth()函數是驗證方法,可以看到顯示結果1表示成功驗證,這個時候我們再show dbs,就成功顯示了。 這個時候我們就可以對數據庫任意操作了。
現在我們嘗試用Robomongo工具在外部連接MongoDB數據,你需要在Authentication一欄填寫數據庫名和用戶名密碼

Step5.在CentOS7上部署node.js BLOG程序
1.我們把blog文件放在home目錄下,cd 到home下面,clone你的blog代碼到目錄下(或者打開MobaXterm終端左側的目錄樹,把blog拖到home 目錄下)
安裝node依賴包
npm install
修改config.js文件中的數據庫連接
//mongodb配置信息 mongodb: { uri: 'mongodb://root:123456@localhost:27899/blog', options: {} },
運行node app.js
,如果成功,會提示服務已經啟動,端口號:7000
安裝forever守護進程,以保證node可以持續工作。
npm install forever -g 全局安裝
輸入forever
如果報錯bash: forever: command not found
,則需要建立一個軟連接:
找到forever安裝路徑npm list -g --depth 0
[root@frogo2 ~]# npm list -g --depth 0 /usr/local/src/node-v8.11.3-linux-x64/lib ├── forever@0.15.3 └── npm@5.6.0
/usr/local/src/node-v8.11.3-linux-x64/lib/node_modules/forever
就是安裝路徑,你也可以打開MobaXterm終端去查看它的位置,然后使用ln -s
建立軟連接
ln -s /usr/local/src/node-v8.11.3-linux-x64/lib/node_modules/forever/bin/forever /usr/bin/forever
再次輸入forever
就不會報錯command not found
了,下面是forever的命令
//用forever啟動 forever start xxx.js
//重啟 forever restart xxx.js
//查看進程 forever list
//停止 forever stop xxx.js
我們可以用以下命令啟動app.js
cd /home/blog/ forever start app.js
出現以下信息表示成功啟動,這個時候,你關掉了MobaXterm終端也沒關系。
warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms info: Forever processing file: app.js
然后用阿里雲服務器公網的IP+7000端口號,就可以訪問到該blog的頁面了。
Step6.在CentOS7上安裝Nginx服務器並綁定域名到博客
阿里雲的CentOS7默認是沒有安裝WEB服務器的,基本主流的WEB服務器就是apache和nginx,如果安裝了WEB服務器,80端口默認是打開的,你可以用netstat -an|grep :80 查看是否安裝了WEB服務器。
在這里,我推薦用nginx,因為輕量級,比較簡單,具體安裝教程也相對容易,請參考教程https://www.cnblogs.com/jerrypro/p/7062101.html。
安裝完nginx以后進入/usr/local/nginx/sbin/
下執行./nginx
啟動WEB服務,這個時候你輸入阿里雲ECS的公網IP看到粗體Welcome to nginx!字樣信息表示安裝和啟動nginx成功。由於博客的程序端口是7000,而默認web服務器是80,在這里你需要在ngnix的conf文件設置一下代理 ,首先進入到/usr/local/nginx/conf/
目錄下,打開目錄下的ngnix.conf文件,找到server{}代碼塊,在location /{}里面增加proxy_pass http://127.0.0.1:7000;,這個地址是指向blog程序的,另外把你需要綁定的域名寫在server_name 后面,其他的項被注釋的你可以自由配置。
server {
listen 80; #server_name localhost; server_name www.frogo.me;(需要綁定的域名) #root /home/frogo; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://127.0.0.1:7000;(指向7000,就是你node.js博客程序的端口) #root /home/frogo; #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 html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
然后 cd 到/usr/local/nginx/sbin/
下面,執行 nginx -s reload
,即可成效,這個時候剩下最后一件事,就是將你的域名的A記錄綁定到你的ECS服務器的公網IP上面。不久以后,當你訪問域名,即可看到你的blog程序。
作者:frogo
鏈接:https://www.jianshu.com/p/f8b0d088a032
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。