首先需要安装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 ps
和docker stop
来关掉,再docker-compose up -d
来启动。
疑难杂症
同步客户端授权不了
特别是windows,需要卸掉再装nextcloud client。
Linux可以只做移除账户之后重新登录。