跳到主要內容

發表文章

[野人獻曝] 在Google Appengine上佈署Codeigniter

因為最近GAE開放了對PHP的支援,理所當然地我也去申請測試這玩意了(遠望)。 所以本篇文章要來講一下怎麼樣在Google Appengine上佈署Codeigniter。 提示:因為GAE For PHP是採申請制的,所以要有申請過才能用。如果沒申請過,就算照以下步驟作也是沒辦法用的(應該吧)。申請網址: http://gaeforphp.appspot.com/ 以下步驟是在Ubuntu的命令列下執行,如果是用Windows的話,除了敲指令的部分外,基本上都是一樣的!另外以下的操作需要 Google Appengine SDK ,請先自行下載處理。 第一步: 先到Github下載 CodeIgniter-AppEngine 這個專案 wget https://github.com/edwardmp/CodeIgniter-AppEngine/archive/master.zip --no-check-certificate 下載完後解壓縮 unzip master.zip 之後應該會看到一個 CodeIgniter-AppEngine-master 目錄 第二步: 切換到 CodeIgniter-AppEngine-master 目錄,編輯 app.yaml 檔 檔案內容如下,要修改的是用大括號包起來的地方: application: {你的Google AppEngine專案名稱} version: 1 runtime: php api_version: 1 handlers: - url: / script: CodeIgniter_2.1.3/index.php - url: /(.+) script: CodeIgniter_2.1.3/index.php 注意,除了大括號的地方外,其他地方都暫時先不要修改。 修改完存檔離開。 第三步: 利用Google AppEngine SDK把檔案佈署上去 {GAE SDK路徑}/appcfg.py update CodeIgniter-AppEngine-master / 在第一次佈署時會要求你輸入GAE的帳號密碼後才會開始佈署, 之後就不會再問了。 完成佈署後,可以打開瀏覽器,並在網址列輸入GAE專案的專屬網...

[野人獻曝] 在檔案上傳時即時得知進度

以一般的檔案上傳而言, 實在是沒辦法即時得知上傳進度, 使用者只能苦苦癡等網頁顯示一行「檔案已上傳」。 如果只是一個大概幾M的小檔案也就罷了, 以現在的網路速率而言是可以很快就上傳完畢了。 萬一是上百M的呢? 實在很難想像在那邊等的樣子啊...... 所以說呢,能夠瞭解即時上傳進度的東西是非常重要的。 不過在這之前,我一直以為只有像是 SWFUpload 之類的東西才能作這種事。 直到我發現 PHP-pecl 底下有個 uploadprogress 這玩意後, 我才被這玩意給嚇到了。 他的使用步驟很簡單: 確定pecl是不是可用? 利用以下指令安裝uploadprogress pecl install uploadprogress 安裝完畢後,請在你的php.ini加入以下文字載入uploadprogress: extension=uploadprogress.so 重新啟動apache,來隻測試程式看看是不是可以正常運作吧? 範例程式碼在這裡 當以上步驟都完成後就可以開始使用了。

[野人獻曝] 在Ubuntu與PHP下安裝使用MongoDB

MongoDB 是什麼,我就不說了。 所以就直接把安裝和設定的流程寫下來作個紀錄。 先安裝 MongoDB 直接下指令: sudo apt-get install mongodb 這個步驟很無腦,所以就不多說了。 確認機器是否已經安裝php-pear和php5-dev php-pear 一般主機都會安裝,所以就略過不提。 需要安裝php5-dev是因為安裝MongoDB的php函式庫需要透過pecl,而pecl又是放在這裡,所以就得安裝了。 安裝MongoDB的php函式庫 直接下指令: sudo pecl install mongo 在php.ini中加入這一行,這樣PHP才會載入MongoDB的函式庫 extension=mongo.so 啟動apache 如果是在cli模式下執行測試程式,可以略過這步。 來隻測試程式吧 點這裡看原始碼 基本上按照這些步驟就可以先把 MongoDB架起來。 (當然啦,後面還有一堆設定要作......不過本篇文章沒打算講這麼深入就是了) 之後比較熟悉一點的時候再來說明設定好了(倒

[野人獻曝] 用Phantomjs來抓網站圖

嗯,因為某個專案的需要....... (我會跟妳說我其實是要做 anti22k.org 這個專案嗎?) 我又要開始弄網頁截圖的事了。 原本我想取巧, 用以前用過的 html2image 試試看, 不過很糟的是: 我忘記當初是怎麼設定的了Orz 雖然按照網站教學試著去裝,不過似乎不能用。 因此第一個選項立刻放棄! 接著又Google到一個 wkhtmltoimage , 他是wkhtmltopdf下的一個子專案, 看起來好像頗讚。 (因為好像只要解壓縮檔案就能用......) 但是解壓縮後執行又跟我哭么「error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory」, 所以又放棄了...... (其實是不想花時間解.......) 最後找到本文要講的 Phantomjs , 這東西在linux只要解壓縮後, 再搭配一段script就可以對網頁截圖。 實際的使用方法, 這裡有篇中文的文章可以看 , 照著作就可以抓圖了。 不過要注意一下, 如果抓的網頁不是單純英文字的話, (就是有中日韓文等文字時......) 要確認系統上有沒有安裝相應的字型, 否則抓出來的圖可能就是一堆方塊。 另外網頁編碼也需要注意一下, 如果不是utf-8的話,可能會碰到亂碼的問題。 如果是對岸gb編碼的話,只要有安裝相應的簡體中文字型應該是可以正常顯示。

[野人獻曝] 在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} 就可以了。 不過為了解說方便,我這裡假設要放在...

[野人獻曝] 開台新的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幹些方便的壞事。

[野人獻曝] 讓你的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後, 就會跳到確認頁。 若是確認沒問題的話,按下完成後就可以了。 然後...