全部文章搬運自個人我的主頁:sheilasun.mehtml
剛剛成功把本身的ghost博客部署到Linode VPS上了,在這裏回顧並順便整理一下從購買域名到部署代碼到服務器的整個過程。前端
萬網或者Godaddy均可以購買,我是在後者購買的。最想要的名字全拼形式的域名已經被註冊掉了,只好隨便選了一個,sheilasun.me,整年收費9.99刀,仍是比較實惠噠。
node
若是VPS買在大陸的話是須要備案的,好比阿里雲的使用須知裏就有說:linux
Tips:大陸地區做爲網站服務器的ECS,必須完成備案接入以後方可經過域名訪問。大陸以外地區暫不須要備案。nginx
爲何我會知道呢?由於以前我就急吼吼地買了一個月阿里雲,看了使用須知才後知後覺還有這回事。。。。。。當時的想法是,我立刻就要看到博客布上去長什麼樣子,等不了了!如今!馬上!因而只好轉去了國外的Linode,由於只有香港和國外的VPS是不須要備案的。
我購買Linode時選的是Fremont的機房,聽說是除了東京機房之外對於國內來講速度最快的了(我買的時候壓根就沒有"東京機房"供選擇),但就目前使用狀況來看仍是以爲偏慢,後面仍是打算備案搬到國內VPS上。web
我選了個最便宜的1024套餐,月付10刀。跟以前買的阿里雲(CPU1核、內存1GB)上海區68的價格差很少,不過建議在阿里雲下單前能夠查查有沒有優惠活動,好比說我就找到了一個九折碼哈哈。npm
咱們都知道,每次咱們訪問一個網頁,在瀏覽器中輸入網址按下回車以後,瀏覽器得先去找DNS(Domain Name System)把域名「翻譯」成ip,而後根據ip向真正的web服務器發出http請求。
關於「輸入網址敲下回車以後發生了什麼事情」這個問題,能夠參考這篇文章在瀏覽器輸入網址,Enter以後發生了什麼?或者觀看這個視頻從URI到頁面展示發生了什麼
Godaddy有本身的DNS服務,可是聽說國內訪問不太穩定,若是買了Linode,能夠改用Linode的DNS服務。具體作法:
Linode端:windows
登錄Linode,進入DNS Manager瀏覽器
點擊"Add a domain zone"服務器
填寫在Godaddy買的域名、email後提交
Godaddy端:
登錄Godaddy,進入name server
將Linode的幾組DNS服務添加進去
這樣就完成DNS和ip的綁定了。
接下來就是操做系統的安裝和運行環境的搭建了。
Linode官方推薦安裝Ubuntu 14.04 LTS,詳細安裝能夠參考官網deploying-an-image,須要注意的是,root密碼必定要記好,以後在本地終端或藉助putty(windows下)用SSH登陸到你的linode時候須要它。
安裝須要一點時間,裝好以後在本地用root登陸試試:
sunjingdeMacBook-Pro:demo sunjing$ ssh root@45.79.97.45 root@45.79.97.45's password: Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 4.0.4-x86_64-linode57 x86_64)
能夠建立一個新用戶testuser,按提示輸入:
root@localhost:~# adduser testuser Adding user `testuser' ... Adding new group `testuser' (1001) ... Adding new user `testuser' (1001) with group `testuser' ... Creating home directory `/home/testuser' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for testuser Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y
這裏分享我遇到的一個問題,我安裝完系統並在本地登陸成功之後,我又把linode重裝了一次,再次在本地用ssh登陸就出問題了,提示錯誤:
...
RSA host key for 45.79.97.45 has changed and you have requested strict checking.
Host key verification failed.
...
解決辦法:
執行
vi ~/.ssh/known_hosts ... 45.79.97.45 ssh-rsa AAAAB3NzaC1yc2EAAAADAQA...
刪除與主機45.79.97.45 rsa相關的行便可。
sudo apt-get install nodejs
npm也會一併安裝的,不用作單獨安裝了。查看一下node和npm的版本,確認一下安裝是否成功:
root@localhost:/# node -v v0.10.38 root@localhost:/# npm -v 1.4.28
把本地寫好的ghost程序複製到服務器的/var/www目錄下:
scp ghost.zip sheilasun@45.79.97.45:/var/www
解壓以後跑起來瞅瞅:
sheilasun@localhost:/var/www$ unzip ghost.zip sheilasun@localhost:/var/www/ghost$ node index.js Ghost is running in development... Listening on 127.0.0.1:2368
看起來仍是挺正常的。可是一旦訪問時觸發了代碼裏的隱含bug,網站就掛了,它沒有自動重啓功能,因此咱們用forever來守護進程。
npm install -g forever
用forever的好處是,用forever來啓動node子進程,它會監控其運行狀況,當你的程序崩潰了以後,它會幫你從新啓動。
生產環境下用forever啓動:
sheilasun@localhost:/var/www$ NODE_ENV=production forever start index.js 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: index.js
查看一下forever進程:
sheilasun@localhost:/var/www$ forever list info: Forever processes running data: uid command script forever pid id logfile uptime data: [2] QNdW /usr/bin/nodejs index.js 918 923 /home/sheilasun/.forever/QNdW.log 0:0:2:27.978
咱們手動把進程殺死,forever立刻又會啓動它:
sheilasun@localhost:/var/www$ kill -9 923 sheilasun@localhost:/var/www$ forever list info: Forever processes running data: uid command script forever pid id logfile uptime data: [2] QNdW /usr/bin/nodejs index.js 918 931 /home/sheilasun/.forever/QNdW.log 0:0:0:3.411
這樣就能夠放心地把程序跑在服務器上啦。
如今已經能夠用域名加端口訪問到網站了,可是加了端口以後網址看上去一點也不簡潔,怪討厭的,若是把咱們的ghost程序跑在80端口呢?那就能夠直接用域名訪問了,由於80是默認端口嘛。可是這一臺服務器又不只是跑這一個ghost博客的,假如這臺機子上還有一個microblog網站,咱們仍然但願網址能夠簡潔些,訪問http://microblog.me 的時候進入這個網站,那就須要microblog也跑在80端口,顯然不行,由於80端口已經被ghost博客程序霸佔了。這個時候,就能夠用nginx在前端作反向代理解決這個問題了。
執行:
sudo apt-get install nginx
在具體的配置以前,須要先簡單瞭解一下linux中的軟鏈接和硬鏈接的概念,詳細地瞭解可參考linux軟鏈接硬鏈接概念區別。
首先看一下它們的定義:
硬鏈接:
The specific location of physical data.
軟鏈接:
A symbolic path indicating the abstract location of another file.
在linux中,每一個文件都會被分配一個inode(索引節點號),系統經過這個inode來定位每一個文件。
經過硬鏈接(hard link),可讓多個文件名指向同一個inode,硬鏈接和原文件對應的是同一個inode。用ln命令建立硬鏈接:
ln originfile hardlinkfile
若是有爲一個文件建立硬鏈接的話,只有刪除了這個原文件以及其全部相關硬鏈接,這個文件纔會被真正刪除。
軟鏈接(Symbolic Link, Soft link)則相似於Windows中的快捷方式,它的inode與原文件不一樣,可是內部包含了原文件的位置信息。經過它能夠訪問到原文件,可是它的刪除與否不會影響到原文件。用ln -s 命令建立軟鏈接:
ln -s originfile softlinkfile
簡單瞭解了這兩個概念,下面來作nginx的配置。
nginx安裝完後,它的配置文件在/etc/nginx/nginx.conf,打開來瞅瞅:
sheilasun@localhost:/etc/nginx$ cat nginx.conf ... http { ... include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } ...
能夠發現,在http部分底部有一行
include /etc/nginx/sites-enabled/*;
因此nginx.conf裏包含了全部sites-enabled下的文件,而同時sites-enabled是鏈接到sites-available的。這種方式能夠方便保存和應用不一樣站點的配置。能夠爲你全部的站點(在用的、停用的)各保存一個配置文件放在sites-available下,想啓用某個站點配置,就在sites-enabled下爲其建立一個軟鏈接到sites-available,這樣這個站點的配置內容就進入nginx.conf了,想停用了,就把這個軟鏈接刪除。
咱們在sites-available下建立一個ghost的配置文件
sudo vi /etc/nginx/sites-available/ghost
拷入如下內容:
server { listen 0.0.0.0:80; server_name sheilasun.me; access_log /var/log/nginx/sheilasun.me.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:2368; proxy_redirect off; } }
建立軟鏈接:
ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost
這段配置的做用是監聽sheilasun.me 80端口的請求,並將它轉發給http://127.0.0.1:2368 處理,也就是咱們的ghost程序。這樣咱們只要訪問http://sheilasun.me 就能夠打開ghost博客了。同理,咱們能夠再配置一個 /etc/nginx/sites-available/microblog 文件,在其中配置http://microblog.me 80端口的請求轉發給http://127.0.0.1:3000處理。
最後,重啓一下nginx,讓配置生效:
sudo service nginx restart
至此,Ghost就部署上啦,若有錯誤或不當之處,歡迎你們指正!
歡迎戳→http://sheilasun.me/