VagrantとDockerでConfluenceを立ち上げてみた

VagrantとDockerでConfluenceを実行できる環境を作ってみました。

経緯

やってみようと思った理由です。

  • 会社で使っているConfluenceの挙動が最新と違うかどうかを確認したい
  • Vagrantを2年くらいまともに触っていなかったのでリハビリ

前提

  • wsl-terminalでBoWを使用
  • Windows10
  • 運用することは考えていない (使い捨て)
  • 結論より作業記録を重視

インストール

Virtual Box

Virtual Boxが必要なのでインストールします。
version 5.1.22 r115126 (Qt5.6.2) でした。

Oracle VM VirtualBoxVirtualBox is being actively developed with frequent releases and has an ever growing list of features, supported guest operating systems and platforms it runs on. VirtualBox is a community effort backed by a dedicated company: everyone is encouraged to contribute while Oracle ensures the product always meets professional quality criteria.

Vagrant

公式サイトからWindows版をインストールしました。

Vagrant by HashiCorpVagrant enables users to create and configure lightweight, reproducible, and portable development environments.

$ wcmd vagrant -v
Vagrant 1.9.5
公式以外のリポジトリやインストーラを使うのはやめましょう。
大体依存関係がおかしくてトラブルの元になります。

プロジェクトのセットアップ

Vagrantfileの作成

Vagrantfile を作ります。これには2つの目的があります。

  • プロジェクトのルートディレクトリとしての目印
  • プロジェクトの実行に必要なマシン、リソース、ソフトウェア、アクセス方法を説明する

confluenceプロジェクトのディレクトリを作成してセットアップしましょう。

$ mkdir confluence
$ cd confluence
$ wcmd vagrant init
 A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
wcmd は wsl-terminalのコマンドです。
Windowsコマンドを実行するために使用します。

MS-DOSターミナルから実行する場合は不要です。

Vagrantfileの中身は、コメントを除けば3行です。

$ grep -vE '(^ *$|#)' Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

Boxの追加

VMのベースとなるBoxを追加します。
ConfluenceをDockerで動かすため、Dockerが動くイメージを使用します。

[/mnt/c/Users/syoum/vagrant/confluence]
$ wcmd vagrant box add williamyeh/ubuntu-trusty64-docker
==> box: Loading metadata for box 'williamyeh/ubuntu-trusty64-docker'
    box: URL: https://atlas.hashicorp.com/williamyeh/ubuntu-trusty64-docker
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) virtualbox
2) vmware_desktop

Enter your choice: 1
==> box: Adding box 'williamyeh/ubuntu-trusty64-docker' (v1.12.1.20160830) for provider: virtualbox
    box: Downloading: https://atlas.hashicorp.com/williamyeh/boxes/ubuntu-trusty64-docker/versions/1.12.1.20160830/providers/virtualbox.box
    box:
==> box: Successfully added box 'williamyeh/ubuntu-trusty64-docker' (v1.12.1.20160830) for 'virtualbox'!

Boxは以下のカタログから使用しました。

Discover Vagrant Boxes | Atlas by HashiCorpThis page lets you discover and use Vagrant Boxes created by the community. You can search by operating system, architecture or provider.

HashiCorpは上記カタログのBoxに対する保証やサポートはしていません。
VagrantはDocker Provisionerを提供していますので、そちらを推奨します。

Boxの登録

先ほどのBoxを使用するようにVagrantfileを編集します。

@@ -12,7 +12,8 @@

   # Every Vagrant development environment requires a box. You can search for
   # boxes at https://atlas.hashicorp.com/search.
-  config.vm.box = "base"
+  config.vm.box = "williamyeh/ubuntu-trusty64-docker"
+  config.vm.box_version = "1.12.1.20160830"

   # Disable automatic box update checking. If you disable this, then
   # boxes will only be checked for updates when the user runs

VM立ち上げ

起動

vagrant up で起動します。

$ wcmd vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'williamyeh/ubuntu-trusty64-docker'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'williamyeh/ubuntu-trusty64-docker' is up to date...
==> default: Setting the name of the VM: confluence_default_1496455689048_70374
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.0.24
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => C:/Users/syoum/vagrant/confluence

何点かポイントがあります。

  • SSHのアドレスは vagrant@127.0.0.1:2222
  • ベースとなったBoxはVirtual Boxの Version 5.0.24 で作成されている
    • HostのVirtual Boxは Version 5.1 であり相違がある
    • 大抵問題ないが、たまにレアな問題が起こる

VMにログイン

Windowsにsshクライアントを入れていないため vagrant ssh ではなく ssh を使います。
その前に ~/.ssh/config を設定しましょう。

プロジェクトルートの .vagrant ディレクトリを辿っていくと秘密鍵があります。

Host           confluence-vm
HostName       127.0.0.1
Port           2222
User           vagrant
IdentityFile   /mnt/c/Users/syoum/vagrant/confluence/.vagrant/machines/default/virtualbox/private_key

後はsshでログインできます。

$ ssh confluence-vm
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.2.0-42-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
vagrant@localhost ~ $ docker --version
Docker version 1.12.1, build 23cf638

