简介
Nextcloud是一个开源的网络硬盘工具,个人用户可以使用Nextcloud在自己的私有服务器上搭建属于自己的云网盘。
Nextcloud同时提供服务器端和客户端的软件,既支持Windows、Linux、macOS这些桌面级操作系统,也支持安卓和iOS这些移动级操作系统,因此个人用户搭建私有云网盘之后使用非常便捷。
Docker是一个创建容器的工具,可以将操作系统层虚拟化,为某个或某些软件的运行隔离出一个独立的环境,避免软件的依赖和运行环境的冲突等问题,可以非常方便地在服务器上部署某些软件。
前提
- docker和docker compose
- 域名(二级域名即可)
- acme.sh (生成SSL证书)
- nginx (反向代理)
准备工作
安装docker和docker-compose
-
Debian系系统可直接使用
apt
安装docker:1
sudo apt-get install docker-ce
-
安装docker-compose:
1
sudo apt-get install docker-compose
docker-compose使用一个名为
docker-compose.yml
的文件来“合成”一个docker容器,docker-compose.yml
中是合成这个docker容器的配方。
准备域名
在自己购买域名的网站上或者自己域名的管理网站上创建一个二级域名并配置域名解析,具体过程可参见“个人网站的建立过程(一):购买个人域名并配置动态域名解析”。
例如我有一个主域名jinli.cyou,于是我为个人云网盘创建了一个"cloud.jinli.cyou"的二级域名。然后在阿里云的域名管理平台上进行了域名和IP地址的绑定。
使用acme.sh生成SSL证书
网上很多教程都使用Let’s Encrypt来生成SSL证书,但由于我之前在搭建这个网站时已经下载了acme.sh工具,因此这里我使用了acme.sh来为"cloud.jinli.cyou"生成证书。具体过程可参见个人网站的建立过程(二):使用Hugo框架搭建个人网站。
过程如下:
-
找到你的域名管理账户的Access key。可以使用之前的,也可以重新获取,然后将Access key到处为系统变量
Ali_Key
和Ali_Secret
。 -
使用下面的命令生成证书:
1
acme.sh --issue --dns dns_ali -d your.domain.com
-
使用下面的命令将证书复制到你的nextcloud目录下,例如我在nextcloud安装目录下新建了一个文件夹
cert
来存放证书文件:1 2 3
acme.sh --install-cert -d your.domain.com \ --key-file /media/nextcloud/cert/key.pem \ --fullchain-file /media/nextcloud/cert/cert.pem
nginx反向代理配置
因为我之前在建立本网站时就安装了nginx,所以这里我使用了nginx作为反向代理工具(尽管Nextcloud网站上主要是以Apache为例进行安装说明的)。
在nginx的配置目录下创建一个新的配置文件nextcloud.conf
作为云网盘的反向代理配置文件,文件内写入:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;server_name cloud.jinli.cyou;
ssl_certificate /media/nextcloud/cert/cert.pem;
ssl_certificate_key /media/nextcloud/cert/key.pem;
client_max_body_size 0;
underscores_in_headers on;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_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https on;proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 64;proxy_buffering off;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass http://127.0.0.1:7080;
}
}
这里我使用7080端口作为Nextcloud的服务端口,对用户上传文件对大小不做限制。SSL证书存放在上一步指定的位置。
配置完成后重启nginx服务使修改生效:
|
|
安装Nextcloud
配置docker-compose
由于我们在上面已经生成了SSL证书并配置了nginx,因此在docker中我们只需要配置nextcloud和数据库两个容器即可。这里的数据库我们选择使用mariadb。
在Nextcloud安装根目录下创建docker-compose.yml
文件,写入以下内容:
version: ‘3’
services:
db:
image: mariadb
container_name: nextcloud-mariadb
networks:
- nextcloud_network
volumes:
- ./db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD=PASSWORD1
- MYSQL_PASSWORD=PASSSWORD2
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
restart: unless-stoppedapp:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
ports:
- 7080:80
depends_on:
- db
volumes:
- ./nextcloud:/var/www/html
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
- ./app/data:/var/www/html/data
- ./app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST=your.cloud.domain.name
restart: unless-stoppednetworks:
nextcloud_network:
这里需要
- 把“MYSQL_ROOT_PASSSWORD”和“MYSQL_PASSWORD”改为你自己设置的数据库密码,也可以把“MYSQL_DATABASE”和“MYSQL_USER”的名字改掉。
- 把“VIRTUAL_HOST”里的域名改成自己的云网盘域名。
用docker-compose生成容器
在Nextcloud安装根目录下执行如下命令来生成容器:
|
|
安装和初始化Nextcloud
完成上述步骤后就可以从浏览器访问自己的云网盘啦!在浏览器内输入云网盘的网址,例如我的是https://cloud.jinli.cyou。就会进入如下页面:
这里需要
- 创建一个管理员账号,把用户名和密码记下来。
- 点开"Storage & databases",将默认的数据库“SQLite”改为“MySQL/MariaDB”,然后填入数据库的用户、名字、密码,最后一栏把"localhost"改为"db"。
最后点击“Finish Setup”就可以安装Nextcloud了,这可能会需要数分钟。安装完成后就可以用管理员账户登录进Nextcloud啦!
添加新用户等后续设置
以管理员身份登录进NextCloud后,点击右上角的管理员账户头像,在下拉菜单中可以看到“Users”选项。点击这个选项,就可以添加用户组和新用户了。