V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Geeker
V2EX  ›  分享发现

如何搭建一个私人网盘

  •  
  •   Geeker · 2016-11-02 18:54:19 +08:00 · 16085 次点击
    这是一个创建于 2948 天前的主题,其中的信息可能已经有所发展或是发生改变。

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