読者です 読者をやめる 読者になる 読者になる

三蔵開発メモ

iOS、Androidアプリ開発、WEB開発、AWS等の話題を共有していきます。

apacheでつくる503メンテページ

環境:AmazonLinux(CentOS6でも下記やり方できます)
すべてrootユーザーで作業

apacheインストール

sudo yum install httpd

メンテナンスページ作成

vi /var/www/html/maintenance.html
-------------------
now maintenance
-------------------

mod_rewrite.htaccess許可

vi /etc/httpd/conf/httpd.conf
-------------------------------------------------
<Directory "/var/www/html">

Options -Indexes FollowSymLinks

AllowOverride All
Order allow,deny
Allow from all

</Directory>

LoadModule rewrite_module modules/mod_rewrite.so
-------------------------------------------------

.htaccess設定

vi /var/www/html/.htaccess
-------------------------------------------------
ErrorDocument 503 /maintenance.html

RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
#RewriteCond %{REMOTE_ADDR} =IPアドレス
RewriteRule ^.*$ - [R=503,L]
-------------------------------------------------
sudo service httpd start
sudo chkconfig httpd on

IPアドレスにアクセスして、メンテナンスページが表示されて、503が返されていればOK

CloudflontとS3で503を返すメンテナンスページ作成

S3だけでメンテページを作成しようとしたが、S3単体だと503を返すことができないので、
CloudfrontとS3でメンテナンスページを作成したときのメモ。

s3バケットを作成

