タイトル

Need for Answer

2015年2月10日火曜日

EMLauncherのダウンロードURLの期限をメンテナンスするのまき

EMLauncher使ってますか!Testfrightが終了する今、EMLauncherはベータテスターにとって救世主のような存在ですね!

…EMLauncherの機能に、「QRコードでリンク先URLを共有」という機能があります。これはEMLauncherにログインできない人でも、ダウンロード先URLを共有出来るという便利な機能です。

なのですが、このURLって期間限定なんですよね。期間限定なのはいいんですが、期限を設定する方法がないんです!

ということでソースを直接修正しましょうということです。該当箇所はこちら。

        const URL_EXPIRE = 86400; ///< link_idの有効時間

2015年1月25日日曜日

figでudpを指定したいのまき

fig使ってますか!Docker使うのにとっても便利ですよね!

…fig.yml書いてると出る疑問は、「udpってどうやってポート指定するの?」ってことだと思います!
実は簡単で、portの後ろに書くだけです。

ports:
 - "3000"
 - "24224:24224/tcp"
 - "24224:24224/udp"

2014年12月19日金曜日

gateがvHost対応したのでテンプレ的なコンフィグ作ってみた

gate使ってますか!
自サイトにお手軽にgoogle認証を組み込めるという、夢のプロダクトです!

Ver0.4でついにvhost対応されました。これで『トップディレクトリからのパスを変更すると動かなくなるプロダクト』でも問題なく動かせるようになりました!ヤッタネ!

…ということで、コンフィグのテンプレ的なものを作ってみました。

#==========================================
# Config for gate
#==========================================
# Gate の待ち受けポート
# Forwardポートは最下部で設定
address: :8888

#==========================================
# ssl keys (optional)
#==========================================
# ssl:
#   cert: ./ssl/ssl.cer
#   key: ./ssl/ssl.key

#==========================================
# 認証
#------------------------------------------
# Github または google認証
#==========================================
auth:
  session:
    # authentication key for cookie store
    key: secret456
    cookie_domain: hoge.com

  info:
    # oauth2 provider name (`google` or `github`)
    # google または github
    service: google

    # your app keys for the service
    client_id: [googleAPI_ID]
    client_secret: [googleAPI_secret] 
    # your app redirect_url for the service:
    # if the service is Google, path is always "/oauth2callback"
    redirect_url: http://hogehoge.hoge.com/oauth2callback

   #--------------------------------------
   # 制限ユーザー
   #--------------------------------------
   # restrict user request. (optional)
   # restrictions:
   #  - hoge.com    # domain of your Google App (Google)
   #  - @gmail.com # specific email address (same as above)
   #  - your_company_org  # organization name (GitHub)

#==========================================
# document root for static files
#==========================================
htdocs: ./htdocs

#==========================================
# proxy 設定
#==========================================
proxy:
  - path: /
    host: hogehoge.hoge.com
    dest: http://127.0.0.1:8080

2014年12月4日木曜日

ELB配下にあるDjangoにリクエストプロトコルを判断させたい

ELB配下にあるEC2にプロトコルを渡したい、そんなこと有りますよね!
何が困ってそんなことをって話なのですが、下記2点に該当する人だと思います。

  1. ELBにSSLアクセラレーションさせてる(HTTPS→HTTP変換)
  2. EC2にApache→Djangoを使ってる
で詳細な問題って何?な話なのですが、「ELBが渡してくるリクエストヘッダと、Djangoが解釈するリクエストヘッダが微妙に違う」ってことです。ちなみにこんなかんじです。

  • ELBが送るリクエストヘッダ → X-Forwarded-Proto:https
  • Djangoが解釈したいリクエストヘッダ → X-Forwarded-Protocol:https

なので、「リクエストヘッダの内容を判断して、Djangoに送るヘッダを書き換えよう」ってのが具体的なアクションになります。

という事で、Apacheのconfigを作ってみました。


#
# for Django
#
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
SetEnvIf X-Forwarded-Proto https PROTO_HTTPS
RequestHeader set X-Forwarded-Protocol "https" env=PROTO_HTTPS

2014年11月28日金曜日

AWS-VPCでNATインスタンスを切り替えるのまき

AWS-VPCでNATインスタンス…作ってますか!

NATインスタンスが単一障害点だから…って無言のプレッシャーかけられてるエンジニア、多いと思います!

ということでNATサーバーを切り替えるスクリプト作りました。
NATインスタンスにIAM_Roleを適用してから使うといいと思います!

