安裝開發環境一直是個麻煩的問題,因此使用 Vagrant 來無痛安裝一個乾淨的開發環境,將各個 project 所需要的開發環境獨立出來是目前最好的解決方案了。本篇文章將介紹如何在 OSX 上安裝 Vagrant 並開啓 Ubuntu 12.04 LTS 32-bit 虛擬環境。

Step 1:安裝 VirtualBox

Step 2:安裝 Vagrant

Step 3:開一個資料夾來練習

$ mkdir vagrant-practice
$ cd vagrant-practice

Step 4:初始化虛擬環境

$ vagrant init precise32 http://files.vagrantup.com/precise32.box

Step 5:開啟虛擬環境(此步驟會等待比較久的時間,之後執行則會變快)

$ vagrant up

Step 6:登入虛擬環境

$ vagrant ssh

如此就有一個全新的 Ubuntu 12.04 LTS 32-bit 虛擬環境了!酷!

若想刪除虛擬環境,則執行以下指令:

$ vagrant destroy

使用 Apache2 作為網頁伺服器時,尤其是 PHP Web Application,通常會使用 rewrite rule 來改寫網址,最近開 AWS 上的 Ubuntu 12.04 機器,安裝 Apache2 時 mod_rewrite 預設並非開啓的,所以我們就要自行開啓 mod_rewrite。

指令如下:

$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
service apache2 restart

開啓後,重開 apache2 即可啓用 mod_rewrite。

當我們將 S3 bucket 掛到 EC2 instance 時(詳細設定筆記請見:如何掛載 AWS S3 到 AWS EC2 Instance - 環境安裝部份如何掛載 AWS S3 到 AWS EC2 Instance - 掛載及卸載部份 ),若將 EC2 instance 重開機,S3 bucket 是不會自動掛載上去的,這時我們可以寫一個 Script 加入排程來讓 EC2 instance 重開機能夠自動掛載 S3 bucket。

詳細步驟如下:

Step 1:編寫 automount-s3 的 shell script

$ vim automount-s3

script 內容:

sudo mkdir /mnt/s3-drive
/usr/bin/s3fs <bucketname> <mount-point> -o allow_other

Step 2:將 automount-s3 script 移至 /usr/sbin

$ sudo mv automount-s3 /usr/sbin

Step 3:更改 automount-s3 script 權限

$ sudo chown root:root /usr/sbin/automount-s3
$ sudo chmod +x /usr/sbin/automount-s3

Step 4:將 automount-s3 script 加入 crontab 設定在重新開機時自動執行

$ crontab -e

crontab 內容

@reboot /usr/sbin/automount-s3

完成以上步驟我們就可以讓 EC2 instance 在重新開機時自動掛載 S3 bucket,我們可以實際重新開機測試:

sudo reboot

重新開機後,我們可以用 df -h 來確認是否有自動掛載:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.3G  6.3G  17% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  172K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
s3fs            256T     0  256T   0% /mnt/s3-drive

以上就是如何讓 AWS EC2 Instance 在開機時自動掛載 AWS S3 Bucket 的簡易筆記~

本篇為筆記為如何掛載 AWS S3 到 AWS EC2 Instance 的後續內容,請先閱讀 如何掛載 AWS S3 到 AWS EC2 Instance - 環境安裝部份 後再閱讀本篇筆記。

架構網站服務時,Storage 的規劃也是重要的一環,而 AWS S3 就是一個蠻好的 Storage 服務。

一般常見的做法我們會透過 AWS 提供的 API 來存取 S3 上的檔案,但這樣做並不直覺,而且要通常要將原本存取檔案的程式寫法改成用 S3 API 存取檔案的寫法,有可能會需要修改許多支程式。

所以便有人萌生了將 S3 掛載到 EC2 Instance 的想法,就跟我們買一顆大容量的硬碟裝在電腦上一樣,讓我們的網站服務能夠像在同一部機器存取檔案一樣容易。(其實概念就像我們在實體機器上使用 NFS 來掛載網路硬碟一樣)

掛載細節如下:(請確認已開好 S3 bucket,且開好 IAM user 權限,且完成環境安裝)

Step 1:新增 s3fs passwd 檔案

$ touch /etc/passwd-s3fs

Step 2:編輯 s3fs 檔案

$ vim /etc/passwd-s3fs

Step 3:填入設定 S3 bucket 時的 bucket name 及設定 IAM user 時得到的 access key id、secret access key

bucketName:accessKeyID:secretAccessKey

Step 4:更改 s3fs 檔案權限

$ chmod 640 /etc/passwd-s3fs

Step5:新增 S3 bucket 所要掛載的位置

$ mkdir /mnt/s3-drive

Step6:將 S3 bucket 掛載上去

$ /usr/bin/s3fs <bucket-name> /mnt/s3-drive -o allow_other

當完成上述步驟我們就已經將 S3 bucket 掛載到 EC2 的 /mnt/s3-drive 了 我們可以用 df -h 來確認:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.3G  6.3G  17% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  172K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
s3fs            256T     0  256T   0% /mnt/s3-drive

恭喜!EC2 Instance 多了 256T 的空間了!

若想要卸載 S3 bucket 指令如下:

$ fusermount -u /mnt/s3-drive

以上就是如何掛載 AWS S3 到 AWS EC2 Instance 的簡易筆記~

架構網站服務時,Storage 的規劃也是重要的一環,而 AWS S3 就是一個蠻好的 Storage 服務。

