姫路IT系勉強会 2018.08 Vagratn/Ansibleハンズオン

自己紹介

ハンズオン

適宜、メモを書いていきましょう。

Vagrantとは

  • 仮想環境/クラウド環境を統一的なインターフェイスでコントロールする開発支援ツール
  • 開発環境を簡単に作れるぜ! VirtualBoxとか経由して。
    • サーバー構築のスキルがなくてもコマンドでいける
  • ベースになるBox = イメージファイルがまず必要
  • Vagrant コマンド(https://www.vagrantup.com/docs/cli/)
    • vagrant box
    • vagrant up
    • vagrant halt
    • vagrant destroy
  • vagrant の Provision で仮想化の起動後の設定やらを記述する
    • vagrant up でProvisionされる時にAnsibleも走る。
    • 今回は、ansible_localを使う
    • ホストOSの影響を排除するため、shell provision -> ansible インストール
  • 使用するリポジトリ(https://github.com/histudy/vagrant-redmine)
    • extra_vars.ymlを使った場合、初期構築時のRedmineのログイン情報と異なっている(user: admin, password: password)

手順

※ 会場のネットワーク環境の混雑解消のため vagrantのベースboxを事前に取得しておいた。

vagrant box add histudy/stretch

git clone https://github.com/histudy/vagrant-redmine.git
cp -a extra_vars_example.yml extra_vars.yml

extra_vars.yml 内の、Redmine プラグインインストール部分のうち、「agile」「checklists」をコメントアウト(565行以降)

  diff -u extra_vars_example.yml extra_vars.yml
  --- extra_vars_example.yml	2018-08-17 00:23:30.000000000 +0900
  +++ extra_vars.yml	2018-08-18 14:29:09.000000000 +0900
  @@ -562,11 +562,11 @@
     # チケットの登録日を日付で表示する機能を追加
     # ref: https://github.com/suer/redmine_absolute_dates
     repo: "https://github.com/suer/redmine_absolute_dates.git"
  -  - name: agile
  +  #- name: agile
     # カンバン機能を追加
     # ref: https://www.redmineup.com/pages/ja/plugins/agile
  -  file: /vagrant/plugins/redmine_agile-1_4_6-light.zip
  -  - name: checklists
  +  #file: /vagrant/plugins/redmine_agile-1_4_6-light.zip
  +  #- name: checklists
     # チケットにチェックリストを追加
     # ref: https://www.redmineup.com/pages/ja/plugins/checklists
  -  file: /vagrant/plugins/redmine_checklists-3_1_11-light.zip
  +  #file: /vagrant/plugins/redmine_checklists-3_1_11-light.zip

yamlを書き換える前に仮想マシンを起動している場合、仮想マシンを削除し再起動しておく

vagrant destroy

仮想マシンを起動する

vagrant up

http://localhost:8080/ にアクセス!

アカウント情報は extra_var.yml の redmine_admin のセクションを参照してください。


トラブルシューティング

macOSで VirtualBox のインストールに失敗する

インストールに失敗したあと、OSを再起動し、システム環境設定 -> セキュリティ & プライバシー で Oracle からのインストールを許可し、再度 VirtualBox をインストールする。

vagrant upするとSSHの接続でリトライを繰り返して止まる

「Warning: Remote connection disconnect. Retrying…」を繰り返してSSHで止まってしまいAnsibleが実行されない

==> 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: Warning: Remote connection disconnect. Retrying...
  default: Warning: Remote connection disconnect. Retrying...

環境変数を設定してからvagrant upを実行するとよい。

export SSH_AUTH_SOCK=""

「SSH auth method: private key」で止まる

VirtualBoxのネットワーク接続を見て、「ケーブル接続」のチェックが外れていれば、チェックを入れて vagrant reload する。

GalliumOSの特殊な環境です

  • GalliumOS:ChromeBookに最適化したという謳い文句のLinuxフレーバー、Xubuntuベース
    • Ansibleの設定を書いたansible_extra_vars Ymlファイルをロードしない
    • Ruby処理系? 2.3ー> 2.4にアップしたが同じくダメ
  • もしかしたらUbuntuはパッケージのVirtualBox/Vagrantを使うべきかも
    • VirtualBoxは最新のをOracleからダウンロードしていたのを削除、apg-getで入れ直した
  • Yamlのロードはコメントアウト
#extra_var_file = File.expand_path(File.join(File.dirname(__FILE__), 'extra_vars.yml'))
#if File.exists?(extra_var_file)
#  ansible_extra_vars = YAML.load_file(extra_var_file)
#end
  • Ansibleのエラー
ansible local provisioner:
The following settings shouldn't exist: become, compatibility_mode, config_file

メッセージに従ってVagrantファイルを更にコメントアウト

==> default: Configuring and enabling network interfaces...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

ネットワークのエラー IPアドレスの指定をコメントアウト

PLAY [Deploy Redmine] *******
TASK [Gathering Facts] ******
ok: [default]

TASK [mariadb : install ufw package] ***
fatal: [default]: FAILED! =>

ここまでは辿り着きました。

redmine bundle のインストールに失敗

redmineのbundleのインストールに失敗した場合、以下のようにインストールをし直す

  HOST$ vagrant ssh
  VM$ cd /opt/redmine/
  VM$ sudo -u redmine bundle install
  VM$ exit
  HOST$ vagrant provision

http://localhost:8080/ に再アクセス!

redemine で maria dbのmigrateに失敗

redmineのmigrateに失敗した場合、以下のようにmigrateし直す

  HOST$ vagrant ssh
  VM$ cd /opt/redmine/
  VM$ sudo -u redmine rake redmine:plugins:migrate
  VM$ exit
  HOST$ vagrant provision

http://localhost:8080/ にアクセス!

Ansibleのメリット

アプリ開発も、インフラのことが分からないと 「何か分からんけど動かん」 で止まってしまう。

  • サーバー構築手順がymlファイルで残る
    • 手動で構築してしまうと、設定内容が分からない
    • そのまま再利用ができる
    • 似たようなサーバを作る時は流用できる
      • 「構築手順書」としてマニュアル残すより確実&便利
  • Ansibleの練習には、自由に使えるサーバーが必要
    • 仮想化サーバなら手元で作って壊して出来る
    • Vagrant + VirtualBoxだと手元で簡単にできる

vs Docker

  • 用途とか考えて選ぶ
    • アプリケーションのテスト、チューニング、ビルドetc.
  • アプリのテストにはDockerの方が楽かも
  • その分、自由度がない、本番環境との違い
    • 基本Rootユーザーでパーミッションがない
    • 1コンテナ1プロセス
  • 決まりきったモノを動かす場合は、Dockerが楽

質問とか

  • vagrantでhostsを書き換えてくれるプラグイン(vagrant-hostsupdater)は書き戻しもしてくれますか?
    • 戻してくれるけど、vagrantが死んだ場合など戻さないので確認の必要アリ
  • ansible と vagrant がセットになっているのはなぜ?
    • ansible はサーバー構築ツール。使い方を練習するには、vagrant で手元のパソコンでやるのが安くすむからではないか。
  • 一台のサーバーに、複数のユーザーがある。各ユーザーのホームにファイルを配布するには、各ユーザーで接続するか、ルート権限で配布して所有権を修正するか、どちらが良いか。
    • どちらでも良いが、ルート権限で処理をループさせるのも良いかも。
  • gitlabのプロジェクト管理はどうか?
    • gitlabのプロジェクト管理機能を使っている方がいなかった
  • Redmineの使いドコロ
    • 開発者、コードを書く人が複数いる場合の状況把握
    • 機能としては顧客対応、カスタマーサービスにも使える
      • RedmineベースでInvoice作成に対応しているサービスも、小売・物流向け
    • ステータスが細かい、ほぼ無限に増やせる(Backlogは4つ)
    • ロール別の権限設定もできる
      • 「顧客」ロールは「チェック済み」「差し戻し」 のみにする等
    • ここはイマイチ
      • 取っつきにくい見た目
        • テーマ変えられるけど少ない
      • ワークフローを自分で組まなくてはいけない
    • いろいろな人に優しくするのは大変
      • CSVで書き出して、Excel

次回予定!

  • 加古川IT系インフラ勉強会 2018年9月
    • 2018/09/08
  • 姫路IT系勉強会 2018年9月
    • 2018/09/15