2012年6月18日 星期一

[野人獻曝] 在EC2多掛一塊檔案空間

因為我的micro EC2才小小一塊10G空間,
然後被我拿去當畜生機堆著抓到的檔案......
所以我要準備一塊比較大的空間來放檔案。

幸好AWS真是方便(又云會騙錢),
只要新開一個Volume就可以擁有一塊空間放檔案。

那基本上本文就是稍微為這次行動留個記錄兼教學。

首先請進到AWS Console的EC2部分,
然後再選擇「Elastic Block Store」下的Volumes,
你會看到如圖一的列表,
這是所有的EBS空間。
接著再依圖二指示,選擇Create Volumes,
會出現如圖三的視窗,
基本上由於是要開來做儲存用的,
所以只要輸入空間大小即可。
輸入完成後就會如圖四一樣,
有一塊可用的空間了。

圖一:ebs列表

圖二:選擇Create Volume

圖三:輸入所需空間
圖四:新增完成了
不過這只是把空間開好,實際上這塊空間並沒有掛上你的機器上,
所以接下來要把它掛到你目前的EC2上,
如圖五所示,點擊後會出現如圖六的視窗,
Instances選擇需要掛的機器,至於Devices這個欄位請先記下來,
待會需要進SSH做設定。
總之,到這裡web介面的部份就完成了。

圖五:準備掛到機器上囉
圖六:注意highlight的地方
接下來請登入你的SSH,
然後輸入以下指令:
sudo mkfs.ext3 {圖六中的Devices名稱}
這個指令會把這塊空間做類似格式化的動作,
可以直接按「y」繼續進行。
接著請再打開/etc/fstab這個檔案,把以下內容貼上去:
{圖六中的Devices名稱}          {預定要放在哪個目錄下}    ext3    noatime   0     0
由於這個檔案應該是唯讀的,所以請務必使用sudo編輯此檔。
而內容部分中的 {預定要放在哪個目錄下} 代表這塊空間的路徑,
比方說你想要讓他放在自己的家目錄下,
可以輸入  /home/{your_username}/{blockname} 就可以了。
不過為了解說方便,我這裡假設要放在 /home/faryne/another_disk 這樣好了。


步驟完成後,
再下以下指令:
mkdir /home/faryne/another_disk
mount /home/faryne/another_disk
注意一下:以上兩個指令有可能需要使用sudo權限,
請依狀況處理。


以上步驟完成後,
你可以輸入 df -h 看看是不是生效了。
基本上這整個步驟就這樣完成了。
只是你可能還需要對一下那個目錄的所有人一下,
否則你可能會變成動不動就要sudo才能放檔案進去。 
最後結果
 
 
 
 
 

2012年5月17日 星期四

[野人獻曝] 開台新的EC2作台網站主機用吧

一切都是youtube的陰謀......

其實我這篇文章真的是老梗中的老梗,
相信搜尋「開EC2 教學」應該就會有一狗票文章了。
所以我寫這篇的話,會比較著重於新手開新主機會碰到的狀況。
(再更精準地說,是要拿來給自己做筆記用的 :p)

基本上開EC2的流程,
就是以下的項目:

  • 選擇機器的所在地:如果是要做計算資源的話其實也沒差啦.......這對於網站類型會比較有影響。
  • 選擇要用的作業系統,也就是AMI:選擇你要用的AMI檔對之後的用途會有一些影響,比方說,若是你需要架個網站,但你要是選了一個沒有預先包好LAMP的AMI檔時,你就要在啟動主機後,自己安裝那些東西,會有點麻煩(但如果你有要自定編譯安裝的項目時,這一點其實未必需要)。
  • 設定要跑的instance類型:這個嘛......跟錢有關......不過如果是做需要高資源的運算,還是用比較好的instance會比較好。
  • 設定登入用的private key和security groups:private key是未來登入的根據,當然啦,未來是可以改成要輸入帳號密碼才能登入的機制,這點可以去Google一下就行了。至於security groups的部份,則關係服務是否可以正常運作的要素;比方說你開了一個apache,你必須要在security groups設定允許80這個port,才能讓apache運作,MySQL則是3306,而SSH就是22。如果你的某項服務不是用預設的port號時(如apache用8080時),則記得要改。
  • SSH登入主機:要上傳檔案還是管理系統、安裝程式都要用到SSH,所以如果上一步驟沒有設定允許22這個port時,那就是沒辦法登入了。另外要注意一點:一般狀況下,大部分AMI的預設登入帳號是 ec2-user ,但部分AMI檔的預設登入帳號就未必是這樣,比方說 bitnami 開頭的AMI,預設的帳號就是 bitnami,這點可能要多加注意。
