用Docker运行PostgreSQL和OwnCloud

之前:将VM的gitlab转移到容器中(顺便升级版本 12.0.3→13.2.4)(顺便学习使用docker-compose)
这是笔者努力学习使用Docker的轨迹。

将DB和ownCloud从VM迁移到Docker容器中。

Untitled(6).png
Untitled(7).png

容器的组成

我已经根据以下内容编写了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或之前的版本。
参考:在pg 10.5上安装失败。

PostgreSQL的备份和恢复

参考文献:汇总了 PostgreSQL 的备份和还原方法。

备份

请指定要备份的数据库名称并执行。

$ pg_dump <database> > <buckup file>

恢复

恢复也是一个简单的命令。

psql <database> < <buckup file>

然而,在执行恢复之前需要先创建数据库。
因此,我创建了一个用于创建对应于备份文件的数据库并进行恢复的Shell脚本。

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的设置进行释义如下:

ownCloud的设置过程

点击登录ID和密码设置框下方的”存储和数据库”标签,可以进行数据库的详细设置,选择PostgreSQL并输入各种项目。对于底部的数据库主机信息,只需输入PostgreSQL容器的服务名称和端口号即可。对于以上的yml文件,输入”db:5432″。

ownCloud的上传限制设置

在初始设置中,每个文件只能上传数百MB。由于ownCloud容器已经配置好接受大文件的设置,所以只需要在反向代理端放宽限制即可。

client_max_body_size 10G; # これを追記

ownCloud备份和恢复

我没有找到关于ownCloud备份和恢复的方法。因为只有很少的文件需要上传,所以我直接复制了数据目录中的文件并上传了。如果有人知道正确的方法,请告诉我,谢谢。

今天我又一次被 Docker 的强大功能所震撼,只需要几个小时,就能够轻松地完成调研工作,与设置虚拟机相比,这简直是戏剧般的速度。

下次:使用Docker来设置Ghost

广告
将在 10 秒后关闭
bannerAds