nextcloud部署于docker

于 2023-02-17 发布

nextcloud可以用sqlite就完成部署,但是安装界面就提示了除非是实验用途,否则生产环境(特别是使用同步客户端的情况)就必须使用数据库后端,所以还需要部署一个mysql。

nextcloud的docker页面:[https://hub.docker.com//nextcloud](https://hub.docker.com//nextcloud);mysql的docker页面:[https://hub.docker.com//mysql](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
2
docker run -d --name cloud -v 数据储存路径:/var/www/html -p 8080:80 --restart always --network example_net_name nextcloud 
docker run --name db -v 数据库储存路径:/var/lib/mysql -p 23306:3306 --restart always -e MYSQL_ROOT_PASSWORD=数据库root密码 -d --network example_net_name mysql:8 --transaction_isolation=READ-COMMITTED --binlog_format=ROW

修改apache的配置文件,这一段最好放在所有其他的配置之后,放在</VirtualHost>的上一行。也要注意ProxyPass /为什么放在最后一行,因为放在前面会把其他的都给shadow掉(这也是为什么推荐所有这些配置都放在最后)。

1
2
3
4
5
6
7
8
9
10
ProxyRequests Off
ProxyAddHeaders Off
ProxyPreserveHost On
RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s
ProxyPass /.well-known/carddav http://127.0.0.1:8080/remote.php/dav
ProxyPassReverse /.well-known/carddav http://127.0.0.1:8080/remote.php/dav
ProxyPass /.well-known/caldav http://127.0.0.1:8080/remote.php/dav
ProxyPassReverse /.well-known/caldav http://127.0.0.1:8080/remote.php/dav
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

需要用docker exec -it db bash连接数据库的命令行,然后mysql -uroot -p登录数据库。创建nextcloud用户的时候注意@的地址,localhost可能会访问的时候被reject,猛士就%。

现在打开域名就可以开始安装了,数据库主机是db:3306。

另外,需要在nextcloud数据目录的config/config.php里添加一行'overwriteprotocol' => 'https',

目录