一般常見的做法我們會透過 AWS 提供的 API 來存取 S3 上的檔案,但這樣做並不直覺,而且要通常要將原本存取檔案的程式寫法改成用 S3 API 存取檔案的寫法,有可能會需要修改許多支程式。

所以便有人萌生了將 S3 掛載到 EC2 Instance 的想法,就跟我們買一顆大容量的硬碟裝在電腦上一樣,讓我們的網站服務能夠像在同一部機器存取檔案一樣容易。(其實概念就像我們在實體機器上使用 NFS 來掛載網路硬碟一樣)

環境安裝細節如下:(請確認已開好 S3 bucket,且開好 IAM user 權限)

Step 1:登入 EC2 後使用 sudo 權限

$ sudo -s

Step 2:先更新 apt-get

$ apt-get update

Step 3:安裝必要套件

$ apt-get install make gcc g++ curl libxml2 libxml2-dev libssl-dev libcurl3 libcurl4-gnutls-dev openssl pkg-config

Step 4:進入 /usr/local/src 資料夾

$ cd /usr/local/src

Step 5:下載 fuse

$ wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.9.2/fuse-2.9.2.tar.gz/download -O fuse-2.9.2.tar.gz

Step 6:解壓縮 fuse

$ tar -xzvf fuse-2.9.2.tar.gz

Step 7:進入 fuse-2.9.2 資料夾

$ cd fuse-2.9.2

Step 8:編譯安裝 fuse

$ ./configure --prefix=/usr
$ make
$ make install

Step 9:將 fuse 加入 ubuntu kernel

$ modprobe fuse

Step 10:確認 fuse 是否安裝完成

$ pkg-config --modversion fuse

Step 11:進入 /usr/local/src 資料夾

$ cd /usr/local/src

Step 12:下載 s3fs

$ wget http://s3fs.googlecode.com/files/s3fs-1.71.tar.gz

Step 13:解壓縮 s3fs

$ tar -xzvf s3fs-1.71.tar.gz

Step 14:進入 s3fs-1.71 資料夾

$ cd s3fs-1.71

Step 15:編譯安裝 s3fs

$ ./configure --prefix=/usr
$ make
$ make install

完成以上步驟,就可以在 EC2 的 Ubuntu Instance 安裝好可掛載 S3 的環境,關於掛載及卸載部份請見如何掛載 AWS S3 到 AWS EC2 Instance - 掛載及卸載部份

在實務上我們通常會使用 crontab job 來背景執行一些程式,有時我們會有需要砍掉這些 process 的情況發生,這時我們就需要列出 process 的 process id,並手動將這些 process 砍掉~

以要查閱 apns-task.php 這支 php script 在機器上執行的 process id 為例,指令可以這樣下:

$ ps auxwww|grep apns-task.php|grep -v grep

如此就可以列出正在執行 apns-task.php 這支程式的所有 process:

user 15211 0.0 0.0 4108 604 ? Ss 15:10 0:00 /bin/sh -c php /path-to-your-script/apns-task.php
user 15213 50.0 0.0 211584 28124 ? R 15:10 0:00 php /path-to-your-script/apns-task.php

如輸出結果所見,現在有兩個 process 15211 及 15213 正在執行 apns-task.php 這支程式,如果要刪除 process 15211,指令就可以這樣下:

$ kill 15211

以上就是如何列出正在執行的 PHP script process 的簡易筆記~

ice dog

這次日本行回來最難忘的美食第一名就是這個來自大阪的 Ice Dog,一直到現在我看著這張圖片還是會想起它美妙的滋味,那種滋味好難形容啊~ 一個小小的甜品卻能讓我如此難忘甚至把我變成愛吃甜點的少女,我想這應該是一種靈異現象吧!

其實在嚐到 Ice Dog 之前,我們已經走了好多個台灣部落格推薦的美食,就像流言終結者一樣,有的真的是美食,但也有蠻多雷的,其中章魚小丸子就是大雷,咬下去像是吃到空氣一樣,然後也沒有章魚,真的很不優,一大堆台灣人吃到都直接用台語幹譙起來(日本真的到處是台灣人),所以在咬下 Ice Dog 之前我是一直保持著不期不待不受傷害的心態。

沒想到第一口吃下 Ice Dog 整個人都快被融化了!驚為天人啊!

以後我吃不到怎麼辦呀!

炸得酥脆裹著糖粉的麵包中間夾著日本排名第一的六甲牧場冰淇淋,冰與火的衝突感在口中爆發,卻有種絕妙的搭配口感,讓人感到異常順口!吃完第一個 Ice Dog 之後,由於意猶未盡又忍不住加點了一個來吃,回頭看看後面進來的兩個日本妹,居然也跟我一樣加點了第二個 Ice Dog 來吃,簡直像是中了毒癮一樣。

如果可以的話我真的蠻想在台灣開一間賣 Ice Dog 分店,應該會大賣吧!有沒有人有興趣來合夥開一間台灣的 Ice Dog 呢?哈哈~

ice dog
元祖 Ice Dog 海報,現在已經漲價到 350 日元了

ice dog
元祖 Ice Dog 店面

ice dog
元祖 Ice Dog 店內一景

圖片取自於 Google 搜尋,絕無意侵犯智財權。若有侵犯請告知,我會馬上刪除,感謝!

Fukuball

我是林志傑,網路上常用的名字是 Fukuball。我使用 PHP 及 Python,對機器學習及區塊鏈技術感到興趣。 https://www.fukuball.com

Co-Founder / Head of Engineering at OurSong

Taipei, Taiwan