私 人 云 盘 - OwnCloud

OwnCloud其实很复杂,所以前期的准备工作要很长很长,但是我认为这是一个一劳永逸的事情,前期的工作做的越多,后面我们的使用就越简单。

✨Duang✨

当我第一次听说私人云盘的时候,其实我是拒绝的。 因为我觉得不能你叫我用,我就用。 后来我试了一下,确实很不错,上传和下载速度都是Duang Duang的快,还支持跨设备跨平台使用。 现在我每天都会上传成家班的照片和视频,然后给大家看。

成家班往事(少儿不宜,看不见就对了)

前言

其实我要私人云盘的目的只有一个:我的手机存储很小,但是我又想随时随地的浏览之前手机里面的照片和视频。
目前市面上的网络云盘五花八门,大部分都是限速云盘,或者小容量云盘
如果非要这些云盘里面选择一个的话,那么只有微软的OneDrvie还能打,其他云盘都需要分类

但是OneDrive的话因为DNS污染,个人版网页端无法直接访问,家庭版的车也不保险,商业版的价格又有点小贵。
那怎么办呢?

关键词

  • OwnCloud (开源与商业并存的典范!)
  • Nginx (我很轻,但是我很 !)
  • MySQL (开源数据库,用了都说好!)
  • Redis (我的字典里不允许卡顿!)
  • 树莓派 没错,整个系统又又又是搭建在树莓派上的! 啊咧,其实我想说的是yo yo yo~ check it out~
  • 小马的OwnCloud(测试账户:账户test,密码test)
  • 马伯恩的小站(私货,恰饭嘛,不寒碜💰)

OwnCloud

关于OwnCloud

Why is this so awesome?(为什么选择OwnCloud?)

  • 📁 访问数据 可以将文件、联系人、日历等数据存储在自定义的服务器上。
  • 📦 同步数据 可以让文件、联系人、日历等在设备之间保持同步。
  • 🔄 共享数据 可以与他人共享数据,并允许他们访问最新的照片库、日历或希望他们看到的任何内容。
  • 🚀 插件+扩展 例如日历、通讯录、邮件或新闻。
  • ☁️ 云存储 在自己的服务器上享受云存储的便利。
  • 🔒 安全加密 OwnCloud可以使用安全的 https 连接加密传输中的数据。也可以启用加密应用程序来加密存储上的数据,以提高安全性和隐私性。(例如2-Step Authenticator

先决条件

硬件要求

  • 树莓派:首先你得买一个派呀,不然巧妇难为无米之炊
  • 硬盘:仅靠树莓派的存储空间是不够滴,我们还需要额外的存储空间。
  • 硬盘盒:给硬盘供电。频繁的读写可能会导致硬盘功耗过高,从而引起树莓派供电不足而宕机。
  • 连接线:建议购买USB3.0接口的线连接树莓派和硬盘。

软件要求

  • Nginx:不会吧,你还在用Apache?漏洞警告.jpg
  • PHP: 7.3版本天下无敌!
  • MySQL: 用作为OwnCloud的数据库
  • OwnCloud: 安装OwnCloud框架
  • Linux挂载磁盘:之前我不会,现在我也不太清楚,所以我要再写一遍。

安装PHP

shell
sudo apt-get install openssl ssl-cert php7.3-xml php7.3-dev php7.3-curl php7.3-gd php7.3-fpm php7.3-zip php7.3-intl php7.3-mbstring php7.3-cli php7.3-mysql php7.3-common php7.3-cgi php7.3-apcu php7.3-redis redis-server php-pear curl libapr1 libtool libcurl4-openssl-dev php-redis

配置PHP

进入php的配置文件:
js
sudo gedit /etc/php/7.3/fpm/php.ini
配置php上传和发送参数:
js
old: upload_max_filesize = 2M
new: upload_max_filesize = 2000M

old: post_max_size = 8M
new: post_max_size = 2000M
配置php www.conf文件环境参数:
js
- From:
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
- To:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

安装Nginx

shell
sudo apt update
sudo apt install nginx

配置Nginx

在安装Nginx之后,我们需要配置一下Nginx以适用于OwnCloud。需要注意的是,我们需要在Nginx的配置文件中加入php-handler,配置HTTPS的证书,以及添加Owncloud运行的路径root /var/www/owncloud/;

进入Nginx的配置文件:
js
sudo gedit /etc/nginx/sites-available/default
配置Nginx,新建一个Web Server,并加入如下代码:
js
upstream php-handler { server unix:/var/run/php/php7.3-fpm.sock; }

server{
# add a new Nginx server for OwnCloud
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;


    ssl_certificate /home/pi/Cert/www.majun.fun.pem;
    ssl_certificate_key /home/pi/Cert/www.majun.fun.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH';
    # ssl_dhparam /etc/nginx/dh2048.pem;
    ssl_prefer_server_ciphers on;
    keepalive_timeout    70;
    ssl_stapling on;
    ssl_stapling_verify on;

add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;


    root /var/www/owncloud/;
 
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
    }
 
    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 8 4K;
    fastcgi_ignore_headers X-Accel-Buffering;
 
    gzip off;
 
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;
 
    location / {
        rewrite ^ /index.php$uri;
    }
 
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        return 404;
    }

    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        return 404;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_read_timeout 180;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off; #Available since NGINX 1.7.11
    }
 
    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri $uri/ =404;
        index index.php;
    }

    location ~ \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "max-age=15778463";
        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        access_log off;
    }

    location ~ \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map)$ {
        add_header Cache-Control "public, max-age=7200";
        try_files $uri /index.php$uri$is_args$args;
        access_log off;

}
}

