概要
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にアクセスして初期設定を行う。
これで使用可能な状態になる。
バックアップ
こちらを参考に。
バックアップすべき対象の確認
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にてバケットの作成
この画面から、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上に無制限にバックアップがとられるので、要注意。