2015年12月26日土曜日

Ubuntu14.04にdokkuインストールしてみました

  • このエントリーをはてなブックマークに追加



ubuntu14にdokkuをインストールしてみました。dokkuは今ubuntuしか対応しないようです。
手順はすごく簡単です。社内プロキシ環境の場合は、ファイルダウンロードなど制限されている可能性もあります。その時に正常にインストール出来ないこともあります。
●install shellダウンロード。現時点で最新バージョンは0.4.6になっています。必要に応じて最新バージョンを書き換えてください。
●install shell 実行。dockerも含めてインストールしてくれます。既にdockerインストール済みの場合は、シェルの中でスキップしてくれます。
root@ubuntu14:~# sudo DOKKU_TAG=v0.4.6 bash bootstrap.sh
Preparing to install v0.4.6 from https://github.com/dokku/dokku.git...
--> Initial apt-get update
herokuish (0.3.5) を設定しています ...
Importing herokuish into docker (around 5 minutes)
--> Installing docker
2015-12-19 00:45:41 URL:https://get.docker.com/ [12865/12865] -> "-" [1]
Warning: the "docker" command appears to already exist on this system.
If you already have Docker installed, this script can cause trouble, which is
why we're displaying this warning and provide the opportunity to cancel the
installation.
If you installed the current Docker package using this script and are using it
again to update Docker, you can safely ignore this message.
You may press Ctrl+C now to abort this script.
+ sleep 20
apparmor is enabled in the kernel and apparmor utils were already installed
+ sh -c apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.fGRmeFnz8G --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
gpg: 鍵2C52609Dをhkpからサーバーp80.pool.sks-keyservers.netに要求
gpg: 鍵2C52609D:“Docker Release Tool (releasedocker) <docker@docker.com>”変更なし
gpg: 処理数の合計: 1
gpg: 変更なし: 1
+ sh -c mkdir -p /etc/apt/sources.list.d
+ sh -c echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list
+ sh -c sleep 3; apt-get update; apt-get install -y -q docker-engine
無視 http://jp.archive.ubuntu.com trusty InRelease
ヒット http://jp.archive.ubuntu.com trusty-updates InRelease
ヒット http://jp.archive.ubuntu.com trusty-backports InRelease
ヒット http://jp.archive.ubuntu.com trusty Release.gpg
ヒット http://jp.archive.ubuntu.com trusty-updates/main Sources
ヒット http://jp.archive.ubuntu.com trusty-updates/restricted Sources
ヒット http://jp.archive.ubuntu.com trusty-updates/universe Sources
ヒット http://jp.archive.ubuntu.com trusty-updates/multiverse Sources
ヒット http://jp.archive.ubuntu.com trusty-updates/main amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/restricted amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/universe amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/multiverse amd64 Packages
取得:1 https://apt.dockerproject.org ubuntu-trusty InRelease
無視 https://apt.dockerproject.org ubuntu-trusty InRelease
ヒット https://apt.dockerproject.org ubuntu-trusty Release.gpg
ヒット https://apt.dockerproject.org ubuntu-trusty Release
ヒット https://apt.dockerproject.org ubuntu-trusty/main amd64 Packages
ヒット http://security.ubuntu.com trusty-security InRelease
ヒット http://jp.archive.ubuntu.com trusty-updates/main i386 Packages
ヒット https://apt.dockerproject.org ubuntu-trusty/main i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/restricted i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/universe i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/multiverse i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-updates/main Translation-en
ヒット http://jp.archive.ubuntu.com trusty-updates/multiverse Translation-en
取得:2 https://apt.dockerproject.org ubuntu-trusty/main Translation-ja_JP
ヒット http://security.ubuntu.com trusty-security/main Sources
ヒット http://jp.archive.ubuntu.com trusty-updates/restricted Translation-en
ヒット http://jp.archive.ubuntu.com trusty-updates/universe Translation-en
ヒット http://jp.archive.ubuntu.com trusty Release
ヒット http://jp.archive.ubuntu.com trusty-backports/main Sources
ヒット http://jp.archive.ubuntu.com trusty-backports/restricted Sources
ヒット http://jp.archive.ubuntu.com trusty-backports/universe Sources
ヒット http://security.ubuntu.com trusty-security/restricted Sources
ヒット http://jp.archive.ubuntu.com trusty-backports/multiverse Sources
ヒット http://jp.archive.ubuntu.com trusty-backports/main amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/restricted amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/universe amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/multiverse amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/main i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/restricted i386 Packages
ヒット http://security.ubuntu.com trusty-security/universe Sources
ヒット http://jp.archive.ubuntu.com trusty-backports/universe i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/multiverse i386 Packages
ヒット http://jp.archive.ubuntu.com trusty-backports/main Translation-en
ヒット http://jp.archive.ubuntu.com trusty-backports/multiverse Translation-en
ヒット http://jp.archive.ubuntu.com trusty-backports/restricted Translation-en
ヒット http://security.ubuntu.com trusty-security/multiverse Sources
ヒット http://jp.archive.ubuntu.com trusty-backports/universe Translation-en
ヒット http://jp.archive.ubuntu.com trusty/main Sources
ヒット http://jp.archive.ubuntu.com trusty/restricted Sources
ヒット http://jp.archive.ubuntu.com trusty/universe Sources
ヒット http://jp.archive.ubuntu.com trusty/multiverse Sources
ヒット http://jp.archive.ubuntu.com trusty/main amd64 Packages
ヒット http://security.ubuntu.com trusty-security/main amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/restricted amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/universe amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/multiverse amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/main i386 Packages
ヒット http://jp.archive.ubuntu.com trusty/restricted i386 Packages
ヒット http://jp.archive.ubuntu.com trusty/universe i386 Packages
ヒット http://jp.archive.ubuntu.com trusty/multiverse i386 Packages
ヒット http://security.ubuntu.com trusty-security/restricted amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/main Translation-ja
ヒット https://packagecloud.io trusty InRelease
ヒット http://jp.archive.ubuntu.com trusty/main Translation-en
ヒット http://jp.archive.ubuntu.com trusty/multiverse Translation-ja
ヒット http://security.ubuntu.com trusty-security/universe amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/multiverse Translation-en
ヒット http://jp.archive.ubuntu.com trusty/restricted Translation-ja
ヒット http://jp.archive.ubuntu.com trusty/restricted Translation-en
ヒット http://jp.archive.ubuntu.com trusty/universe Translation-ja
ヒット http://security.ubuntu.com trusty-security/multiverse amd64 Packages
ヒット http://jp.archive.ubuntu.com trusty/universe Translation-en
ヒット https://packagecloud.io trusty/main amd64 Packages
ヒット http://security.ubuntu.com trusty-security/main i386 Packages
ヒット http://security.ubuntu.com trusty-security/restricted i386 Packages
無視 http://jp.archive.ubuntu.com trusty/main Translation-ja_JP
無視 http://jp.archive.ubuntu.com trusty/multiverse Translation-ja_JP
無視 http://jp.archive.ubuntu.com trusty/restricted Translation-ja_JP
ヒット https://packagecloud.io trusty/main i386 Packages
無視 http://jp.archive.ubuntu.com trusty/universe Translation-ja_JP
ヒット http://security.ubuntu.com trusty-security/universe i386 Packages
取得:3 https://packagecloud.io trusty/main Translation-ja_JP
ヒット http://security.ubuntu.com trusty-security/multiverse i386 Packages
ヒット http://security.ubuntu.com trusty-security/main Translation-en
ヒット http://security.ubuntu.com trusty-security/multiverse Translation-en
ヒット http://security.ubuntu.com trusty-security/restricted Translation-en
無視 https://apt.dockerproject.org ubuntu-trusty/main Translation-ja_JP
ヒット http://security.ubuntu.com trusty-security/universe Translation-en
無視 https://apt.dockerproject.org ubuntu-trusty/main Translation-ja
無視 https://packagecloud.io trusty/main Translation-ja_JP
無視 https://packagecloud.io trusty/main Translation-ja
無視 https://apt.dockerproject.org ubuntu-trusty/main Translation-en
無視 https://packagecloud.io trusty/main Translation-en
パッケージリストを読み込んでいます... 完了
パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
docker-engine は既に最新バージョンです。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 87 個。
+ sh -c docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker your-user
Remember that you will have to log out and back in for this to take effect!
--> Installing dokku
2015-12-19 00:46:13 URL:https://packagecloud.io/gpg.key [3889/3889] -> "-" [1]
OK
deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
dokku は既に最新バージョンです。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 87 個。
(データベースを読み込んでいます ... 現在 63603 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../software-properties-common_0.92.37.6_all.deb ...
Unpacking software-properties-common (0.92.37.6) over (0.92.37.3) ...
Preparing to unpack .../python3-software-properties_0.92.37.6_all.deb ...
Unpacking python3-software-properties (0.92.37.6) over (0.92.37.3) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
python3-software-properties (0.92.37.6) を設定しています ...
software-properties-common (0.92.37.6) を設定しています ...
gpg: 鍵輪「/tmp/tmpwcgbpwbu/secring.gpg」ができました
gpg: 鍵輪「/tmp/tmpwcgbpwbu/pubring.gpg」ができました
gpg: 鍵C300EE8Cをhkpからサーバーkeyserver.ubuntu.comに要求
gpg: /tmp/tmpwcgbpwbu/trustdb.gpg: 信用データベースができました
gpg: 鍵C300EE8C: 公開鍵“Launchpad Stable”を読み込みました
gpg: 絶対的に信用する鍵が見つかりません
gpg: 処理数の合計: 1
gpg: 読込み: 1 (RSA: 1)
OK
(データベースを読み込んでいます ... 現在 63603 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../nginx_1.8.0-1+trusty1_all.deb ...
Unpacking nginx (1.8.0-1+trusty1) over (1.4.6-1ubuntu3.3) ...
(データベースを読み込んでいます ... 現在 63601 個のファイルとディレクトリがインストールされています。)
Removing nginx-core (1.4.6-1ubuntu3.3) ...
(データベースを読み込んでいます ... 現在 63595 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../nginx-common_1.8.0-1+trusty1_all.deb ...
Moving obsolete conffile /etc/nginx/naxsi.rules out of the way...
Moving obsolete conffile /etc/nginx/naxsi_core.rules out of the way...
Moving obsolete conffile /etc/nginx/naxsi-ui.conf.1.4.1 out of the way...
Unpacking nginx-common (1.8.0-1+trusty1) over (1.4.6-1ubuntu3.3) ...
以前に未選択のパッケージ nginx-full を選択しています。
Preparing to unpack .../nginx-full_1.8.0-1+trusty1_amd64.deb ...
Unpacking nginx-full (1.8.0-1+trusty1) ...
Preparing to unpack .../bind9-host_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking bind9-host (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Preparing to unpack .../dnsutils_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking dnsutils (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Preparing to unpack .../libisc95_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking libisc95 (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Preparing to unpack .../libdns100_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking libdns100 (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Preparing to unpack .../libisccfg90_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking libisccfg90 (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Preparing to unpack .../liblwres90_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking liblwres90 (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Preparing to unpack .../libbind9-90_1%3a9.9.5.dfsg-3ubuntu0.6_amd64.deb ...
Unpacking libbind9-90 (1:9.9.5.dfsg-3ubuntu0.6) over (1:9.9.5.dfsg-3ubuntu0.4) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for ureadahead (0.100.0-16) ...
Processing triggers for ufw (0.34~rc-0ubuntu2) ...
nginx-common (1.8.0-1+trusty1) を設定しています ...
設定ファイル /etc/default/nginx を新規にインストールしています ...
設定ファイル /etc/logrotate.d/nginx を新規にインストールしています ...
設定ファイル /etc/init.d/nginx を新規にインストールしています ...
設定ファイル /etc/nginx/uwsgi_params を新規にインストールしています ...
設定ファイル /etc/nginx/scgi_params を新規にインストールしています ...
設定ファイル /etc/nginx/koi-utf を新規にインストールしています ...
設定ファイル /etc/nginx/koi-win を新規にインストールしています ...
設定ファイル /etc/nginx/mime.types を新規にインストールしています ...
設定ファイル /etc/nginx/nginx.conf を新規にインストールしています ...
設定ファイル /etc/nginx/sites-available/default を新規にインストールしています ...
設定ファイル /etc/nginx/fastcgi_params を新規にインストールしています ...
Removing obsolete conffile /etc/nginx/naxsi.rules ...
Removing obsolete conffile /etc/nginx/naxsi_core.rules ...
Removing obsolete conffile /etc/nginx/naxsi-ui.conf.1.4.1 ...
libisc95 (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
libdns100 (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
libisccfg90 (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
libbind9-90 (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
liblwres90 (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
bind9-host (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
dnsutils (1:9.9.5.dfsg-3ubuntu0.6) を設定しています ...
Processing triggers for ureadahead (0.100.0-16) ...
nginx-full (1.8.0-1+trusty1) を設定しています ...
nginx start/running, process 16840
nginx (1.8.0-1+trusty1) を設定しています ...
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...





































































































































































































































●インストール確認。docker imagesコマンドで確認し、2つのイメージが追加されていることが確認できます。
root@ubuntu14:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
gliderlabs/herokuish latest 998d64a151b5 About a minute ago 1.29 GB
heroku/cedar 14 56b31ddc05ad 3 weeks ago 1.267 GB


●公開鍵とホスト名設定。インストール完了したら、公開鍵とホスト名設定をします。ここのホスト名はOSのホスト名ではなく、dokkuで使う名前になります。IP, FQDNを指定できます。dokkuのコンテナにアクセスするときに、このホスト名を使います。例えば(http://<ip>: port   or http://a.b.com: port)。
設定は、コマンドやブラウザでできます。
・コマンドの場合
公開鍵生成
root@ubuntu14:~# ssh-keygen
公開鍵をdokkuというユーザーの.ssh/authorized_keysにコピー
root@ubuntu14:~# cat ~/.ssh/id_rsa.pub | sshcommand acl-add dokku
root@ubuntu14:/home/dokku/.ssh# cat authorized_keys
command="FINGERPRINT=b4:02:1a:ca:02:02:b5:4e:9f:6b:21:66:44:1e:8b:a9 NAME=admin `cat /home/dokku/.sshcommand` $SSH_ORIGINAL_COMMAND",no-agent-forwarding,no-user-rc,no-X11-forwarding,no-port-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkZLloUYN6T***== rsa-key-20151201

ホスト名設定 vi /home/dokku/HOSTNAMEを編集する



・ブラウザの場合。public keyとhostnameを入れて「Finish Setup」をクリックするだけですみます。
image_thumb4[4]
これでインストールと設定が完了です。
●アプリデプロイ
dokkuを使ってアプリのデプロイを実施できます。今回はnode jsのアプリを例にしてみます。github上のnode-js-sampleというサンプルです。ご自分のgithubアカウントにForkして、使ってください。
https://github.com/heroku/node-js-sample

概ねのコマンドは以下の様な感じです。git cloneして、remote レポジトリ追加し、git push するだけです。ご自分のレポジトリを書き換えてください。
git clone git@github.com:c-ye/node-js-sample.git
cd node-js-sample/
git remote add dokku dokku@192.168.80.134:node-js-app
git push dokku master

git push 実行したら、出力の最後にアクセスURLが表示されます。
root@ubuntu14:~/node-js-sample# git push dokku master
Counting objects: 406, done.
Compressing objects: 100% (319/319), done.
Writing objects: 100% (406/406), 215.62 KiB | 0 bytes/s, done.
Total 406 (delta 57), reused 406 (delta 57)
-----> Cleaning up...
-----> Building node-js-app from herokuish...
-----> Setting config vars
CURL_CONNECT_TIMEOUT: 5
-----> Setting config vars
CURL_TIMEOUT: 30
-----> Adding BUILD_ENV to build environment...
-----> Node.js app detected
-----> Creating runtime environment
NPM_CONFIG_LOGLEVEL=error
NPM_CONFIG_PRODUCTION=true
NODE_ENV=production
NODE_MODULES_CACHE=true
-----> Installing binaries
engines.node (package.json): 4.0.0
engines.npm (package.json): unspecified (use default)
Downloading and installing node 4.0.0...
Using default npm version: 2.14.2
-----> Restoring cache
Skipping cache restore (new runtime signature)
-----> Building dependencies
Pruning any extraneous modules
Installing node modules (package.json)
express@4.13.3 node_modules/express
tqq escape-html@1.0.2
tqq merge-descriptors@1.0.0
tqq array-flatten@1.1.1
tqq cookie@0.1.3
tqq utils-merge@1.0.0
tqq cookie-signature@1.0.6
tqq methods@1.1.1
tqq fresh@0.3.0
tqq range-parser@1.0.3
tqq vary@1.0.1
tqq path-to-regexp@0.1.7
tqq content-type@1.0.1
tqq etag@1.7.0
tqq parseurl@1.3.0
tqq content-disposition@0.5.0
tqq serve-static@1.10.0
tqq depd@1.0.1
tqq qs@4.0.0
tqq finalhandler@0.4.0 (unpipe@1.0.0)
tqq on-finished@2.3.0 (ee-first@1.1.1)
tqq proxy-addr@1.0.10 (forwarded@0.1.0, ipaddr.js@1.0.5)
tqq debug@2.2.0 (ms@0.7.1)
tqq send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1)
tqq type-is@1.6.10 (media-typer@0.3.0, mime-types@2.1.8)
mqq accepts@1.2.13 (negotiator@0.5.3, mime-types@2.1.8)
-----> Caching build
Clearing previous node cache
Saving 2 cacheDirectories (default):
- node_modules
- bower_components (nothing to cache)
-----> Build succeeded!
mqq express@4.13.3
-----> Discovering process types
Procfile declares types -> web
-----> Releasing node-js-app (dokku/node-js-app:latest)...
-----> Deploying node-js-app (dokku/node-js-app:latest)...
-----> DOKKU_SCALE file not found in app image. Generating one based on Procfile...
-----> New DOKKU_SCALE file generated
=====> web=1
-----> Running pre-flight checks
For more efficient zero downtime deployments, create a file CHECKS.
See http://progrium.viewdocs.io/dokku/checks-examples.md for examples
CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
=====> node-js-app container output:
Node app is running at localhost:5000
=====> end node-js-app container output
-----> Running post-deploy
=====> unsupported vhost config found. disabling vhost support
-----> Setting config vars
NO_VHOST: 1
-----> Setting config vars
NO_VHOST: 1
-----> no nginx port set. setting to random open high port
-----> Setting config vars
DOKKU_NGINX_PORT: 2720
-----> Creating http nginx.conf
-----> Running nginx-pre-reload
Reloading nginx
-----> Setting config vars
DOKKU_APP_RESTORE: 1
=====> Application deployed:
http://192.168.80.134:32768 (container)
http://192.168.80.134:2720 (nginx)
To dokku@192.168.80.134:node-js-app
* [new branch] master -> master






























































































でブラウザで結果確認。今回はnode jsのサンプルの結果です。正常に表示されます。
image
これで、ソースコードからdeployすることができました。