嗯......基本上應該是這樣,
剩下的就是考驗自己的 *nix 管理能力了......
之後有機會的話再來說說怎麼拿EC2幹些方便的壞事。

2012年4月2日 星期一

[野人獻曝] 讓你的S3上雲端(CDN的意味)

前因太複雜了,所以暫且不表(懶)。
反正後果就是我開了一個CDN來作吐圖的工作。
至於什麼是CDN,請參閱這裡的說明

而這裡嘛,我假設正在看此文的人都有對AWS的服務有些概念,
所以就直接進入正題了。

要弄出一個CDN,
你首先必須要有一組AWS S3的bucket,
並且已經註冊了AWS Cloudfront,
這樣才能繼續以下的作業。
如果可以的話,順便多弄幾個domain names,
稍後會有機會用到(但非必須)。

以上準備工作完成後,
請打開瀏覽器,登入AWS Management Console,
然後跳到Amazon Cloudfront那一頁後,
再選擇Create Distribution
會跳出以下的視窗。
這個視窗是要指示你的資料來源,
主要分成Amazon S3和你自己的來源,
因為本文是講S3的部份,因此請選擇Amazon S3後,
再選擇放檔案的bucket後按下一步。
(至於那個Download和Streaming目前就不用理會了......我想一般個人是不會有機會作Streaming吧......所以只要選Download就好了)


接著出現的視窗會跟你提示一些設定,
主要就是:

  • 要不要設定多個網域:比方說一個頁面如果用了來自一個網域的多張圖片時,因為瀏覽器的限制會導致所有圖片無法同時被載入。因此設置多個網域對應時,會增進頁面讀取速度。
  • 要不要設定log紀錄:這個嘛......基本上我是沒設定啦,因為我也不會去看那些log。如果你有需要的話可以啟用這個功能?
  • 使用的連線類型:基本上就是選HTTP and HTTPS就好,這個選項同時也會包括HTTPS。如果你的內容僅限使用HTTPS時,請選擇HTTPS Only。
  • 是否啟用:基本上是選Enable啦。不過由於在設定完成後,AWS會先進行一次同步作業,所以你也可以先設定Disable。等到好了以後再開啟他。
  • Comments:啊......就是備註,要填不填隨便你啦。
  • Default Root Object:這東西應該就像是找不到資源時所吐的預設值吧?我是沒設定啦,或許哪位可以踹踹看?

按下Continue後,
就會跳到確認頁。
若是確認沒問題的話,按下完成後就可以了。
然後你的cloudfront就會出現這樣的一項了。

如果你在上一步中並沒有設定CNAMEs時,
那麼Domain Name這一欄就是未來吐資源的網域了,
所以未來都要用 {Domain Name}/{資源路徑} 來吐資料了。
至於Status那欄則是代表同步狀態,
剛設定好時通常會停在InProgress一段時間,
等到Deployed出現後就代表搞定了。
那麼簡單又強大的CDN設定就這樣完成了。

話又說回來了,
如果你在第二步時有設定CNAMEs時,
請到你的DNS Hosting增加CNAME,
對應的是第三張圖中的Domain Name,
過一段時間後就可以開始使用了。

以上就是連猴子都會懂的CDN架設過程,
還請大家多多思考是不是可以用在自己的網站上。

那麼~下次的野人獻曝再見了~(揮手)

你看不到的後記:
是說用這個服務的話,可能要先請各位考量一下荷包深度,
不然月底帳單爆掉就好笑了。

2012年2月22日 星期三

[野人獻曝] Google Picker

昨天空閒時刻在Google API頁面逛著逛著看到Google Picker這個玩意。

