はじめに
みなさん、社内でチャットしてますか?
IT企業であれば、チャットの導入がされているのは当たり前じゃないでしょうか。
しかしながら、世にはチャットを導入していない企業もあります。
この記事はそんな悩ましい企業に勤めている方々へ、Vagrantを使ってVM環境にチャットサーバ(mattermost)を立てるVagrantfileを作成してみました。
簡単に、かつPCの環境をできるだけ汚さずチャットができるようになります。
https://github.com/ryoutoku/vagrant
私の勉強も踏まえ、Vagrantfileで作成した環境で重要か?と思う部分をやはりざっくり説明したいと思います。
注意:
- Vagrant初心者なので間違いがあればご指摘下さい。
- この方法をした結果、社内ITインフラ担当に怒られても責任は持ちません1。
想定読者
- 簡易的にチャットサーバ導入を検討している
- 社内ITインフラギリギリを攻めれる
結論
解説は良いからさっさと実行したい、という方はこちら手順でできる(はず)。
-
VirtualBox
をインストールする -
Vagrant
をインストールする -
vagrant-proxyconf
をインストールする - こちらを任意のフォルダにダウンロードする
- 必要に応じて
Vagrantfile
のproxy
とproxy_port
を設定する - 4.でダウンロードしたフォルダで以下コマンドを実行する
vagrant up
- VMが起動するので、
http://{ホストPCのIPアドレス}:8065/
にアクセスし、Mattermostにアクセスできることを確認する - 必要に応じてホストOSのポート8065を開放するなど、アクセス関係を設定すると同じネットワーク上のPCからVM環境にアクセス可能になる
構築する環境
構築する環境や必要なツールは以下のようになっています。
ホストOS:
- VirtualBox
- Vagrant
- vagrant-proxyconf (VM内でプロキシ設定を行うプラグイン)
ゲストOS(VM環境):
- Ubuntu Server 14.04
- Docker
- Mattermost (slackクローンチャットアプリ)
Vagrantfile解説
構築内容
Vagrantfileで構築するにあたり、以下環境を作成します。
- VM環境にDockerを使用してMattermostを立ち上げる
- ホストOSから立ち上げたMattermostにアクセス可能にする
ここで考慮すべき設定は以下になります。
- ホストOSからVM環境にアクセス可能にする
- ホストオンリーアダプタを使用し、VM環境のIPアドレスを指定する
- VM環境のMattermostにホストPC以外からアクセス可能にする
- ポートフォワーディングにより、VM環境のMattermostのポート番号とホストOSのポート番号とを関連付ける
ホストOSからVM環境にアクセス可能にする
ホストOSからVM環境にアクセス可能にするためには、ホストオンリーアダプタを設定する必要があります。
また、IPを指定してVM環境にアクセスできるようにしています(以下ではIPを192.168.56.101にしています)。
# ホストオンリーアダプタをipアドレス固定で追加
config.vm.network "private_network", ip: "192.168.56.101"
VM環境のMattermostにホストPC以外からアクセス可能にする
VM環境のMattermostに他PCからアクセスするためには、ホストPCのアクセスをVM環境に転送する(=ポートフォワーディング)する必要があります。
今回、Mattermostはポート番号8065で起動するので、ホストPCも同じく8065にしておきます。
こうすることで、http://{ホストPCのIP}:8065
のアクセスがhttp://{VM環境のIP}:8065
にポートフォワーディングされ、Mattermostにアクセスすることができます。
# ポート
config.vm.network "forwarded_port", guest: 8065, host: 8065
その他 1:proxy, proxy_portの設定
悩ましい企業に勤めている方の多くは、プロキシサーバ経由で外部のネットワークにアクセスしていると思います。
VM環境でも、DockerやMattermostなど外部ネットワークから取得するものもあるため、
先に挙げたvagrant-proxyconf
を使って、プロキシの設定を行っています。
if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://#{proxy_ip}:#{proxy_port}"
config.proxy.https = "http://#{proxy_ip}:#{proxy_port}"
config.proxy.no_proxy = "localhost,127.0.0.1"
end
その他 2:Docker, Mattermostのインストール
VM環境にDocker, Mattermostをインストールしている部分は以下になります。
以下はvagrant up
した際など、VM環境でroot権限で実行するコマンドを記載しています。
中身はDockerインストール&DockerでのMattermost起動なので、割愛します。
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get remove docker docker-engine docker.io
apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
apt-get install apt-transport-https ca-certificates curl software-properties-common aptitude
curl -O https://download.docker.com/linux/ubuntu/dists/trusty/pool/stable/amd64/docker-ce_18.03.1~ce-0~ubuntu_amd64.deb
dpkg -i docker-ce_18.03.1~ce-0~ubuntu_amd64.deb
# 依存関係が壊れるらしいので必要
apt-get -f -y install
docker run --restart=always --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview
SHELL
最後に
過去の私と同じ環境に身を置く方へ、ということで、色々と調べながら初めてVagrantfileを作成してみました。
やってみればVagrantもあまり難しくないのかなーと思います(間違ってるかもしれませんが)。
ので、悩ましい企業にいる方も、今回のMattermostと同じようにVM環境にツールを導入して技術の幅を広げてみてはいかがでしょうか?
-
VirtualBox,Vagrant,Dockerにアクセス&ダウンロードできるのであれば問題無いような気がしますが。。。 ↩