2014年5月10日 星期六

[Linux] AWS RDS + PHPMyAdmin + HTTPS + HTTP Basic authentication @ Ubuntu 14.04

為了配合 AWS RDS 而開始用 mysql-server-5.6 ,就試著用 EC2 + Ubuntu 14.04,安裝 PHPMyAdmin 時,採用的 DB 不是在本機的,而是 RDS 上。雖然我也不常用 PHPMyAdmin ,但為了提供其他人使用,所以就來架設一下 XD

$ sudo apt-get install mysql-client-5.6 php5 apache2 apache2-utils git php5-mysql
$ sudo a2ensite default-ssl.conf
$ sudo php5enmod mcrypt
$ sudo service apache2 restart

$ sudo vim /etc/phpmyadmin/config-db.php
// 在底部新增:
$dbuser='rds_account';
$dbpass='rds_password';
$dbserver='rds_location';

$ sudo vim /etc/phpmyadmin/config.inc.php

// 採用 HTTP Basic authentication
//$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['auth_type'] = 'http';

// ...
// 最底層加上強制 HTTPS
$cfg['ForceSSL'] = true;


如此一來,使用 http://hostname/phpmyadmin 時,就會強制轉成 https://hostname/phpmyadmin,並且會採用 HTTP Basic authentication 機制。

註:不知為何,採用 HTTP Basic authentication 機制時,logout 後再進行 login 時,url後面會帶有 old_usr 資訊時,無法正常登入,所以後來就放棄了 XD

2014年5月7日 星期三

AWS 筆記 - 使用 Amazon EC2 進行 Deploying Web services

稍微把玩 AWS Elastic Load Balancing 跟 Auto Scaling 後,大概有一點粗淺的心得:
  • 開一台機器,如 micro 等級,並設定這台機器關機也不下線,可專門用於製作 AMI
  • EC2 micro 採用 EBS 管理,每一次製作 AMI 會產生新的 EBS snapshot,記得定時去清理
  • 程式碼若是透過 git 管理,可以在 /etc/rc.local 上設定開機自動更新方式,至少 AMI 不是最新程式碼時也還能堪用(但 git server 掛了就...)
  • 如果想要透過 web cgi 更新,記得把 source tree 的 owner 或 group (搭配775方式) 設定 www-data,可以用 sudo -u www-data /tmp/update.sh 進行測試
AWS Elastic Load Balancing:
  • 使用 AWS ELB 時,可以讓多台機器綁定在固定的 DNS Name,記得需要處理一下多台機器進行切換其 Session/Cookie 問題,例如單純的使用情境,可以透過設定 Stickiness: LBCookieStickinessPolicy, expirationPeriod='600' 等方式來應付等
  • 對於有使用 HTTP Authentication 的 web server 而言,因為帳密是一直隨 browser 傳給 web server 的(就像 cookie一樣),所以 ELB 再切換機器時,不會因機器不同台而再次詢問帳密
AWS Auto Scaling:
  • 對 Auto Scaling 而言,預設機器都是關機後就下線,除非改掉預設方式,不然更新系統時 reboot 的結果就是開一台新機器,此外,把 Auto Scaling Group 刪掉等同把機器都下線
  • 透過製作新的 AMI 來取代系統更新時,而原先設定好的 Auto Scaling Launch Config 不能更新採用的 AMI,但可透過新增新的 Launch Config 後,更新 Auto Scaling 設定後,再刪掉舊的 Launch config 等

2014年5月6日 星期二

[Linux] 從 Ubuntu 12.04 / MySQL 5.5 升級到 Ubuntu 14.04 / MySQL 5.6 過程 @ Ubuntu 12.04

由於某台機器接近閒置,原本單純想把 MySQL 5.5 升級到 MySQL 5.6 的,後來看一下 Ubuntu 14.04 裡頭有 MySQL 5.6 可以用,就把它升了。

連續過程:

$ sudo do-release-upgrade -d

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:        14.04

