Featured image of post 使用Nextcloud和docker自建个人云网盘

使用Nextcloud和docker自建个人云网盘

使用nextcloud和docker在自己的电脑或服务器上自建个人云网盘

简介

Nextcloud是一个开源的网络硬盘工具,个人用户可以使用Nextcloud在自己的私有服务器上搭建属于自己的云网盘。

Nextcloud同时提供服务器端和客户端的软件,既支持Windows、Linux、macOS这些桌面级操作系统,也支持安卓和iOS这些移动级操作系统,因此个人用户搭建私有云网盘之后使用非常便捷。

Docker是一个创建容器的工具,可以将操作系统层虚拟化,为某个或某些软件的运行隔离出一个独立的环境,避免软件的依赖和运行环境的冲突等问题,可以非常方便地在服务器上部署某些软件。

前提

  • docker和docker compose
  • 域名(二级域名即可)
  • acme.sh (生成SSL证书)
  • nginx (反向代理)

准备工作

安装docker和docker-compose

  1. Debian系系统可直接使用apt安装docker:

    1
    
    sudo apt-get install docker-ce
    
  2. 安装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框架搭建个人网站

过程如下:

  1. 找到你的域名管理账户的Access key。可以使用之前的,也可以重新获取,然后将Access key到处为系统变量Ali_KeyAli_Secret

  2. 使用下面的命令生成证书:

    1
    
    acme.sh --issue --dns dns_ali -d your.domain.com
    
  3. 使用下面的命令将证书复制到你的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服务使修改生效:

1
sudo service nginx restart

安装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-stopped

app:
    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-stopped

networks:
  nextcloud_network:

这里需要

  1. 把“MYSQL_ROOT_PASSSWORD”和“MYSQL_PASSWORD”改为你自己设置的数据库密码,也可以把“MYSQL_DATABASE”和“MYSQL_USER”的名字改掉。
  2. 把“VIRTUAL_HOST”里的域名改成自己的云网盘域名。

用docker-compose生成容器

在Nextcloud安装根目录下执行如下命令来生成容器:

1
sudo docker-compose up -d

安装和初始化Nextcloud

完成上述步骤后就可以从浏览器访问自己的云网盘啦!在浏览器内输入云网盘的网址,例如我的是https://cloud.jinli.cyou。就会进入如下页面:

Nextcloud Install

这里需要

  1. 创建一个管理员账号,把用户名和密码记下来。
  2. 点开"Storage & databases",将默认的数据库“SQLite”改为“MySQL/MariaDB”,然后填入数据库的用户、名字、密码,最后一栏把"localhost"改为"db"。

最后点击“Finish Setup”就可以安装Nextcloud了,这可能会需要数分钟。安装完成后就可以用管理员账户登录进Nextcloud啦!

添加新用户等后续设置

以管理员身份登录进NextCloud后,点击右上角的管理员账户头像,在下拉菜单中可以看到“Users”选项。点击这个选项,就可以添加用户组和新用户了。

comments powered by Disqus