仔細看了頁面說明,
Google Picker 這玩意的首頁就直截了當說了:

Google Picker is a "File Open" dialog for the information stored in Google servers.
With Google Picker, your users can select photos, videos, maps, and documents stored in Google servers. The selection is passed back to your web page or web application for further use.
既然他這麼好用,
想當然爾就刺激了我的技術魂,
所以昨天晚上稍微看一下文件後就寫了一個簡單的Sample了。

如果想試玩的話,請往這裡

======以下技術解析一下=====

基本上要用這玩意,實在是非常簡單。

只要先開這兩行:
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load('picker', '1', {'language':'zh-TW'});</script>
這樣就會先把Google Picker的程式碼先引入了。

然後以Google所提供的慣例中所展示的,
他是在頁面loading完後跳出對話框。
但是以我的sample言,
是在每一個連結被點擊時才觸發,
這點要先注意一下。

接著就是寫被觸發後的處理,
基本上都是以 google.picker.PickerBuilder 物件為主,
因此我們可以這麼寫:
var picker = new google.picker.PickerBuilder().addView(google.picker.ViewId.IMAGE_SEARCH).setCallback(callback).build(); 

picker.setVisible(true);
這樣一個選擇對話框就出現了。
這裡要注意一下 addView 這個方法是指定要使用哪種對話框,
以目前而言有圖片搜尋、影片搜尋等,
這個的話請參考文件說明。
setCallback 這個方法則是當使用者按下選取或取消按鍵時要執行的回呼函式,
這個東西會在稍後的講解中說明。
最後則要呼叫一次 build()
這樣整個對話框才會處理完成。

但此時對話框並沒有呈現在你的眼前,
所以還要再呼叫 setVisible(true)
讓對話框變成可視。

OK,對話框產生完成了,
接下來我們要寫方法來處理使用者選取的資料了:
function callback (data) {
  if (data.action === google.picker.Action.CANCEL) { // 使用者按下取消時
    alert("你沒有選取任何東西喔");
    return false;
  }
  for (var i in data.docs) { // data.docs就是使用者選取項目,以一個陣列存放
    // 這裡只用其網址的部份
    alert(data.docs[i].url);
  }
}

怎樣,應該很簡單吧?
相信這應該也能成為各位在幹壞事路上的好工具吧?
那麼就這樣了~下期再見(掰

2012年1月31日 星期二

[野人獻曝] phpQuery的使用簡介

既然要爬資料,有個好用的工具當然是會比較好啦。
正所謂工欲善其事,必先利其器。
所以本次要來介紹一下phpQuery這個玩意。

什麼是phpQuery?從字面上你應該很容易聯想到jQuery
事實上,他就是php版的jQuery,
因此我們可以很簡單地用這個玩意去巡覽HTML元素的內容,
達到我們想爬資料的目的。

事實上,過年期間我在寫爬Android Market資料時,
就是用這個玩意幫我處理掉擷取app資訊的麻煩事。

以下稍微講解一下簡單用法:

在phpQuery的專案網站下載主要的類別檔,這個壓縮黨內只有一個檔案。下載後解壓縮到你要的地方後就可以了。

接著開啟編輯器來寫一段範例程式碼吧:
<?php
// 引入檔案
require '{phpQuery的主檔案}";

/*
這裡是要取得HTML內容的地方,請自行處理
不過為了示範方便,我們假設抓到的東西放在$html這個變數中
*/
$pq = phpQuery::newDocument($html);

// 接著就可以用這種方式找到某個元素內的html內容
$strContent = pq("你要找的元素路徑", $pq)->html();
// 或是某個元素內的屬性
$strContent = pq("你要找的元素路徑", $pq)->attr("某個屬性名稱");
// 也包括某個元素中的文字節點
$strContent = pq("你要找的元素路徑", $pq)->text();

// 最後,為了避免phpQuery吃光記憶體,可以下這行放掉所有已用的記憶體
phpQuery::$documents = array();
?>


以上是簡單利用phpQuery作尋覽的範例,
當然phpQuery也是可以作HTML元素的內容維護,
使用方法與jQuery一樣,
所以這方面可以參考phpQuery的說明文件就好。