VagrantのUbuntu14.04でdokkuを使う
最近dokkuにはまっているのでせっかくなのでvagrantで使えるようにしました。
結論から言うとsshの設定にハマりましたが無事使えるようになりましたのでその手順です。
このページは以下の項目があります
- Vagrantの設定
- dokkuのインストール
- vagrant内のdokkuにsshで接続する手順
- まとめ
Vagrant
Vagrantとはざっくり言うと仮想環境を簡単に使えるようにするツールです。
コマンド一つで仮想環境を簡単かつスピーディーに作成することができます。
Vagrantを利用するためにはまずOSのイメージを取得しておく必要があります。
このサイトにOSのイメージがありますのでUbuntu14.04を以下のコマンドで入手しておきます。
$ vagrant box add base https://github.com/kraksoft/vagrant-box-ubuntu/releases/download/14.04/ubuntu-14.04-amd64.box
OSの入手が完了したらどこか適当なディレクトリにVagrantファイルを作成します。今回はホームディレクトリ直下にvagrant/ubuntuというフォルダを作成しました。
$ mkdir -p ~/vagrant/ubuntu
$ cd ~/vagrant/ubuntu
$ vagrant init
上記の「vagrant init」のコマンドを実行することによりubuntuフォルダ内に「Vagrantfile」が作成されます。
仮想環境の起動の前にVagrantfileを少し修正します。テキストエディタでVagrantfileを開き29行目あたりにある「#config.vm.network "private_network...」のコメントアウトを外します。
# config.vm.network "private_network", ip: "192.168.33.10"
↓
config.vm.network "private_network", ip: "192.168.33.10"
修正が済んだら以下のコマンドでvagrantを起動させます。
$ vagrant up
起動が済んだら以下のコマンドでsshでアクセスできるようにしておきます。
$ vagrant ssh-config >> ~/.ssh/config
上記のコマンドを打つことでssh defaultでvagrantにアクセスできるようになります。以上で、vagrantの準備は完了です。
dokkuのインストール
vagrantの準備が済んだらdokkuのインストールに移ります。まずは以下のコマンドで仮想環境に接続します。
$ ssh default
上記のコマンドで仮想環境にsshで接続したら次はdokkuのインストールになります。ここのとこは私の別投稿の手順と同じです。
GMOクラウドVPS+Ubuntu14.04にdokkuをインストールしてみた_2016/02/13
$ cd /tmp
$ wget https://raw.githubusercontent.com/dokku/dokku/v0.4.13/bootstrap.sh
$ sudo DOKKU_TAG=v0.4.13 bash bootstrap.sh
上記のコマンドが済んだら仮想環境内にdokkuユーザーが作成されます。このタイミングであれば、ブラウザから「192.168.33.10」にアクセスすると以下の画面が表示されます。
Hostnameは「192.168.33.10.xip.io」に書き換えます。※xip.ioは外部のDNSサービスでxxx.xxx.xxx.xxx.xip.ioと行ったフォーマットで記述すると「xxx.xxx.xxx.xxx」のIPアドレスに置き換えてくれるサービスです。これによりアプリデプロイ後に「アプリ名.192.168.33.10.xip.io」でアプリにアクセスできるようになります。
上記の設定だけだと後でアプリデプロイを以下のエラーが出る可能性があります。私はここではまってしまってました。
Permission denied (publickey,password).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
上記のエラーを回避するために公開鍵をdokkuユーザーに対しても設定します。そのために以下のコマンドを入力します。
$ cat ~/.ssh/authorized_keys | sudo sshcommand acl-add dokku vagrant
上記のコマンドを入力することでvagrantユーザーに登録されている公開鍵をdokkuユーザーにも登録します。これによりのちのgit push時にエラーが出ることもなくなります。
vagrant内のdokkuにsshで接続する手順
仮想環境にdokkuのインストールができたら次はsshの設定をします。そのために一旦仮想環境から抜けます。
$ exit
そしたら次に.ssh/configを編集し仮想環境内のdokkuにアクセスできるようにします。先ほど「~/.ssh/config」ファイルの一番最後に先ほど「vagrant ssh-config」で追加した設定(HOST名defaultの奴)があるのでそこのUserをvagrantからdokkuに変更します。修正が済んだ後、「ssh default」でdokkuのコマンド一覧が出てきたら成功です。
$ ssh default
Usage: dokku [--quiet|--trace|--rm-container|--rm|--force] COMMAND <app> [command-specific-options]
Options:
apps:create <app> Create a new app
apps:destroy <app> Permanently destroy an app
apps List your apps
apps:rename <old-app> <new-app> Rename an app
backup:export [file] Export dokku configuration files
backup:import [file] Import dokku configuration files
certs:add <app> CRT KEY Add an ssl endpoint to an app. Can also import from a tarball on stdin
certs:chain CRT [CRT ...] [NOT IMPLEMENTED] Print the ordered and complete chain for the given certificate.
certs:generate <app> DOMAIN Generate a key and certificate signing request (and self-signed certificate)
certs:info <app> Show certificate information for an ssl endpoint.
certs:key <app> CRT KEY [KEY ...] [NOT IMPLEMENTED] Print the correct key for the given certificate.
certs:remove <app> Remove an SSL Endpoint from an app.
certs:rollback <app> [NOT IMPLEMENTED] Rollback an SSL Endpoint for an app.
:
:
ここまでできたら後は「git push」でアプリをデプロイできるようになります。ちなみにgit remoteのアドレスにも~/.ssh/configで設定した「default」を利用できます。
※例えばrailsアプリなら「git remote add dokku dokku@default:rails」で設定できます。
ちなみに、railsアプリの場合、rubyのインストール中にタイムアウトすることがあるので「dokku config:set --global CURL_TIMEOUT=120」と入れておくといいです。
まとめ
以上で、vagrant内のubuntuにdokkuをインストールすることができました。私はSSHで接続するところではまってしまいましたが新めて手順を実行してみたら
何はともかくローカル環境内にdokkuの環境が用意できました。何に使うかはまだ考えておりませんが、いろいろとdokkuの実験をするにはもってこいですかね。
他には、Rails API + AngularJSの組みあわせでアプリを作る歳のクロスオリジン対応になりますかね。こちらも是非ともいつか試してます。