[Nextcloud]私有云网盘

打算在云服务器上搭建个人网盘,使用Docker安装nextcloud。参考

基本配置

  • 服务器:腾讯云服务器
  • 操作系统:Ubuntu 18.04
  • Docker:19.03.11
  • Docker Compose:1.26.0

docker-compose

使用docker-compose方式配置nextcloud以及相应的数据库mariadb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ cat docker-compose.yml 
version: '2'

volumes:
nextcloud:
db:

services:
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<填写密码>
- MYSQL_PASSWORD=<填写密码>
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud

app:
image: nextcloud
ports:
-13151:80
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
  • 数据保存在卷dbnextcloud
  • 主机端口号为13151

启动容器命令即可:

1
$ docker-compose up -d

启动

第一次登录NextCloud时需要注册管理员用户以及设置数据库。在上一小节中设置了mariadb数据库,注意:配置数据库参数时需要将localhost改为db

Nginx + SSL

使用Nginx进行反向代理以及SSL认证。在阿里云设置域名和证书,配置docker-compose.yml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat docker-compose.yml 
version: "3"
services:
nginx:
container_name: nginx
image: nginx
ports:
- "9300:9300"
volumes:
- "~/software/nginx/cert:/etc/nginx/cert" < ----------- 证书放在这里
- "~/software/nginx/www:/opt/www"
- "~/software/nginx/logs:/var/log/nginx"
- "~/software/nginx/conf.d:/etc/nginx/conf.d"
- "~/software/nginx/nginx.conf:/etc/nginx/nginx.conf"
restart: always

关于配置Nginx Docker参考docker安装nginx

NextCloud的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ cat nextcloud.conf 
server {
listen <设置对外端口> ssl;
server_name <设置域名>;

ssl_certificate cert/nextcloud.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/nextcloud.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
proxy_set_header X-Rea $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://xxx.xxx.xxx.xxx:13151; <------- 设置局域网地址
proxy_set_header X-Forwarded-Proto $scheme;
}
}

启动nginx即可

1
$ docer-compose up -d

通过不被信任的域名访问

使用新设置的域名登录,遇到如下问题:

请联系您的管理员。如果您就是管理员,请参照 config.sample.php 中的示例编辑 config/config.php 中的 “trusted_domains” 设置。

配置此项的详细内容请查阅 文档。

参考:

Trusted domains

Defining trusted proxies

Password Reset broken by default CSP #17432

反向代理HTTPS下Nextcloud登录问题

Trusted domains

需要在NextCloud所在容器上进行配置,进入NextCloud所在容器

1
$ docker exec -it xxx bash

其配置文件为/var/www/html/config/config.php

修改

1
2
3
4
5
6
7
8
9
10
11
12
  'trusted_domains' => 
array (
0 => 'xxx.xxx.xxx.xxx:xxx',
1 => 'xxx.xxx.xxx:xxx', <------------ 新增设置的域名地址
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '19.0.2.2',
'overwrite.cli.url' => 'http://xxx.xxx.xxx.xxx',
'overwriteprotocol' => 'https', <----------------- 同时新增这一条配置
。。。
。。。

重新启动NextCloud后即可登录

坚持原创技术分享,您的支持将鼓励我继续创作!