ubuntu に [docker] を入れて使えるようになるまで

ubuntu インストール

起動時に screen が呼ばれるように

.bashrc 末尾に下記を追記
screen -xR

.screenrc を新しく作成し、下記を追記
shell -$SHELL

sudo apt-get install docker.io

sudo docker login

ssh-keygen

githubに以下を登録
cat ~/.ssh/id_rsa.pub

â– 

毎月のデータ通信費が5000円と高価だったので、最近流行りの格安simを物色中。

◆データ通信でやりたい事、どういう時に使うのかを決める

値段が安ければ品質が悪くても問題無いと思っていたが、通信速度が10kbpsを下回った時に「あ、これは流石に耐えられない」と感じました。
安かろう悪かろうということで、値段だけで決めるのは危険だと思いましす。

値段以外を重視する場合、自分にとって何が大切かを最初に考えておくと、契約後の後悔も少ないかと思います。

参考にはならないと思いますが、私が重視するのは下のような感じです。
必須項目の中に高速通信が必要な「ゲームで遊ぶ」が入っているため、高速通信が必要になりました

●必須

gce インスタンスの起動、停止ができる
ssh で gce のインスタンスに接続して操作ができる
月に300MB位ダウンロードが発生する特定のゲームを遊ぶ
ブラウザで資料の検索、閲覧
はてなダイアリーの記載
メールの送受信
Lineの送受信
Twitterに書き込み
主に使うのは、通勤中
テザリング

●できればやりたい

インターネットラジオの聴き放題

●我慢する

Facebook閲覧
Twitter閲覧
動画の視聴
色々なゲームを快適に遊ぶ

◆必要な通信容量を見積もる

見積もれと言われてできるものでは無いと思うので、iOSならば設定のモバイルデータ通信の統計情報。Android ならば、設定のデータ使用量を見て、決めるのが良いです。

私は月に3G使っていて、App Store が1.5G位、アンインストール済のアプリが1G位の使用量だったので、新しいアプリを探したり試したりしなければ月に1Gで収められると見積もりました。

◆ベストを求めないで契約してしまう

見積もり結果で収まるデータ通信量を提供しているサービスをピックアップして、あとは好みで良いかな?と思います。

格安simは人が集まるところではどうしても電波が弱くなってしまうので、大手キャリアと比べると質が悪くなるのは間違いないです。であればどれが良いか悩むくらいなら、今より安くなるのは間違いないので、とりあえず試してみるのが良いです。

どうしても心配なら、乗り換えるのではなく、今の契約を継続したまま追加で契約してしまうのも手です。私は au の契約を継続しながら、楽天モバイルの端末セットを購入して試した後にキャリアを解約しました。

作成からdeployまで

シンプルな Google App Engine アプリケーションの作成からサーバ転送まで駆け足で紹介。

app.yaml の準備

以下は go を使う時のシンプルなapp.yaml

application: プロジェクト名
version: 1
runtime: go
api_version: go1

handlers:
  - url: /.*
    script: _go_app

goファイルの用意

とりあえずチュートリアルにあったもの

hello.go

package goplus                                                                                               
                                                                                                             
import (                                                                                                     
        "fmt"                                                                                                
        "net/http"                                                                                           
)                                                                                                            
                                                                                                             
// init is called before the application starts.                                                             
func init() {                                                                                                
        // Register a handler for /hello URLs.                                                               
        http.HandleFunc("/", hello)                                                                          
}                                                                                                            
                                                                                                             
// hello is an HTTP handler that prints "Hello Gopher!"                                                      
func hello(w http.ResponseWriter, r *http.Request) {                                                         
        fmt.Fprint(w, "Hello, Gopher!")                                                                      
}                                    

動作確認

サーバに転送する前に動作確認したい場合は

dev_appserver.py app.yaml

を使ってローカルにサーバを起動して、 http://localhost:8080/ にアクセスする事でサーバに転送せずに動作確認ができます。

ssh でgceなどの別サーバにログインして作業している時は gui のブラウザは多分使えないので、ローカルサーバをバックグラウンドで実行して curl などで確認する感じになります。

dev_appserver.py app.yaml&
curl localhost:8080

ちなみに、go を使っている場合は、同様のことが