ちゃんとDockerも入っています。

Confluenceの起動

Vagrantのprovisioningでconfluenceのdocker imageを起動するようにします。

Vagrantfileの修正

config.vm.provision にコマンドを指定します。

   # Enable provisioning with a shell script. Additional provisioners such as
   # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
   # documentation for more information about their specific syntax and use.
-  # config.vm.provision "shell", inline: <<-SHELL
-  #   apt-get update
-  #   apt-get install -y apache2
-  # SHELL
+  config.vm.provision "shell", inline: <<-SHELL
+    docker run --name="confluence" -d -p 8090:8090 -p 8091:8091 atlassian/confluence-server
+  SHELL
 end

confluenceのImageはAtlassianの公式を使用しています。

nullConfluence Server is where you create, organise and discuss work with your team. Capture the knowledge that’s too often lost in email inboxes and shared network drives in Confluence – where it’s easy to find, use, and update.

プロビジョニングを含めてVMを作成

一度クリーンな状態にします。

$ wcmd vagrant destroy

--provision フラグを付けて実行します。

$ wcmd vagrant up --provision

VMの中からアクセスしてみます。

vagrant@localhost ~ $ curl 'http://localhost:8090'
curl: (7) Failed to connect to localhost port 8090: Connection refused

接続エラーになってしまいますね。

起動しない原因を調査する

メモリが足りていない

vagrant@localhost ~ $ docker logs confluence
If you encounter issues starting up Confluence, please see the Installation guide at http://confluence.atlassian.com/display/DOC/Confluence+Installation+Guide

Server startup logs are located in /opt/atlassian/confluence/logs/catalina.out
---------------------------------------------------------------------------
Using Java: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
2017-06-03 05:29:57,806 INFO [main] [atlassian.confluence.bootstrap.SynchronyProxyWatchdog] A Context element for ${confluence.context.path}/synchrony-proxy is found in /opt/atlassian/confluence/conf/server.xml. No further action is required
---------------------------------------------------------------------------
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/hs_err_pid5.log

メモリが足りてなさそうですね。

vagrant@localhost ~ $ free -m
             total       used       free     shared    buffers     cached
Mem:           363        335         27          0         11        218
-/+ buffers/cache:        105        257
Swap:          767          2        765

vb.memory で割り当てメモリ数を指定できますので2048MBにします。

   # backing providers for Vagrant. These expose provider-specific options.
   # Example for VirtualBox:
   #
-  # config.vm.provider "virtualbox" do |vb|
+  config.vm.provider "virtualbox" do |vb|
   #   # Display the VirtualBox GUI when booting the machine
   #   vb.gui = true
   #
-  #   # Customize the amount of memory on the VM:
-  #   vb.memory = "1024"
-  # end
+    # Customize the amount of memory on the VM:
+    vb.memory = "2048"
+  end
   #
   # View the documentation for the provider you are using for more
   # information on available options.
他にもよく使用する設定を確認しておきましょう。

もう一度provisioningを実行してから、アクセスしてみます。

vagrant@localhost ~ $ curl -v 'http://localhost:8090'
* Rebuilt URL to: http://localhost:8090/
* Hostname was NOT found in DNS cache
*   Trying ::1...
* Connected to localhost (::1) port 8090 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8090
> Accept: */*
>
< HTTP/1.1 302 Found
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Location: /bootstrap/selectsetupstep.action
< Content-Type: text/html;charset=UTF-8
< Content-Length: 0
< Date: Sat, 03 Jun 2017 07:18:52 GMT
<
* Connection #0 to host localhost left intact

/bootstrap/selectsetupstep.action に案内されたので稼働していそうですね。

ブラウザからアクセスする

Windowsのブラウザからアクセスさせてみましょう。

ホストマシン => VMのポートフォワーディング

VMの8090, 8091ポートにホストマシンのブラウザから18090, 108091ポートでアクセスできるようにしてみます。

   # Create a forwarded port mapping which allows access to a specific port
   # within the machine from a port on the host machine and only allow access
   # via 127.0.0.1 to disable public access
-  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
+  config.vm.network "forwarded_port", guest: 8090, host: 18090, host_ip: "127.0.0.1"
+  config.vm.network "forwarded_port", guest: 8091, host: 18091, host_ip: "127.0.0.1"

   # Create a private network, which allows host-only access to the machine
   # using a specific IP.
-  # config.vm.network "private_network", ip: "192.168.33.10"
+  config.vm.network "private_network", ip: "192.168.33.10"

   # Create a public network, which generally matched to bridged network.
   # Bridged networks make the machine appear as another physical device on

vagrant up してから http://127.0.0.1:18090 にアクセスしたところセットアップ画面が表示されました。

なぜかメモリリークでコンテナが落ちていたため `docker start` で再起動させました。

総括

VagrantとDockerでConfluenceを実行できる環境を作り、実際にブラウザからアクセスしてみました。

前提にもありますように 実際の運用には向いていません
Open JDKは非対応ですし、データ部分をマウントする必要があります。

コメントを残す