Nextcloud Docker食用指南(第一版)

于 2021-09-05 发布

首先需要安装docker和docker-compose。

部署docker

之后,打开nextcloud的dockerhub,先把docker镜像拉下来:

1
docker pull nextcloud

docker run来启动容器。不过在这之前有很多要做的。

确定各种参数

文件存储地址

为了以后方便迁移,需要新建一个文件夹给docker存储文件(你不会不想的)。我的存放地址是/var/www/nextcloud_docker

使用host的数据库

nextcloud的docker镜像默认使用sqlite,但是根本不适合用来同步。为了使用主机上的mariadb,需要把UDS映射到里面去。要点:

  • 一个@'%'的数据库账户
  • 确定UDS位置,我的主机是/run/mysqld/mysqld.sock

确定docker0的IP地址

这是为了之后在config.php里添加trusted_proxies做准备。使用这个命令来确定docker0的IP:

1
ip addr show docker0

修改nginx配置

在监听ssl的server块里,设置了其他所有的参数(ssl、add_header以及各种东西)之后,直接留一个location就行:

1
2
3
4
5
6
location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
}

docker run进行初始化配置

虽然之后会用docker-compose,但是现在先用docker run。将上面确定的参数进行映射,语法是host : container,需要映射端口、数据库UDS以及数据目录:

1
docker run -d -p 8080:80 -v /run/mysqld/mysqld.sock:/tmp/mysqld.sock -v /var/www/nextcloud_docker:/var/www/html nextcloud

启动起来稍等片刻,然后打开用于nextcloud的域名进行安装。在数据库地址设置那里填写localhost:/tmp/mysqld.sock。应该就能装好了。

添加trusted_proxies以及overrideprotocol

添加这个是为了解决Refused to send form data to *** because it violates the following Content Security Policy directive: "form-action 'self'".,表现为输入账户密码登陆之后一点反应没有,刷新页面才能进入文件页面。

需要在config.php里添加或修改以下内容:

1
2
3
'overwrite.cli.url' => 'https://域名',
'overwritehost' => '域名',
'overwriteprotocol' => 'https',

docker-compose

每次都用那么复杂的docker run谁都记不住,所以用一个docker-compose.yml来记录配置才是好东西:

1
2
3
4
5
6
7
8
9
10
11
version: '3'

services:
  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    volumes:
      - /var/www/nextcloud_docker:/var/www/html
      - /run/mysqld/mysqld.sock:/tmp/mysqld.sock

保存之后,如果docker run的还在运行,用docker psdocker stop来关掉,再docker-compose up -d来启动。

疑难杂症

同步客户端授权不了

特别是windows,需要卸掉再装nextcloud client。

Linux可以只做移除账户之后重新登录。

目录