ちょっと前の話ですが、チーム内でのナレッジ共有を促進したいが,有料だと稟議が面倒・・・ということでオープンソース版Qiita的な「knowledge」と「Rocket.Chat」を導入した時の手順を備忘として残す。前半はKVM、後半はdocker周りのメモ。
前提
- knowledgeはお試しに自分のVPS環境に構築していたので、社内環境にデータのお引越しをする(練習も兼ねて)
- 社内ローカル環境にgitBucketとか動かしてるKVM環境があったので、1個VM追加して、Dockerホストとして今後もそこに複数サービスを立てていく運用とする。
概要
- 社内のKVM環境でDockerホスト用のVM準備
- ネットワーク関連の設定
- 作成したVMにDockerインストール
- Rocket.Chatとknowledgeをdocker-composeで構築
- 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推奨となっている
- 旧環境へログイン
- 「システム設定」→「組み込みデータベースのバックアップと復元」
- データベースサーバーの稼働状態を「停止する」
- 「バックアップ(データダウンロード)」→「knowledge.zip」がDLされる
- docker-composeで構築後,
10.x.x.yy:8080
にログイン - 初期設定用の管理者アカウントadmin/admin123でログイン
- 「システム設定」→「組み込みデータベースのバックアップと復元」
- データベースサーバーの稼働状態を「停止する」
- 「復元(データアップロード)」→4. で入手した「knowledge.zip」をアップロード
- 「システム設定」→「 データベースの接続先変更」で下記を入力
項目 | 値 |
---|---|
URL | jdbc:postgresql://db/knowledge_production |
user | postgres |
password | Password |
schema | public |
max connection | 0(デフォルト) |
auto commit | false(デフォルト) |
「組み込みDBで保存していたデータをカスタム設定のDBにコピー」 これでデータが組み込みのH2DB→Postgresに移行された