前言:這是一篇教你如何在阿里雲的ECS CentOS 7服務器上搭建一個我的博客的教程,教程比較基礎,筆者儘量比較詳細的把每一步都羅列下來,包括所需軟件的下載安裝和域名的綁定,筆者在此以前對Linux系統也是瞭解甚少,經過這個過程,自感學到不少東西,我喜歡用文字整理而且分享,也但願所以交到更多的朋友,可能如下教程存在不少描述不清或者措辭不當的地方,還請資深人士給予指出。即便你是小白,也不要緊,一步一步按照教程來,可能會遇到一些困難,多百度一下,或者跟我交流,都OK的。在教程以前,你須要對整個流程有一個初步全面的瞭解,主要是安裝的軟件列表和之間的關係。雖然這個教程是基於我本身開發的一個博客程序(前端工程師最好的全棧開發實踐-設計開發屬於本身的nodejs博客)來部署的,應該說除了step5之外,其餘步驟都是通用的。當你用優惠券在阿里雲購買了一個ECS服務器後,你須要選擇一個鏡像做爲系統平臺,支持你的程序運行,我這裏用阿里自帶提供的Cent OS 7,教程也是以CentOS 7爲根本。接着你須要在CentOS平臺上安裝一些軟件去支撐你的博客,這些軟件有如下:javascript
另外你還須要在你的windows系統安裝一個鏈接CentOS上MongoDB數據庫的工具Robomongo用於測試鏈接數據庫和查看數據庫信息,還有一個鏈接遠程ECS服務器的工具,我推薦用MobaXterm。php
這個終端左側有一個目錄樹,你能夠用它像ftp同樣方便的上傳,編輯,下載文件,也支持從windows拖動到目錄下,固然你能夠在右側一直使用命令行,對於敲命令行生疏的朋友是一個幫助。css
鏈接很簡單,依次點擊左上角Session,彈窗左上角點擊SSH,填寫IP地址和用戶名,點擊保存便可,請看下圖:html
安裝有不一樣方式,這裏用我的以爲比較簡單的直接部署
方式:前端
進入相應目錄,下載bin包java
打開MobaXterm終端,通常是進入到/usr/local/src/下node
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)linux
wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
解壓包nginx
等待下載完成以後,在命令行輸入 ls
,或者點擊MobaXterm終端左側目錄樹到當前目錄下,你會看到node-v8.11.3-linux-x64.tar.xz文件,接着用下面的兩行命令將xz文件先解壓成tar文件,再解壓成文件夾。web
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安裝完畢。
這裏仍然用相對最簡單的安裝方式。
下載和解壓
打開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成功啓動後,你在瀏覽器端輸入你的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服務器是能夠訪問的,最新的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
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的端口號去測試是否成功。
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一欄填寫數據庫名和用戶名密碼
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的頁面了。
阿里雲的CentOS7默認是沒有安裝WEB服務器的,基本主流的WEB服務器就是apache和nginx,若是安裝了WEB服務器,80端口默認是打開的,你能夠用netstat -an|grep :80 查看是否安裝了WEB服務器。
在這裏,我推薦用nginx,由於輕量級,比較簡單,具體安裝教程也相對容易,請參考教程http://www.javashuo.com/article/p-nhuwsndd-eo.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程序。