1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerでPostgreSQLとOwnCloud

Last updated at Posted at 2020-08-16

前回:VMのgitlabをコンテナへ(ついでにバージョンアップ 12.0.3→13.2.4)(ついでにdocker-compose)
これはそろそろDockerを使えるようになりたい筆者の試行錯誤の軌跡です。

DBとownCloudをVMからDockerコンテナへ移行

前回は、VMのgitlabをDockerコンテナに移行しました。
Untitled(6).png

今回は、VMサーバー群のアプリケーションのうち、postgreSQLとownCloudをDockerコンテナに移行して、Resourceを閉じます。
Untitled(7).png

コンテナの構成

docker-compose.ymlは以下のようにしました。

docker-compose.yml抜粋
    db:
        image: postgres:9.6.19
        environment:
            POSTGRES_USER: psql
            POSTGRES_PASSWORD: xxxx
        volumes:
            - /home/fclef/docker/server/db/data:/var/lib/postgresql/data
            - /home/fclef/docker/server/db/init:/docker-entrypoint-initdb.d
            - /home/fclef/docker/server/db/backup:/tmp/backup
        ports:
            - 5432:5432

    owncloud:
        image: owncloud:latest
        restart: always
        volumes:
            - /home/fclef/docker/server/owncloud:/var/www/html
        ports:
            - 51080:80

PostgreSQLのイメージをlatestに指定すると、owncloudの初期化でエラーが出ました。
PostgreSQLを9.6以前のバージョンにする必要があるようです。
参考:Install fails on pg 10.5

PostgreSQLのバックアップとリストア

参考:PostgreSQLのbackup, restore方法まとめ

バックアップ

バックアップしたいデータベース名を指定して実行します。

$ pg_dump <database> > <buckup file>

リストア

リストアもコマンドは簡単です。

psql <database> < <buckup file>

ただし、リストア前にデータベースを作成しておく必要があります。
そこで、バックアップファイルに対応するデータベースを作成してリストアするシェルスクリプトを作成しました。

1_init.sh
files=`ls -1 /tmp/backup/*`
for file in ${files[*]}; do
    database=`echo ${file} | sed -r 's@.*/(.*).backup.sql@\1@g'`
    echo "init ${database}."
    psql -c "create database ${database};"
    psql ${database} < ${file}
done

このスクリプトを/docker-entrypoint-initdb.dにマウントします。
このディレクトリ下にある.sqlファイル及び.shファイルはコンテナ起動時に実行してくれます。
ファイル名の先頭に数字を付けておくと、数字順に実行してくれます。

ownCloudのセットアップ

nginxのコンテナからowncloudのコンテナへのリバースプロキシを設定してアクセスすると、
初期セットアップの画面が開きます。
※スクショし忘れたので拾い画です。

ログインID,パスワード設定枠の下にある「ストレージとデータベース」というラベルをクリックするとデータベースの詳細設定ができるので、
PostgreSQLを選択して各種項目を入力します。
最下部のDBのホスト情報については、PostgreSQLコンテナのサービス名とポート番号を入力すればOKです。
上記ymlファイルなら、"db:5432"と入力します。

ownCloudのアップロード上限設定

初期設定では、1ファイルあたり数百MBまでしかアップロードできません。
ownCloudコンテナ側はすでに大きいファイルを受け入れる設定がされているので、リバースプロキシ側で制限を緩めてあげるだけです。

nginxコンテナのowncloudリバースプロキシ設定
client_max_body_size 10G; # これを追記

ownCloudのバックアップとリストア

ownCloudのバックアップとリストアの方法は調べてもよくわかりませんでした。
少ししかアップロードしているファイルがなかったので、データディレクトリのファイルを直接コピーしてアップロードしました。
正攻法を知っている方がいらっしゃったら教えていただけると幸いです。

大きく詰まることなく、調べながらでも数時間で終えることができました。
VMセットアップに比べると劇的スピードです。。
Dockerすげぇと今日も思ったのでした。

次回:DockerでGhost

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?