Quantcast
Channel: もくもくブログ
Viewing all articles
Browse latest Browse all 216

IDCFクラウドの一番安いのでDokkuを使う

$
0
0

(Dokku v0.3.26の話)

Herokuで1日6時間止めたくないし、30分でスリーブしたくないアプリがあるとき、VPS on Dokkuは最高のソリューションかもしれないです。

プロダクションには無理がありそうですが、社内とか個人用途には良さそうですね、nginxとかのセットアップをやってくれますし、Herokuのbuildpackを使えるので便利便利です。

VPSにはIDCFクラウドの一番安いのを使います。Dokkuを入れる前に、

IDCFクラウド借りました

にあるようなセットアップが済んでいるものとします。

Dokkuのインストール

$ wget https://raw.github.com/progrium/dokku/v0.3.26/bootstrap.sh$ sudo DOKKU_TAG=v0.3.26 bash bootstrap.sh

続いてサーバにログインしている状態で、ホスト名の設定。(root権限で実行)

VHOSTとHOSTNAMEに、持っているDNSの名前を設定する。(サブドメインでも良い)

(仮に、foo.barを設定したとする。)

# echo "foo.bar" > /home/dokku/VHOST
# echo "foo.bar" > /home/dokku/HOSTNAME

("http://foo.bar"にアクセスしてもdokkuの初期設定画面が出てきたので、そちらで設定できるみたい)

次に、git pushできるようにするために、SSHの公開鍵を設定する。公開鍵のある場所で以下のコマンドを実行する。

(ローカル) $ cat ~/.ssh/id_rsa.pub | ssh root@<your_ip> "sudo sshcommand acl-add dokku <name>"
(サーバ内) $ cat ~/.ssh/id_rsa.pub | sudo sshcommand acl-add dokku <name>

Dokkuの下準備はこれだけ、次にドメインの設定する。

ドメインの設定(お名前.com)

Dokkuはnginxを使ってサブドメインにデプロイしてくれるので、ワイルドカードを設定してみる。

お名前.comでは、サブドメインにワイルドカードが使えないので、*.とするしかないみたいです。

しょうがないので、DNSレコード設定で以下のようにAレコードを設定する。

A recordIPTTL
foo.bar3600
*.foo.bar3600

これで、例えば"dokku@foo.bar:sample"にpushしたとき、"http://sample.foo.bar"にデプロイされる。

Dokkuにサンプルアプリをデプロイ

Pythonのサンプルをデプロイしてみる。

heroku/python-sample

ローカル環境にgit cloneして、remoteにdokkuを追加。