・まずマネジメントコンソールに入り、S3のバケットを作成。
・作ったバケットの横の虫眼鏡を押して、プロパティを表示。
・「静的サイトホスティング」をクリックし、「ウェブサイトのホスティングを有効にする」を選択。
・「インデックスドキュメント」はなくては作れないので、適当に「index.html」としておく。
・「アクセス許可」を選択し、「バケットポリシーの編集」を選択。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[バケット名]/*"
        }
    ]
}

上記のようにポリシーを作成する(これでアップロードしたものすべてが自動で閲覧可になる)

s3にリソースアップロード

・s3マネジメントコンソールで対象のバケット名をクリックし、右上の「アクション」ボタンを押して、「アップロード」を選択。
ドラッグアンドドロップでhtmlファイル等リソースをアップロード。
・ちゃんと表示されているかどうか先ほどのプロパティ画面の「静的サイトホスティング」のところにある「エンドポイント」にアクセス
(「バケット名.s3-website-ap-northeast-1.amazonaws.com」とかなっているやつ。そこから「/maintenance.html」みたいにリソース名でアクセスできる)

cloudflontを作成

・「create Distribution」を選択。「Web」のほうの「Get Started」を選択。
・「Origin Settings」の「Origin Domain Name」にバケット名を入れる(文字入力すればサジェストされる)
・「Restrict Bucket」をYESにする。 ・「Origin Access Identity」をCreate a New Identityにする。 ・「Grant Read Permissions on Bucket」をYes, Update Bucket Policyにする。 ・下のほうにある「Distribution Settings」内にある「Alternate Domain Names (CNAMEs)」というところに、先ほどのs3のエンドポイントを入力
・あとはデフォルトのまま「Create Distribution」を押して作成する。

Error Pages設定

・cloudflontのサイドメニュー「Distributions」を選択したら、先ほど作ったDistribution一覧にあると思うので、IDをクリック。
・タブメニューの「Error Pages」を選択し、「Create Custom Error Response」を選択。 ・「HTTP Error Code」は「403:Forbidden」、「Error Caching Minimum TTL」はデフォルト。 ・「Customize Error Response」を「Yes」にする。
・「Response Page path」という設定項目がでてくるので、s3に設置したメンテページのhtmlのパスを設定。
(直下に「maintenance.html」というファイルを置いていたら「/maintenance.html」)
・「HTTP Response Code」は「503:Service Unavailable」を選択し、「Create」を選択。

疎通確認

・15分~30分くらいで表示されるようになるので、その後cloudflontのサイドメニュー「Distributions」の一覧のところにある要素「Domain Name」にアクセスする。
(ランダム文字列.cloudfront.netみたいなやつ)
・無事メンテページが表示されて、503がレスポンスで返ってくれば準備完了。
・実際メンテナンスに入る前に、DNSの設定を疎通確認したクラウドフロントの「Domain Name」にすればOK。
※Route53のAlias設定でcloudflontディストリビューションを設定する場合は、Route53の料金がかかりません!

追記

・作りたてのS3は、307 Temporary Redirectを上記設定で疎通を行うと返してくることがたまにある。
対策を調べたのですがこれというものは見つからず、事前にs3バケットのみ用意しておくのがよさそうです。(データ置いとくだけなら1GB月4円くらいなので)

Linuxサーバーなどで、自分の外向きIPアドレスが知りたいとき

curl ifconfig.co

phantomjsとcasperjsのインストール

phantomjsのインストール

バイナリをダウンロードするやり方。ビルドはすごい時間がかかる。

cd /usr/local/src
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
mv phantomjs-2.1.1-linux-x86_64 phantomjs
cd phantomjs
ln -sf `pwd`/bin/phantomjs /usr/local/bin/phantomjs
phantomjs --version
#エラーになる場合は、だいたい以下を入れれば直る
sudo yum -y install fontconfig-devel

casperjsのインストール

cd /usr/local/src
git clone https://github.com/casperjs/casperjs.git
cd casperjs/

# シンボリックリンクを作成
ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs

# 動作確認
casperjs --version
1.1.2

casperjsでjQueryを使う

cd /usr/local/src/casperjs
mkdir lib
cd lib
wget https://code.jquery.com/jquery-1.9.1.min.js
mv jquery-1.9.1.min.js jquery.min.js

※casperjsのソース内で使うときはcreate時に以下のように設定

var casper = require('casper').create({
  clientScripts: [phantom.casperPath + "/lib/jquery.min.js"],
});

おまけメモ

バッチ実行する場合のsyntaxError回避 ソースの一番上にこれ入れる

#!/usr/local/bin/phantomjs /usr/local/bin/casperjs

MongoDBを少ない容量で起動させる

MongoDBを普通に起動させると、ジャーナルファイルが3GBくらい一気に容量を確保してしまうので、 開発環境などでは不便。

以下のように設定すればジャーナルファイルのサイズが128MBになる。

sudo serivce mongod stop
#失敗したら sudo killall mongod

sudo rm /var/lib/mongodb/journal/*
#設定によっては場所が違う場合もあるので注意

sudo vi /etc/mongod.conf
#(または、mongodb.conf)
#以下を追加
----------
journal=true
smallfiles=true
----------

sudo service mongod start

dfコマンドなどで容量がすくなくなっていればOK。

Android HUAWEI端末P8Liteで Logcatを動かす方法

HUAWEIのAndroid端末はデバッグモードにしても、ログ出力が制限されている模様。

(INFOログ以上は出力された)

通話アプリを起動して

*#*#2846579#*#*

とダイヤル。

「ProjectMenu」が表示されるので、1番の「Background Settings」を選択。

3番の「LOG Settings」を選択。

「AP Log」「CP Log」「Charge Log」「Sleep Log」のすべてをチェックしてCLOSE。

これで出力されるようになります。

Vagrantで良く使うコマンドメモ。

Vagrantで良く使うコマンドのまとめ。

box系

boxの追加

以下のコマンド。1.5以降BOXの名前のみで良くなりました。

$vagrant box add chef/centos-7.1

※chefとしていますが、chef入りのというのではなく、chefが作ってるBOXです。

※chef/ 以下にosを指定すると色々なものに対応しています。(centos-6.5等)

box一覧

$vagrant box list

box削除

$vagrant box remove [box名]

vm操作系

vm初期化

$vagrant init

vm起動

$vagrant up

※initしたときに作られたvagrantfileに各種設定(指定するboxなど)を書き込んでおく

vmへログイン

$vagrant ssh

windowsは使えない。以下の設定でteraterm等でログイン

host: 127.0.0.1
port: 2222
user: vagrant
password: vagrant
rootpass: vagrant

※公開鍵認証でもログイン可「[vagrant initしたフォルダ].vagrant\machines\default\virtualbox\」の「private_key」ファイルが秘密鍵

vmシャットダウン

$vagrant halt

vm削除

$vagrant destroy