nextcloud可以用sqlite就完成部署,但是安装界面就提示了除非是实验用途,否则生产环境(特别是使用同步客户端的情况)就必须使用数据库后端,所以还需要部署一个mysql。
nextcloud的docker页面:https://hub.docker.com/_/nextcloud;mysql的docker页面:https://hub.docker.com/_/mysql
由于需要互相通信,所以需要新建一个网络给它们。
1 | docker network create -d bridge example_net_name |
由于需要访问数据库,所以启动容器的时候都用name来命名。为了方便看文件,把nextcloud的储存路径挂载到文件系统的指定路径上。因为用的apache版本的nextcloud,所以把内部80端口map到主机的8080端口,方便主机上的apache反代。其实mysql的3306不一定需要map到主机上,不过无所谓。--transaction_isolation=READ-COMMITTED --binlog_format=ROW
是根据nextcloud文档传递给mysqld的命令行参数,这种传递方式是符合mysql官方指引的。
1 | docker run -d --name cloud -v 数据储存路径:/var/www/html -p 8080:80 --restart always --network example_net_name nextcloud |
修改apache的配置文件,这一段最好放在所有其他的配置之后,放在</VirtualHost>
的上一行。也要注意ProxyPass /
为什么放在最后一行,因为放在前面会把其他的都给shadow掉(这也是为什么推荐所有这些配置都放在最后)。
1 | ProxyRequests Off |
需要用docker exec -it db bash
连接数据库的命令行,然后mysql -uroot -p
登录数据库。创建nextcloud用户的时候注意@的地址,localhost可能会访问的时候被reject,猛士就%。
现在打开域名就可以开始安装了,数据库主机是db:3306。
另外,需要在nextcloud数据目录的config/config.php里添加一行'overwriteprotocol' => 'https',
。