MongoDB
AWS
docker-compose
crowi-plus

概要

CentOSを構築し、その上でCrowi Plusを動かす。
バックアップも日々取得し、AWSに飛ばす。

OS準備

以下の条件でCentOS7.4をインストール
Software: minimal
timezone: Asia/Tokyo
Keyboard: Japanese
Network Setting: 192.168.80.15
hostname: crowiplus1

Docker Install

参考

Dockerレポジトリの登録

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Dockerインストール

yum install docker-ce
systemctl start docker
docker run hello-world

Crowi Plusのインストール

pipインストール(Epelレポジトリが必要)

参考

yum install -y epel-release
yum install -y python-pip

CrowiPlusのインストール

[root@crowiplus1 crowi-plus]# yum install -y git
[root@crowiplus1 crowi-plus]# pip install docker-compose
[root@crowiplus1 crowi-plus]# git clone https://github.com/weseek/crowi-plus-docker-compose.git crowi-plus
[root@crowiplus1 crowi-plus]# cd crowi-plus
[root@crowiplus1 crowi-plus]# cp -p docker-compose.yml docker-compose.yml.orig
[root@crowiplus1 crowi-plus]# vi docker-compose.yml
[root@crowiplus1 crowi-plus]# diff docker-compose.yml docker-compose.yml.orig
[root@crowiplus1 crowi-plus]# diff docker-compose.yml.orig docker-compose.yml
9c9
<       - 127.0.0.1:3000:3000    # localhost only by default
---
>       - 0.0.0.0:3000:3000    # localhost only by default
23c23
<       # - FILE_UPLOAD=local    # activate this line if you do not want to use AWS for file upload
---
>       - FILE_UPLOAD=local    # activate this line if you do not want to use AWS for file upload
34a35,36
>     ports:
>       - 0.0.0.0:27017:27017
47c49
<       - "ES_JAVA_OPTS=-Xms256m -Xmx256m"  # increase amount if you have enough memory
---
>       - "ES_JAVA_OPTS=-Xms512m -Xmx512m"  # increase amount if you have enough memory

[root@crowiplus1 crowi-plus]# docker-compose up

変更点としては、
- 外部からアクセスできるように、0.0.0.0に変更
- ローカルのファイルアップロードを有効化
- MongoDBのポートもフォワードさせる(バックアップのため)
- ElasticSearchのメモリサイズを256->512に(余裕があれば)

初期設定

ブラウザでIP:3000にアクセスして初期設定を行う。

初期設定1
初期設定2
初期設定3

これで使用可能な状態になる。

バックアップ

こちらを参考に。

バックアップすべき対象の確認

docker-compose.ymlより。

volumes:
crowi_data:/data
mongo_configdb:/data/configdb
mongo_db:/data/db
redis_data:/data
es_data:/usr/share/elasticsearch/data
es_plugins:/usr/share/elasticsearch/plugins
./esconfig:/usr/share/elasticsearch/config

これに対応するローカルは、
docker volume ls
docker volume inspect
で確認できる。

/var/lib/docker/volumes/crowiplus_crowi_data/data
/var/lib/docker/volumes/crowiplus_mongo_configdb/data
/var/lib/docker/volumes/crowiplus_mongo
db/_data
/var/lib/docker/volumes/crowiplus
redis_data/data
/var/lib/docker/volumes/crowiplus_es_data/_data
/var/lib/docker/volumes/crowiplus
es_plugins/_data

mongodbは専用のdumpツールでバックアップする。
crowiのdataボリュームの一部(アップロードされたファイル)はtarでバックアップ
他は不要らしい。

AWS

S3にてバケットの作成

バケット作成1

バケット作成2

バケット作成3

バケット作成4

バケット作成5

IAMサービスから、ユーザを作成
IAM1

IAM2

IAM3

IAM4

IAM5

IAM6

IAM7

この画面から、Access IDとシークレットアクセスキーを確認しておく。

[root@crowiplus1 ~]# pip install awscli
[root@crowiplus1 crowi-plus]# aws configure
AWS Access Key ID [None]: (AWSコンソールで確認)
AWS Secret Access Key [None]: (AWSコンソールで確認)
Default region name [None]:
Default output format [None]: json
[root@crowiplus1 crowi-plus]#
[root@crowiplus1 crowi-plus]# aws s3 cp docker-compose.yml s3://crowi-backup-keisuke1208
upload: ./docker-compose.yml to s3://crowi-backup-keisuke1208/docker-compose.yml

mongodbのバックアップ

mongodumpのインストールから実施

[root@crowiplus1 tmp]# vi /etc/yum.repos.d/mongodb-org-3.6.repo
[root@crowiplus1 tmp]# cat /etc/yum.repos.d/mongodb-org-3.6.repo
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

[root@crowiplus1 tmp]# yum install mongodb-org-shell
[root@crowiplus1 tmp]# yum install mongodb-org-tools
[root@crowiplus1 tmp]# mongodump --host=crowiplus1 --port=27017 -d crowi --gzip --archive=mongodbdump.gz

アップロードファイルのバックアップ

Crowiにアップロードされたファイルのバックアップ

[root@crowiplus1 tmp]# tar cvf uploadfiles.tar /var/lib/docker/volumes/crowiplus_crowi_data/_data/uploads/
[root@crowiplus1 tmp]# gzip uploadfiles.tar

AWSへのバックアップ

[root@crowiplus1 tmp]# ls
ks-script-2XhXhn  systemd-private-9853899e514c4a73ab85d7524772b40a-vgauthd.service-0iuEtk   uploadfiles.tar.gz
mongodbdump.gz    systemd-private-9853899e514c4a73ab85d7524772b40a-vmtoolsd.service-BVVso8  yum.log
[root@crowiplus1 tmp]#
[root@crowiplus1 tmp]# tar cvfz 20180305.tar.gz *.gz
[root@crowiplus1 tmp]# aws s3 cp 20180305.tar.gz s3://crowi-backup-keisuke1208

これでOK。後は参考同様にシェル化してcron登録しておけばよい。

[root@crowiplus1 crowi-plus]# cat backup.sh
#!/bin/bash

TODAY=`date +"%Y%m%d"`
WORKDIR=/root/crowi-plus
tar cvfz ${WORKDIR}/${TODAY}_uploads.tar /var/lib/docker/volumes/crowiplus_crowi_data/_data/uploads/
mongodump --host=crowiplus1 --port=27017 -d crowi --gzip --archive=${WORKDIR}/${TODAY}_mongodbdump.gz
tar cvfz ${WORKDIR}/${TODAY}_crowi-backup.tar.gz ${WORKDIR}/${TODAY}_uploads.tar ${WORKDIR}/${TODAY}_mongodbdump.gz
aws s3 cp ${WORKDIR}/${TODAY}_crowi-backup.tar.gz s3://crowi-backup-keisuke1208

rm -f ${WORKDIR}/${TODAY}_uploads.tar
rm -f ${WORKDIR}/${TODAY}_mongodbdump.gz
find ${WORKDIR} -name "*.tar.gz" -mtime +7 -delete

[root@crowiplus1 crowi-plus]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@crowiplus1 crowi-plus]# crontab -l
0 3 * * * /root/crowi-plus/backup.sh

終わりに

これだけだとAWS上に無制限にバックアップがとられるので、要注意。