$gitclonehttps://github.com/heroku/python-sample.git$cdpython-sample$gitremoteadddokkudokku@foo.bar:python-sample$gitpushdokkumasterCountingobjects:21,done.Deltacompressionusingupto8threads.Compressingobjects:100%(17/17),done.Writingobjects:100%(21/21),1.81KiB|0bytes/s,done.Total21(delta6),reused0(delta0)----->Cleaningup...----->Buildingpython-samplefromherokuish...remote:Unabletofindimage'gliderlabs/herokuish:latest'locallyremote:latest:Pullingfromgliderlabs/herokuishremote:835c565d00e2:Pullingfslayerremote:c5c659229e15:Pullingfslayer(中略)remote:359e311e765f:Pullcompleteremote:359e311e765f:Alreadyexistsremote:Digest:sha256:7aaa5dd65a7f90a47f2bb1266375b27d4f273ff94495527949536c9e944a871aremote:Status:Downloadednewerimageforgliderlabs/herokuish:latest----->AddingBUILD_ENVtobuildenvironment...----->Pythonappdetected----->Installingruntime(python-2.7.10)----->InstallingdependencieswithpipCollectingFlask==0.9(from-rrequirements.txt(line1))DownloadingFlask-0.9.tar.gz(481kB)CollectingJinja2==2.6(from-rrequirements.txt(line2))DownloadingJinja2-2.6.tar.gz(389kB)CollectingWerkzeug==0.8.3(from-rrequirements.txt(line3))DownloadingWerkzeug-0.8.3.tar.gz(1.1MB)Installingcollectedpackages:Werkzeug,Jinja2,FlaskRunningsetup.pyinstallforWerkzeugRunningsetup.pyinstallforJinja2Runningsetup.pyinstallforFlaskSuccessfullyinstalledFlask-0.9Jinja2-2.6Werkzeug-0.8.3remote:Youareusingpipversion7.0.3,howeverversion7.1.2isavailable.remote:Youshouldconsiderupgradingviathe'pipinstall--upgradepip'command.----->DiscoveringprocesstypesProcfiledeclarestypes->web----->Releasingpython-sample...----->Deployingpython-sample...----->DOKKU_SCALEfilenotfoundinappimage.Defaultingtoasinglewebprocess----->NewDOKKU_SCALEfilegenerated----->Runningpre-flightchecksFormoreefficientzerodowntimedeployments,createafileCHECKS.Seehttp://progrium.viewdocs.io/dokku/checks-examples.md for examplesCHECKSfilenotfoundincontainer:Runningsimplecontainercheck...----->Waitingfor10seconds...----->Defaultcontainerchecksuccessful!=====>python-samplecontaineroutput:*Runningonhttp://0.0.0.0:5000/=====>endpython-samplecontaineroutput----->Runningpost-deploy----->Creatingnew/home/dokku/python-sample/VHOST...----->Configuringpython-sample.muuny-blue.info...----->Creatinghttpnginx.conf----->Runningnginx-pre-reloadReloadingnginx=====>Applicationdeployed:http://python-sample.foo.barTodokku@foo.bar:python-sample*[newbranch]master->master

初回はDockerのイメージとかを色々落としてくるので時間がかかるが、いい感じにデプロイされている様子を見れる。

Aレコードがちゃんと設定されていれば、ブラウザでも見れます。

Hello Dokku

Dokkuの様子を、サーバにSSHして確認。

$ dokku apps=====> My Apps
python-sample$ dokku ps python-sample
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   60641632 ?        Ssl  00:11   0:00 /start web
root        10  0.0  0.0   1484920 ?        S    00:11   0:00 /root/.basher/bash -c main 'web'
u3135      136  0.0  1.4 17952014716 ?        S    00:11   0:00 python app.py
root       137  0.0  0.0   4440652 ?        Ss+  00:21   0:00 /bin/sh -c ps auxwww
root       143  0.0  0.1  155641156 ?        R+   00:21   0:00 ps auxwww$ ls -la /home/dokku | grep python-sample
drwxrwxr-x  8 dokku dokku 4096 XXX XX XX:XX python-sample

Dockerの様子も確認。

$ sudo docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS               NAMES
a63daf76bcb3        dokku/python-sample:latest   "/start web"4 minutes ago       Up 4 minutes                            insane_leakey$ sudo docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
dokku/python-sample    latest              d8025105f0c0        4 minutes ago       1.421 GB
gliderlabs/herokuish   latest              359e311e765f        6 weeks ago         1.263 GB

okぽい。

アプリに対して、操作するときはdokkuコマンドから操作する。詳しくはdokku --help。

まとめ

IDCFフロンティアの一番安いのにもDokkuちゃんとのせられたし、ちゃんと動いた。個人用途には申し分なさそう。

メモリ使用量の様子。

メモリ使用量

アプリ1つしかデブロイしてないけど、あまり無茶させなければ大丈夫そうな気配。

入れたあとにDokkuAlternativeってのがあることを知った、こっちは、メジャーどころのDB連携がデフォルトでついていたりWebコンソールがあるみたい、こっちのほうがなにかとよさそう。

dokku-altに関しては日本語で丁寧にまとまってる記事があったのでそちらを見るといいかもしれない。

Dokku Alternative触ってみる。

(今のところ不便はないので素のdokkuを運用しいています)

参考資料


Viewing all articles
Browse latest Browse all 216

Trending Articles