状況
- ローカルにたてているmattermostをAWSに移行したい
- 移行先のAWSではポートが自由にあけられない(tsurai)ため、nginxでリバースプロキシをたてる必要がある
- 1つのサーバー上に様々なアプリケーションを動かす可能性があるためdockerを使いたい
環境
AWSのEC2上
OS: CentOS7.5
構成
そして最終ディレクトリ構成は以下のようになります。
├── dev-nginx
│ ├── Dockerfile
│ └── nginx.conf
└── docker-compose.yml
docker-composeの設定
複数dockerコンテナを立てるのであればdocker-composeが便利だよ、という記事を見たので今回はdocker-composeを使っていきます。
docker-composeの細かい説明はドキュメントを参考にしてください。
docker-composeのインストール
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
上記でインストール完了。
インストールされていることを確認します。
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
簡単なdocker-compose.ymlで構成をつくる
まずは簡単なdocker-compose.ymlでうまくdocker-composeが動くことを確認します。
---
proxy:
image: nginx
links:
- mattermost:mattermost
ports:
- "80:80"
mattermost:
image: mattermost/mattermost-preview
ports:
- "8065:8065"
そして起動
$ docker-compose up -d
Creating works_mattermost_1 ... done
Creating works_proxy_1 ... done
<IP>:8080
にアクセスするとWelcome to nginx!と挨拶される。
お気づきだと思いますが、nginxの設定ファイルをいじっていないのでmattermostにはアクセスできません。
doneって言ってるしきっとmattermostも起動しているはず・・・感じるぜ・・・mattermostの力をよぉ
一旦消す
$ docker-compose stop
Stopping works_proxy_1 ... done
Stopping works_mattermost_1 ... done
$ docker-compose rm
Going to remove works_proxy_1, works_mattermost_1
Are you sure? [yN] y
Removing works_proxy_1 ... done
Removing works_mattermost_1 ... done
nginxの設定
つづいてnginxの設定をしていきます。
mattermostのドキュメントを参考にnginx.confを作成します
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
# include /etc/nginx/conf.d/devnginx.conf;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://mattermost:8065;
}
location / {
client_max_body_size 50M;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://mattermost:8065;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
先ほどdocker-composeで立ち上げたnginxではデフォルトのnginx.confが使用されるため、このnginx.confを使うdocker imageをビルドします。
ビルドするためのDockerfileはこちら
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
CMD nginx -g "daemon off;"
docker-composeのbuild
にDockerfile及び必要な設定ファイル(ここではnginx.conf)のディレクトリを指定すると、ビルドを自動で行ってくれます!便利
最終的なdocker-compose.yml
というわけで、nginxのビルドを含めたdocker-compose.ymlは以下のようになります。
---
proxy:
build: dev-nginx
links:
- mattermost:mattermost
ports:
- "80:80"
mattermost:
image: mattermost/mattermost-preview
ports:
- "8065:8065"
volumes:
- /docker/mattermost/mysql:/var/lib/mysql
こちらをもとにdocker-composeを実行します
$ docker-compose up -d
Building proxy
Step 1/3 : FROM nginx
---> 568c4670fa80
Step 2/3 : COPY nginx.conf /etc/nginx/nginx.conf
---> 7d08e795c3bd
Step 3/3 : CMD -g daemon off;
---> Running in 6e9f4b301844
Removing intermediate container 6e9f4b301844
---> be43b58a3503
Successfully built be43b58a3503
Successfully tagged works_proxy:latest
WARNING: Image for service proxy was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating works_mattermost_1 ... done
Creating works_proxy_1 ... done
これで無事mattermostが使えるようになりました!!
mattermostのバックアップリストア
さて、本題とは少しそれてしまいますが、今回mattermostのバックアップリストアも実施する必要があったため、そちらの手順も残したいと思います。
前の環境もdockerだったので、mattermostのbackupドキュメントとdockerのドキュメントを参考にバックアップリストアを行います。
mattermostで使用しているDBをバックアップする
dockerのドキュメントを参考にしながら実行します。
$ sudo docker run --rm --volumes-from mattermost-preview -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar <mattermostのsqlディレクトリ>
このmattermostのsqlディレクトリ
ですが、私の場合/var/lib/mysqlにありました。
バックアップしたDBをリストアする
これやり方本当にあっているのかわからないのですが、私はこうしました
- バックアップしたtarファイルを任意の場所に置き、解凍する
- 解凍場所をdocker-composeで指定する
volumes:
- /docker/mattermost/mysql:/var/lib/mysql
上のdocker-compose.ymlで書かれているこの部分ですね。
DB以外のバックアップリストア
mattermostのドキュメントを見ると、DB以外で保存されている設定ファイルがあるのでバックアップリストアしてくださいとありました。
- config/config.json
- サーバーの設定が書かれているファイル
- SAMLを使用している場合はconfigディレクトリごとバックアップしてくださいとあります
- ./dataディレクトリ
- デフォルトではここに添付ファイルなどが格納されている
- デフォルトじゃない場合config.jsonにDirectoryに設定されている
- S3に添付ファイルを保存する設定にしている人は特に何もしなくても大丈夫
私は面倒でこの2つまだやってないです
参考
以下の記事を参考にしました!
https://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce
https://qiita.com/mikoski01/items/7d71ef7d167a6b78219a