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


容器的组成
我已经根据以下内容编写了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