LoginSignup
1
5

More than 5 years have passed since last update.

KVM環境にdocker-composeでknowledgeとRocket.Chatを立てるまで

Last updated at Posted at 2018-10-04

ちょっと前の話ですが、チーム内でのナレッジ共有を促進したいが,有料だと稟議が面倒・・・ということでオープンソース版Qiita的な「knowledge」と「Rocket.Chat」を導入した時の手順を備忘として残す。前半はKVM、後半はdocker周りのメモ。

前提

  • knowledgeはお試しに自分のVPS環境に構築していたので、社内環境にデータのお引越しをする(練習も兼ねて)
  • 社内ローカル環境にgitBucketとか動かしてるKVM環境があったので、1個VM追加して、Dockerホストとして今後もそこに複数サービスを立てていく運用とする。

概要

  1. 社内のKVM環境でDockerホスト用のVM準備
  2. ネットワーク関連の設定
  3. 作成したVMにDockerインストール
  4. Rocket.Chatとknowledgeをdocker-composeで構築
  5. knowledgeのデータのお引越し

KVMで環境準備

OSはUbuntu 16.04とする
ubuntuのisoは下記から取得(今回はUbuntu 16.04)
http://ftp.riken.jp/Linux/ubuntu-releases/16.04/ubuntu-16.04.4-server-amd64.iso

社内のKVM環境に接続して仮想マシン用ディスク作成

$ qemu-img create -f qcow2 /var/lib/libvirt/images/docker-svc.img 30G

virshコマンドで仮想マシン用ディスクをアタッチして仮想マシン作成

$ virt-install --connect=qemu:///system \
--name=docker-svc \
--hvm \
--disk path=/var/lib/libvirt/images/docker-svc.img,device=disk,bus=virtio,format=qcow2 \
--ram=4096 \
--vcpus=4 \
--cdrom /usr/local/kir/var/libvirt/images/ubuntu-16.04.4-server-amd64.iso \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0,keymap=ja \
--os-type=linux

GUIでUbuntuインストール。下記参照
https://www.itcore.jp/tips/ubuntu1604.php

VM確認

$ virsh list --all

 Id    名前                         状態
----------------------------------------------------
 99    docker-svc                     実行中

VNCのポート確認

$ virsh vncdisplay docker-svc
:0

ネットワーク関連の設定

※VNC接続クライアントは別途入手

VNCで10.x.x.yy:0に接続

存在するNICを確認

$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ・・・・ brd ・・・・

ネットワークの設定を編集してipを固定
loじゃない方のNICの設定を追記する

$ vi /etc/network/interfaces

auto lo ←↓ループバックの定義
iface lo inet loopback

auto ens3 ←OS起動時に有効にする
iface ens3 inet static ←静的IPを使うこと定義(DHCP使うなら、staticの部分を dhcp にすればよい)
address 10.x.x.yy
netmask 255.255.0.0
gateway 10.x.x.1
dns-nameservers 10.z.z.zz

ネットワーク再起動

$ service networking restart

指定した固定IPにssh接続できる

ssh 10.x.x.yy -l ubuntu

毎回sudo打つのも面倒なのでrootパスワード設定

$ sudo passwd root
[sudo] password for <user名>        ← 現在のユーザのパスワードを入力
Enter new UNIX password:            ← 設定するパスワードを入力
Retype new UNIX password:           ← 設定するパスワードを入力
passwd: password updated successfully

su でユーザ変更を行う

$ su -
password:
#            ← プロンプトが#に変わる

Web用にポート開放

$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Dockerインストール

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce

Docker-Composeインストール

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

RocketChat構築

docker-composeで構築

cat <<EOF> docker-compose.yml
db:
  image: mongo:latest
  volumes:
    - ./data/runtime/db:/data/db
    - ./data/dump:/dump

rocketchat:
  image: rocketchat/rocket.chat:latest
  environment:
    - MONGO_URL=mongodb://db:27017/rocketchat
    - ROOT_URL=http://localhost
    - Accounts_UseDNSDomainCheck=false
  links:
    - db:db
  ports:
    - 3000:3000
EOF

docker-compose up -d

knowledge構築

docker-composeで構築

cat <<EOF> docker-compose.yml
version: '2'
services:
    app:
        image: koda/docker-knowledge:latest
        #build: .
        volumes:
            - ./volumes/knowledge:/root/.knowledge
        ports:
            - 8080:8080
        restart: always
        depends_on:
            - "db"
    db:
        image: postgres:9
        environment:
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=password
            - POSTGRES_DB=knowledge_production
        volumes:
            #- ./volumes/initdb:/docker-entrypoint-initdb.d
            - ./volumes/postgres/data:/var/lib/postgresql/data
        restart: always

EOF

docker-compose up -d

knowledgeのデータのお引越し

もともと仮で立てていVPSの環境からデータ移行&postgresにDB変更
※knowledgeでは初期では組み込みH2DBがDBとして設定されておりこれをとりあえず使っていたが,長期的に運用する場合はPostgres推奨となっている

  1. 旧環境へログイン
  2. 「システム設定」→「組み込みデータベースのバックアップと復元」
  3. データベースサーバーの稼働状態を「停止する」
  4. 「バックアップ(データダウンロード)」→「knowledge.zip」がDLされる
  5. docker-composeで構築後,10.x.x.yy:8080にログイン
  6. 初期設定用の管理者アカウントadmin/admin123でログイン
  7. 「システム設定」→「組み込みデータベースのバックアップと復元」
  8. データベースサーバーの稼働状態を「停止する」
  9. 「復元(データアップロード)」→4. で入手した「knowledge.zip」をアップロード
  10. 「システム設定」→「 データベースの接続先変更」で下記を入力
項目
URL jdbc:postgresql://db/knowledge_production
user postgres
password Password
schema public
max connection 0(デフォルト)
auto commit false(デフォルト)

「組み込みDBで保存していたデータをカスタム設定のDBにコピー」 これでデータが組み込みのH2DB→Postgresに移行された

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5