Geeker

如何搭建一个私人网盘

  •  
  •   Geeker · Nov 2, 2016 · 16710 views
    This topic created in 3477 days ago, the information mentioned may be changed or developed.

    文章主要讲了为什么要搭建私有网盘,以及如何用 docker + ownCloud 搭建。原文地址: http://geekplux.com/2016/10/25/how-to-setup-a-personal-cloud.html

    前两天, 360 云盘宣布将停止个人服务。一石激起千层浪,关于如何选择网盘,如何应对网盘关闭的讨论一下子又变得此起彼伏。没办法,目前的现状是,网盘很难有大的盈利空间,还面对严苛的内容审查和隐私保护,虽然于用户来说提供了便利,但于公司来说实在是一件出力不讨好的事情。

    之前的网盘方案

    国外的网盘我一直是三家一起用,分别是 Dropbox 存储代码和一些重要或私密文件; Google Drive 存储一些大文件和私密文件; OneDrive 存储一些电子书(同步太慢了)。国内的网盘我之前只用两家,一是坚果云,放一些个人常用的小文件,包括一些文档和软件配置文件;另一个是百毒云,放一些各处转存来的大文件、自己的照片和学习资料,一方面因其空间大,另一方面因其同步流畅。然而,百毒云前段时间把我的网盘全面封掉了,丢失了很多大学时的照片(其它文件要不不重要,要不有备份),申诉无果,实属无奈。

    搭建一个只属于自己的网盘

    所以我决定搭建一个只属于自己的网盘。考察了几种方案(包括买 RAID 或 NAS 等),发现已有人在这方面做了努力,提供了像 SeafileownCloud 这样的产品。接下来对比了两个软件,我决定选择用 ownCloud ,主要出于以下几点考虑:

    • 可以设置是否加密,保证数据安全。
    • ownCloud 可以用于同步日程、联系人、浏览器书签等,最重要的是密码管理,这对于目前有无数密码需要记的我们非常实用。 ownCloud 还有个应用商店,大家可以自行发现有用的应用。
    • ownCloud 提供网页和各种设备、系统的客户端( Windows 、 Mac 、 Linux 、 iOS 、 Android 皆有)进行访问你的网盘。
    • ownCloud 能将外部存储(如 FTP 、 WebDAV 、 Amazon S3 ,甚至 Dropbox 和 Google Drive )的文件挂载到 ownCloud 上,实现无缝存储和分享。
    • 文件支持版本管理,还有回收站,所以不必担心误删。

    搭建方法

    首先你得先有一个自己的 VPS。。没错,要不然你的数据往哪放, ownCloud 在哪运行。

    有了 VPS 之后,就可以按照官网教程一步一步安装搭建了。然而,步骤相当繁琐,你得先安装 PHP 、 MySQL 、 Apache 等等,所以我们要祭出神器 —— docker (这里就不介绍 docker 的用法了,以下内容默认大家对 docker 的基本使用有所了解)。这样一来,之前冗长的步骤,就化成了三步:

    1. 安装 docker 、 docker-compose ,下载 ownCloud 的 image
    2. 配置 docker-compose.yml
    3. 配置完毕,启动,打开 ownCloud 主界面配置数据库、管理员等

    下面是对上面三步的详细讲解,嫌太长的话可以不看。只需要把下面用到的两个 docker images ( owncloud 、 postgres )下载好,安装 docker-compose 并拷贝 docker-compose.yml 文件到你想要存储 ownCloud 数据的文件夹,然后运行 docker-compose up 就好,一气呵成。

    使用 docker

    安装好 docker 之后,直接下载 owncloud image 运行

    docker run --name owncloud -p 80:80 owncloud
    

    其实就可以看到 ownCloud 已经运行起来了,访问你的 VPS 地址,就可以看到 ownCloud 的界面。

    但这时的 ownCloud 还没有数据库,所以我们还需要用 docker --link 来添加一个数据库存储 ownCloud 的数据,这里用到了 postgres 这个 image (数据库你可以自己定,不一定要用 postgreSQL )。

    docker run --name owncloud-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
    docker run --rm --link owncloud-postgres:owncloud-db --name owncloud -p 80:80 owncloud
    

    第一条命令会启动一个 postgreSQL 数据库,默认的用户是 postgres ,密码设为了 mysecretpassword , host 是 owncloud-db 。

    但这时我们运行的 docker container 一旦删掉,我们的数据就没有了,所以我们需要用 docker 中的 volumes (或 docker data volumes)来把 ownCloud 的数据持久化。

    配置 docker compose

    这样一来,我们得启动两个 container 作为 data-only container ,然后再启动 owncloud 和 postgres 关联这两个 data-only container ,非常繁杂,幸亏我们有 docker-compose 帮忙。先安装它:

    pip install docker-compose
    

    然后配置 docker-compose.yml ,下面配置中的 volumes 就是在配置数据持久化的目录结构。由于我把 docker-compose.yml 存在了 VPS 的~/owncloud文件夹下,所以底下 volumes 配置中,冒号前面的宿主目录是那样写的,而冒号后面的是 container 中的目录,具体:

    • /etc/postgresql 存储数据库的配置
    • /var/lib/postgresql 存储数据库中的数据
    • /var/www/html/app 存储 ownCloud APP 的数据
    • /var/www/html/data 存储 ownCloud 的数据
    • /var/www/html/config 存储 ownCloud 的配置
    # Composition of the containers
    
    postgres-data:
      image: postgres
      command: /bin/true
      volumes:
        - ~/owncloud/etc/postgresql:/etc/postgresql
        - ~/owncloud/var/lib/postgresql:/var/lib/postgresql
    
    owncloud-data:
      image: owncloud
      # This is a data container, so we want to exit as soon as the container is created
      # BUT we will have to fix permissions issues first (33 is the ID of the www-data user)
      command: /bin/bash -c "/bin/chown -R 33 /var/www/html/data && /bin/chown -R 33 /var/www/html/config"
      volumes:
        - ~/owncloud/var/www/html/apps:/var/www/html/apps
        - ~/owncloud/var/www/html/data:/var/www/html/data
        - ~/owncloud/var/www/html/config:/var/www/html/config
    
    owncloud:
      image: owncloud
      ports:
        - 8080:80
      volumes_from:
        - owncloud-data
      links:
        - postgres:postgres
      hostname: cloud
      domainname: cloud.example.org # Change to the hostname you will use
    
    postgres:
      image: postgres
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=mypostgrespassword
      volumes_from:
        - postgres-data
    

    把 docker-compose.yml 配置好之后,只需运行

    docker-compose up
    

    就可以把 ownCloud 运行起来了,上一步中的很多操作,这里一步就搞定了。不过切记!owncloud-datapostgres-data两个 container 和 volume 千万不要删。删之前请备份

    ownCloud 配置

    访问你 VPS 的 8080 端口(刚才配置文件里写了)打开 ownCloud 主页,需要做两件事

    1. 输入管理员的账号和密码
    2. 选择数据库用哪个,且输入数据库配置,这里对照我们刚才 docker-compose 里的写的输入就好

    点击完成,一切 OK ,进入文件页面尽情探索吧!

    参考&延伸阅读


    本作品采用知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。

    25 replies    2016-11-04 10:58:08 +08:00
    fiifee
        1
    fiifee  
       Nov 2, 2016 via iPhone
    群晖系统搞定
    DoraJDJ
        2
    DoraJDJ  
       Nov 2, 2016 via Android
    最近有很多 ownCloud 安装和配置教程发生
    yuchting
        3
    yuchting  
       Nov 2, 2016 via Android
    mark
    GreatMartial
        4
    GreatMartial  
       Nov 2, 2016
    严重关注
    Geeker
        5
    Geeker  
    OP
       Nov 2, 2016
    @DoraJDJ 做一点微小的贡献
    zrj766
        6
    zrj766  
       Nov 2, 2016 via Android
    owncloud 有各种 Linux 系统的一键包, https://download.owncloud.org/download/repositories/stable/owncloud PHP 安装蛋疼的要死,各种环境限制。而且推荐 Apache , Nginx 我是没成功过,伪静态给的也不对,网上找的都太老了。
    ysoserious
        7
    ysoserious  
       Nov 2, 2016
    我想问现在 owncloud 已经修复了中文文件名上传后,目录乱码的问题吗?
    paranoiagu
        8
    paranoiagu  
       Nov 2, 2016 via Android
    收藏先,今天试用了一下 freenas 的 raid z-2 。先搞定存储,再来考虑网盘搭建。
    第一步要有安全靠谱的存储。
    Geeker
        9
    Geeker  
    OP
       Nov 2, 2016 via iPhone
    @borlee2567 咦,我暂时还没发现这个问题,感谢提醒
    klxq15
        10
    klxq15  
       Nov 2, 2016 via Android
    vps 有多大硬盘。。。
    zachlhb
        11
    zachlhb  
       Nov 2, 2016 via Android
    不知道为啥我云主机装了 owncloud ,文件那页会报错
    zjgsamuel
        12
    zjgsamuel  
       Nov 2, 2016
    Seafile 支持国货~~
    newworld
        13
    newworld  
       Nov 2, 2016 via iPhone
    楼主 其实 存照片和视频 或者其他文件(可以欺骗空间的识别 比如压缩文件也可以改成图片或者是视频 ) QQ 空间开个黄砖 你可以存几代人了 不开也足够了。。。而且你可以考虑把空间关闭了 你就只需要把安全放在守卫 QQ 这一点。。。现在 QQ 你开通第三代的人脸加实名 ,然后禁止其他登录 开启所有验证和保护 基本上就差不多了 而且安全,速度 , 便捷 ,成本 绝对划算 。。。当然你要说隐私。。。正常天朝群众 你的隐私没人来关心你。。。只要你不是想干天朝法律外的😌 欢迎补充吐槽😂
    Geeker
        14
    Geeker  
    OP
       Nov 2, 2016 via iPhone
    @newworld 你这么一说,我忽然想起来我 QQ 空间里有一大堆照片,然后你说的也都开了。。好像这么理解确实是个不错的存储
    jhytxy
        15
    jhytxy  
       Nov 2, 2016 via iPhone
    owncloud 缺陷太多
    还是 nextcloud 靠谱
    newworld
        16
    newworld  
       Nov 2, 2016 via iPhone
    @Geeker 不敢说绝对的安全 但是目前的天朝互联网情况来看 这的确是一个不错的选择哦 基本不花钱😂😂😂
    lfk0000
        17
    lfk0000  
       Nov 2, 2016
    linux 盲已跳 syncthing 的坑。。。用着还不错
    v2what
        18
    v2what  
       Nov 2, 2016
    nas4free 也是可以的
    amour
        19
    amour  
       Nov 3, 2016
    @jhytxy 这两个不是同一个东西吗?所有都一样
    KenGe
        20
    KenGe  
       Nov 3, 2016
    黑群晖
    还可以用 btsync
    Vizogood
        21
    Vizogood  
       Nov 3, 2016 via Android
    resilio 不是挺好的吗?去中心化而且支持 BT 协议。
    chintj
        22
    chintj  
       Nov 3, 2016
    syncthing 是不是和 resilio sync 差不多?
    sewyu
        23
    sewyu  
       Nov 3, 2016
    @newworld 呃,从来没认真用过 QQ 附属品,原来还可以这么玩。省下一个群晖的钱啊
    lan894734188
        24
    lan894734188  
       Nov 4, 2016 via Android
    自己有 raid 5
    willsun
        25
    willsun  
       Nov 4, 2016 via iPhone
    Vps 选择太便宜的担心数据稳定性,太贵的成本太高, linode10 美元也就 28 多 ssd.自己搭建也就传传照片,但是 owncloud 好像可以直接通过 ftp 看到用户上传的数据吧?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1209 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 171ms · UTC 23:28 · PVG 07:28 · LAX 16:28 · JFK 19:28
    ♥ Do have faith in what you're doing.