Docker에서 시작한 Mastodon의 DB를 나중에 영속화

개요



Mastodon, 유행하고 있네요. 나는 또한 기세를 타고 Azure에 인스턴스을 시작했습니다.
훌륭하게 데이터 지속성 설정을 잊은 채로 시작하여 지금에 이르게 됩니다.

v1.2로 올리기 위해 컨테이너를 한 번 떨어 뜨려야하지만,
어떻게 든 데이터를 유지하면서 재부팅이 가능했기 때문에 메모해 둡니다.

……飛んでいくデータを表現しているみたいで嫌ですね。

호스트에 데이터 저장 대상 만들기

今回は /usr/share/mastodon に諸々置いていたため、同じ場所に作成しました。

postgres用ディレクトリ作成
[root@mstdn001 ~]# mkdir /usr/share/mastodon/postgresql

대상 컨테이너 확인

PostgreSQLのコンテナ名を確認します。(横スクロールで見えます)

コンテナ名の確認
[root@mstdn001 ~]# docker ps
CONTAINER ID     IMAGE               COMMAND                  CREATED         STATUS          PORTS                              NAMES
d849f18a9e9b     gargron/mastodon    "bundle exec rails s "   3 days ago      Up 3 days       0.0.0.0:3000->3000/tcp, 4000/tcp   mastodon_web_1
c8fbcc7633de     gargron/mastodon    "bundle exec sidekiq "   3 days ago      Up 3 days       3000/tcp, 4000/tcp                 mastodon_sidekiq_1
33db6dcac1cd     gargron/mastodon    "npm run start"          3 days ago      Up 3 days       3000/tcp, 0.0.0.0:4000->4000/tcp   mastodon_streaming_1
3829643b3b41     postgres:9.6-alpine "docker-entrypoint.sh"   3 days ago      Up 3 days       5432/tcp                           mastodon_db_1
0d764d54cc62     redis:alpine        "docker-entrypoint.sh"   3 days ago      Up 3 days       6379/tcp                           mastodon_redis_1

postgresが動作しているのは mastodon_db_1 ですね。

데이터 구출

docker cp というコマンドで、実データをコンテナ内から取り出します。
docker cp <コンテナ名>:<コンテナ内のフルパス> <ホストの相対パス> の形で入力します。

postgresのデータを救出
[root@mstdn001 ~]# cd /usr/share/mastodon
[root@mstdn001 mastodon]# docker-compose pause
[root@mstdn001 mastodon]# docker cp mastodon_db_1:/var/lib/postgresql/data ./postgresql/data
コピー結果を確認
[root@mstdn001 mastodon]# ls -l ./postgresql/data/
total 56
drwx------. 5 root root    41 Apr 15 14:49 base
drwx------. 2 root root  4096 Apr 17 18:36 global
drwx------. 2 root root    18 Apr 15 14:49 pg_clog
drwx------. 2 root root     6 Apr 15 14:49 pg_commit_ts
drwx------. 2 root root     6 Apr 15 14:49 pg_dynshmem
-rw-------. 1 root root  4492 Apr 15 14:49 pg_hba.conf
-rw-------. 1 root root  1636 Apr 15 14:49 pg_ident.conf
drwx------. 4 root root    39 Apr 15 14:49 pg_logical
drwx------. 4 root root    36 Apr 15 14:49 pg_multixact
drwx------. 2 root root    18 Apr 15 15:20 pg_notify
drwx------. 2 root root     6 Apr 15 14:49 pg_replslot
drwx------. 2 root root     6 Apr 15 14:49 pg_serial
drwx------. 2 root root     6 Apr 15 14:49 pg_snapshots
drwx------. 2 root root     6 Apr 15 15:20 pg_stat
drwx------. 2 root root    63 Apr 18 21:46 pg_stat_tmp
drwx------. 2 root root    18 Apr 15 14:49 pg_subtrans
drwx------. 2 root root     6 Apr 15 14:49 pg_tblspc
drwx------. 2 root root     6 Apr 15 14:49 pg_twophase
-rw-------. 1 root root     4 Apr 15 14:49 PG_VERSION
drwx------. 3 root root    92 Apr 18 17:26 pg_xlog
-rw-------. 1 root root    88 Apr 15 14:49 postgresql.auto.conf
-rw-------. 1 root root 22205 Apr 15 14:49 postgresql.conf
-rw-------. 1 root root    24 Apr 15 15:20 postmaster.opts
-rw-------. 1 root root    85 Apr 15 15:20 postmaster.pid

docker-compose.yml 수정

docker-compose.yml を修正して、ホストとコンテナのディレクトリを紐付けます。
Uncomment to enable DB persistance の下2行がコメントになっているので解除し、パスを修正します。
- <ホストの相対パス>:<コンテナ内のフルパス> となります。先ほどとは逆なので注意です。

docker-compose.yml
version: '2'
services:

  db:
    restart: always
    image: postgres:9.6-alpine
### Uncomment to enable DB persistance
     volumes:
       - ./postgres/data:/var/lib/postgresql/data


#(以下略)

# 今回の内容とは関係ありませんが、
# 「image: postgres:alpine」を「image: postgres:9.6-alpine」に書き換えることで、
# 勝手にPostgresのバージョンが上がることを防いでいます。

컨테이너 재시작

Postgres用コンテナを再起動します。
docker-compose を利用するためディレクトリの移動を忘れずに。

dbコンテナを再起動
[root@mstdn001 ~]# cd /usr/share/mastodon/
[root@mstdn001 mastodon]# docker-compose unpause
[root@mstdn001 mastodon]# docker-compose up -d db
Starting mastodon_db_1

동작 확인

PCや適当なクライアントから繋いでみたり、トゥートしてみて確認します。
ちゃんと動いていて、過去のデータも残っていれば完璧です。

先にdocker-compose.ymlを修正しておいて、 docker cp からコンテナ再起動までの時間をなるべく短くした方が良いかもしれません。

참고 정보

下記サイト等を参考にしました。ありがとうございました。

  • Mastodon을 DB 영속화 잊어버렸지만 최소한의 희생으로 끝냈다 - new_pill’s blog
  • Mastodon을 Docker로 세울 때 최소한으로 유지 - chaotic valkyrie

  • 2017/04/19 추가
    @ 히데쿠로 님의 편집 요청을 바탕으로 일부 절차를 수정했습니다.
    조언 감사합니다!

    좋은 웹페이지 즐겨찾기