Codename:       trusty

$ service mysql stop

$ sudo apt-get remove mysql-common mysql-server-5.5 mysql-server-core-5.5 mysql-client-5.5 mysql-client-core-5.5
$ sudo apt-get autoremove

$ sudo apt-get install mysql-server-5.6
$ mysql_upgrade -u root -p


更正規的 MySQL 更新方式是要先把 /var/lib/mysql 跟 /etc/mysql 備份起來才行動的,此處因為機器上的服務已經遷移(在其他處有備份),所以就這樣升了。

2014年5月2日 星期五

iOS 開發筆記 - 使用 AdMob 與 IDFA 的處理



查詢 Admob 的 iOS release notes 可知 Admob 6.5.0 (2013/07/16) 時已經有用到 IDFA 了。但很妙地,上回上傳時沒碰到,但這次更新時又會碰到?這次就試著勾選處理了。

如果在一開始上傳 binary 前選 Dose this app use the Advertising Identifier (No) 時,上傳 binary 時,驗證過程會看到類似的訊息:
Improper Advertising Identifier IDFA Usage. Your app contains the Advertising Identifier IDFA API ...
解法在此刻只能遞交一份空專案,接著在 Reject by developer 後,才能再重新填這張單子。

簡言之,在 Admob 而言,就是勾選三項:
  • Does this app use the Advertising Identifier (Yes)
  • Serve advertisements within the app (checked)
  • Limit Ad Tracking setting in iOS (checked)
不過,話說那最後一條真的是背書啊 Orz 亂用第三方 libraries 挺抖的。

2014年4月29日 星期二

AWS 筆記 - Amazon EC2 Auto Scaling 與 Elastic Load Balancing

整體流程:
  1. 建立 My AMI (www-service-auto-scaling-ami)
    • 順便準備一些會提升 CPU 使用率的程式
  2. 建立 ELB 規則 (www-service-auto-scaling-elb)
  3. 建立 Auto Scaling 規則
    • 建立 Launch 機器的規則 (www-service-auto-scaling-launch-conf)
    • 建立 Auto Scaling 規則 (www-service-auto-scaling-group)
      • 建立 新增機器 Alerm 規則 (CPU 平均高於 50%)
      • 建立 減少機器 Alerm 規則 (CPU 平均低於 30%)
首先,建立 My AMI 是因為開機器時要以自己的服務為主



建立 Elastic Load Balancing 規則,因為到時候打算對 ELB 新增機器,而非對 EC2,此外,這時建立 ELB 時,可以不用套用在任何機器上



點選建立 Auto Scaling 規則,但在這之前需要設定 launch 機器規則,例如要挑哪個 AMI 等:












設定 launch 規則後,正式進入 Auto Scaling 規則,這邊主要需設定新增機器、降低使用機器的條件,也可以設定 email notification 通報機器增減訊息等。












當 Auto Scaling Group 設定完後,將會立即依照設定開啟機器(同理刪除 Auto scaling group 也就會把機器都關掉),例如設定為最少2台,那就會馬上開2台出來。接著,可以在 ELB 或 Auto Scaling 頁面觀察機器狀態,其中在後者還能更新開關機器的條件,並且把上執行等。











 

至於如何測試自否自動 Scaling 的部分,此例我是搭配 ELB 測試,對指定網址瀏覽時,除了顯示 /etc/hostname 資訊來測試是否有不同外,還透過 CGI 執行一隻背景程式來讓 CPU 使用率衝到 100% ,透過這樣的做法,即可以觀察 Auto scaling 是否正常運行,亦可翻閱 Auto scaling history 查看更動。

<?php
shell_exec( 'echo "<?php while(1) ; " | php > /dev/null 2>&1 &' );

@date_default_timezone_set("Asia/Taipei");
$current_datetime = @date('Y-m-d H:i:s', @time());
echo "Service @ $current_datetime:".file_get_contents('/etc/hostname')."\n";