配置虚拟缓存

一般的话,我们是不需要设置SWAP(交换空间)的,默认值100M已经够用了,但是考虑到云盘的上传下载频率,最好更改SWAP为合适的大小,比如1200M

进入系统swap配置文件,并更改配置如下:

shell
sudo gedit /etc/dphys-swapfile
-From:
CONF_SWAPSIZE=100
-To:
CONF_SWAPSIZE = 512

重启swap服务以生效:

shell
sudo /etc/init.d/dphys-swapfile restart

安装MySQL

运行MySQL安装命令:

shell
sudo apt update
sudo apt upgrade
sudo apt install mariadb-server

设置MySQL的运行向导,运行如下命令:

shell
sudo mysql_secure_installation

设置MySQL管理账户:

shell
sudo mysql -u root -p

为OwnCloud创建数据库:

shell
mysql -u root -e "CREATE DATABASE IF NOT EXISTS owncloud; \
  GRANT ALL PRIVILEGES ON owncloud.* \
  TO owncloud@localhost \
  IDENTIFIED BY 'password'";

安装OwnCloud

OwnCloud的安装很简单,指定安装路径,然后安装即可。但在这之前,我们需要配置occ工具:

  • 配置OCC助手:
shell
FILE="/usr/local/bin/occ"
/bin/cat <<EOM >$FILE
#! /bin/bash
cd /var/www/owncloud
sudo -E -u www-data /usr/bin/php /var/www/owncloud/occ "\$@"
EOM
chmod +x /usr/local/bin/occ
  • 下载OwnCloud并授予www-data权限:
shell
cd /var/wwww/
wget https://download.owncloud.org/community/owncloud-complete-20210721.tar.bz2 && \
tar -xjf owncloud-complete-20210721.tar.bz2 && \
chown -R www-data. owncloud
  • 安装OwnCloud:
shell
occ maintenance:install \
    --database "mysql" \
    --database-name "owncloud" \
    --database-user "owncloud" \
    --database-pass "password" \
    --admin-user "admin" \
    --admin-pass "admin"

配置OwnCloud信任域

安装OwnCloud之后,需要添加信任域才可以访问,进入OwnCloud配置文件进行配置:

shell
sudo gedit /var/www/owncloud/config/config.php
myip=$(hostname -I|cut -f1 -d ' ')
occ config:system:set trusted_domains 1 --value="$myip"

配置OwnCloud缓存设置

shell
occ config:system:set \
   memcache.local \
   --value '\OC\Memcache\APCu'
occ config:system:set \
   memcache.locking \
   --value '\OC\Memcache\Redis'
occ config:system:set \
   redis \
   --value '{"host": "127.0.0.1", "port": "6378"}' \
   --type json

至此,我们的OwnCloud服务就配置完成了。可以通过如下链接访问:OwnCloud站点地址

外挂存储

Linux上挂载磁盘其实挺难的,主要我不会。但是不要紧,只要我写的够详细,下次我一定会。

  • 安装分区工具,并加载内核
shell
sudo apt-get install ntfs-3g
modprobe fuse
  • 为外部磁盘创建一个目录
shell
sudo mkdir /home/pi/externalDisk16TB
  • 获取3个id,分别是gid,uid,uuid
shell
id -g www-data
id -u www-data
ls -l /dev/disk/by-uuid
  • 写入开机启动项
shell
sudo gedit /etc/fstab
UUID=DC72-0215 /home/pi/externalDisk16TB auto nofail,uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0

挂载成功之后,如下:

shell
sudo df-h

使用体验

速度

速度肯定是云盘的第一目标。我们简单看下上传和下载的速度,我还是比较满意的。

  • 上传: 峰值在17M左右,一般15M左右。
- 下载: 峰值在5.7M左右,一般5M左右。

也许有人就会问了,为什么上传能到17M,而下载只有5M?
答案就是洋葱,没错,我加了洋葱
细心的观众已经发现其实上传的时候是多线程上传的,而下载的时候只有单一线程下载,所以它们的速度会有大的差异,但是这速度对于个人来用已经绰绰有余了!!!

客户端

Windows + Mac + Iphone + Android Phone
支持所有主流平台的客户端。

后记

不吹了,说点实际的使用感受吧。

我在我的所有的设备上都安装了OwnCloud,体验最好的是Ipad,其次是Web端,然后是Windows客户端,Android Phone体验最差。

但是总的来说还是不错的,基于树莓派的私人云盘,投入少,功耗低,性能够用,有一些小瑕疵,但是无伤大雅。

引用康熙大帝的一句话:



我的2021
为Hexo博客启用HTTPS协议