MongoDB
AWS
docker-compose
crowi-plus
More than 1 year has passed since last update.


概要

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上に無制限にバックアップがとられるので、要注意。