#!/bin/sh
#======================================================
# NATインスタンスを自分に切り替えるスクリプト
#======================================================
#======================================================
# 概要
#------------------------------------------------------
# 特定のルーティングテーブルのアウトバウンド(0.0.0.0/0)
# を、「シェルを実行しているインスタンス」へ切り替える
# スクリプトです
#======================================================
# つかいかた
#------------------------------------------------------
# 1 - 待機側のインスタンスが、稼働側のインスタンスを死活
#     監視する(実装して下さい)
# 2 - 死亡が確認されたらこのシェルを実行してください
#======================================================
# 前準備
#------------------------------------------------------
# VPC => RouteTable で、「NATサーバーを通過するRouteTableID」
# を調べる。NATインスタンスのいるRouteTableIDではないので
# 注意。下のCHANGE_RTBに記載する
#------------------------------------------------------
CHANGE_RTB="[ここを書き換える]"
#======================================================

# リージョンを宣言 ------------------------------------
export AWS_DEFAULT_REGION=`curl --connect-timeout 3 -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//g'`
MY_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`

echo "================================="
echo " CHANGE RouteTable..."
echo "================================="
echo " Current Setting => " `ec2-describe-route-tables ${CHANGE_RTB} --region ${AWS_DEFAULT_REGION} | grep 0.0.0.0`
echo "---------------------------------"
echo " CHANGE RouteTable => ${CHANGE_RTB} / MyInstance-ID => ${MY_ID}"
echo "---------------------------------"

ec2-replace-route ${CHANGE_RTB} --region ${AWS_DEFAULT_REGION} -i ${MY_ID} -r 0.0.0.0/0

echo " Done!!"
echo " Current Setting => " `ec2-describe-route-tables ${CHANGE_RTB} --region ${AWS_DEFAULT_REGION} | grep 0.0.0.0`
echo "================================="

2014年11月25日火曜日

複数台のサーバーでconfigを同期するだけのスクリプト

複数台のサーバーでconfigを同期する必要…有りますよね!
copyしてからサービスの再起動とかよくやると思うんですよ!

いっつも適当に書くので、メモすることにしました。
とりあえずnginxでやってますが、td-agentとかでもやり方は一緒です。

#!/bin/sh
#==========================================
# Enviroment
#==========================================
# 設定ファイルを送信する先
DEPLOY_SERVER="10.10.xxx.xxx"

# 設定ファイルの入っているディレクトリ
SYNC_DIR="/etc/nginx"

# 設定ファイル編集後に実行するコマンド
RELOAD_CMD="/etc/init.d/nginx reload"

#==========================================
# Config Deploy
#==========================================
# 実行時間計測用
START=`date +%s`

echo "-------------------------------------"
echo " Erase Remote Config Files..."
echo "-------------------------------------"
ssh ${DEPLOY_SERVER} rm -fr ${SYNC_DIR}
ssh ${DEPLOY_SERVER} mkdir ${SYNC_DIR}

echo "-------------------------------------"
echo " Deploy Config Files..."
echo "-------------------------------------"
scp -p -r ${SYNC_DIR}/* root@${DEPLOY_SERVER}:${SYNC_DIR}

echo "-------------------------------------"
echo " Service Reload (Remote)..."
echo "-------------------------------------"
ssh ${DEPLOY_SERVER} ${RELOAD_CMD}

echo "-------------------------------------"
echo " Service Reload (Local)..."
echo "-------------------------------------"
${RELOAD_CMD}

# 実行時間計測用
END=`date +%s`
SS=`expr ${END} - ${START}`
HH=`expr ${SS} / 3600`
SS=`expr ${SS} % 3600`
MM=`expr ${SS} / 60`
SS=`expr ${SS} % 60`

echo "-------------------------------------"
echo " F I N I S H ! !"
echo "-------------------------------------"
echo " Exec Time => ${HH}:${MM}:${SS}"
echo "-------------------------------------"

2014年11月24日月曜日

ELBからのヘルスチェックは適当に200を返そう

Elastic Load Balancing(ELB)便利ですね!ELBの後ろにnginxを置いてる人、多いと思います!

…なのですが、ELBのHTTPヘルスチェックのためにファイルを置くのめんどくさい!ELBにはHTTPで応答できるかだけ監視して欲しいってこと…あると思います!

ということでこんな設定でどうでしょうか!

map $http_user_agent $bot {
  default                  0;
  ~*(ELB-HealthChecker)    1;
}

server {
    if ($bot = 1) {
      return 200;
    }
}