goapp serve app.yaml

で実現可能です。

サーバに転送(初回deploy時は要認証)

app engine のサーバに転送することで、他の人も実行できるようになる。

サーバに初めて転送する場合、ブラウザが起動してgoogleアカウントでログインする必要がある。

私はここでちょっとはまった。

通常は

appcfg.py update app.yaml

と入力したあと、ブラウザが勝手に起動してgoogle アカウントで認証、App Engine とのヒモ付けをするのだけど、GCE に ssh でログインしていると、起動するブラウザがテキストベースで画面が乱れてうまく認証するまで進めなかった。

こういう時は

appcfg.py --noauth_local_webserver update app.yaml

と実行すると表示されんurlを別のブラウザで表示&認証。その後表示される文字列を入力する事で認証ができる。

サーバに転送(別コマンド)

go を使う場合、appcfg.py ではなく goapp を使って転送することも可能。

goapp deploy app.yaml

GoogleCloudShellベータが2015年中は無料

https://cloud.google.com/cloud-shell/

web ブラウザ上で動くターミナルを使って接続できる仮想linux環境。

制限がそれなりにあるようですが、ちょっとしたコードをささっと確認するには手軽に感じました。

ただ、iPadから使うとキーボードが標準のものになるため、Coda や Textastic のキーボード拡張に慣れているとしんどいかもしれません。

上にGoogleAppEngine環境を作る

AppEngine のスタートページを開く。 Google Cloud Platform

言語を選択。
せっかくなのでgoを選んでみる。
ダウンロードページからダウンロード用のurlをコピー。
linux上でダウンロード。

wget https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.26.zip

unzipが必要だったのでインストール

sudo yum install unzip

~/.bashrc に展開したパスを PATH に追加する記載を追加。
python 2.7.5 をインストール

日本語の表示ずれをどうにかする

現在、格闘中で解決には至っていません。
mac のターミナルからsshでつないだ時はカーソルはずれなかったので、クライアントが対応していないんじゃないかな?と思ってきました。。

ターゲットos : CentOS Linux release 7.1.1503 (Core) 
sshクライアント : Coda for iPad

LANG を ja_JP に変更

http://zero-config.com/centos/changelocale-002.html

を参考に、

sudo localectl set-locale LANG=ja_JP.UTF-8
source /etc/locale.conf

実行してみたけど変わらず。

export | grep LANG 実行してみると en のままだった。

.bash_profile に

LANG=ja_JP?UTF-8
export LANG

と書き、再ログインする事で、export | grep LANG 実行してみたら、 ja に書き換わった。ただあいかわらず vi で日本語を書くとカーソルの位置がずれる。

Terminal Type??

ssh クライアントの設定を確認すると、Terminal Type が xterm-256color と書かれている。
これを vt100 に変更。
これでも状況変わらず。

vim の問題?

vim の設定で表示関係があるので、そこを検証しようと思った矢先、そもそも vi の問題なのか疑問がわいてきました。
そこで、下記を入力してみたところ

ls あいうえおききくけこ

カーソルがずれました。。。(^^;;

クライアントのフォントの幅計算が間違ってるのかな?とりあえずこれ以上の検証は一度打ちきり。

IPアドレス固定にした時の注意点

iPad から ssh で Google Compute Engine に繋ぎに行く時の一番のネックは、インスタンスの起動ごとに変わってしまう IPアドレスでした。(管理ページではエフェメラルと呼ばれています)

これを解消するために dns を使ったりしましたがどれも上手くいかず。

ここでふと、エフェメラルではなく静的ipアドレスを指定すれば良いのでは?と思い立ち試してみました。

結果は期待した通り。静的ipアドレスの発行自体は無料なので万々歳。全て解決!

とはいきませんでした。

問題点

静的ipアドレスはインスタンスが起動していないと維持費がかかる!!
つまりipアドレスを固定にしてサーバー設置すると、サーバー起動時は無料ですが、インスタンスを停止すると静的ipアドレスの維持費がかかってしまうんです。

価格は?

Google Cloud 料金計算ツールで確認可能です。

https://cloud.google.com/products/calculator/


Unused static IPs に 1 と入力して Estimate をクリックすると、右上に見積もりがでます。

結構高くてびっくりします。