Raspberry Pi OwnCloud:您自己的个人云存储

Raspberry Pi OwnCloud:您自己的个人云存储

转载自 Pi My Life Up ,作者 Gus

在这个项目中,我们将制造一个 Raspberry Pi Owncloud 服务器,该服务器可以充当您自己的个人云存储。

Raspberry Pi Owncloud

随着对隐私的保护越来越难,您可能正在考虑将文件移至私有云存储。如果是这种情况,那么本教程非常适合您。

重要的是要记住,由于您的数据将存储在本地网络中,因此如果从网络外部上载和下载文件,最终将占用更多带宽。

本教程将引导您完成安装和访问 Owncloud 所需的所有知识。

如果您好奇并想了解有关 Owncloud 软件的更多信息,请确保在Owncloud.org 上访问其网站。

设备

我在个人云存储设置中使用了以下设备。

推荐的

树莓派

如果您使用的是 Raspberry Pi 2 或 B +,则为 SD 卡(建议使用 8GB +)或Micro SD 卡

以太网线Wifi 加密狗

外置硬盘或 USB 驱动器

可选的

覆盆子皮套

USB 键盘

USB 鼠标

注意:  Raspberry Pi 上的 USB 端口很可能无法为外部硬盘驱动器供电,因此您可能需要投资有源的 USB 集线器

视频

如果您是个有远见的人,并且想观看我们的视频,以了解如何将本教程放到一起,请查看下面的视频。

它将带您了解启动和运行 Raspberry Pi Owncloud 服务器所需的一切。

设置 Raspberry Pi Owncloud 服务器

首先,您需要安装带有 Raspbian 的 Raspberry Pi。如果您尚未安装 Raspbian,请查阅我们的指南,了解如何通过 NOOBS(全新的即用型软件)安装 Raspbian

您可以通过多种方式将 Owncloud 安装到 Raspberry Pi 上。在此特定教程中,我们将下载 Web 服务器(Nginx)和 Owncloud。

1. 首先,在 Pi 的命令行中或通过 SSH,我们需要更新 Raspberry Pi 及其软件包,方法是输入:

sudo apt-get update
sudo apt-get upgrade

2. 现在,我们需要打开 Raspi Config Tool 来更改一些设置。

sudo raspi-config

3. 在这里,我们需要更改一些设置。

  • 在国际化选项中 -> 更改本地,将区域设置更改为 en_US.UTF8。
  • 在高级选项 -> 内存分割中将内存分割更改为 16m。
  • 将超频更改为中。

4. 将 www-data 用户添加到 www-data 组。

sudo usermod -a -G www-data www-data

这些说明已更新为可与 Raspbian Buster 一起使用,如果您使用的是早期版本,那么我强烈建议您先升级到 Raspbian Buster,然后再继续。

您可以按照我们的指南从 Raspbian Stretch 升级到 Buster

5. 一旦运行 Raspbian Buster,就可以安全地继续本教程。

在此步骤中,我们将安装运行 Owncloud 所需的所有软件包。这包括 php7.2 及其 OwnCloud 依赖的众多模块。

运行以下命令以安装我们需要的一切。

sudo apt-get install nginx openssl ssl-cert php7.2-cli php7.2-sqlite3 php7.2-gd php7.2-common php7.2-cgi sqlite3 php-pear curl libapr1 libtool curl libcurl4-openssl-dev php7.2-xml php7.2 php7.2-dev php7.2-curl php7.2-gd php7.2-fpm memcached php-memcache php7.2-zip php7.2-intl php7.2-mbstring varnish

6. 现在我们需要创建一个 SSL 证书,您可以通过运行以下命令来做到这一点:

sudo openssl req [email protected] -new -x509 -days 730 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key

只需输入询问每个问题的相关数据。

7. 除了 SSL 证书,我们还需要为自己生成一个自定义 dhparam 文件。该文件有助于确保我们的 SSL 连接保持安全,默认情况下,它将使用几乎不那么安全的默认连接。

要生成 4096 字节长的 DH Param,请在 Raspberry Pi 上运行以下命令。此过程将花费很长时间,最多需要 16 个小时。将 -dsaparam 标志添加到命令将有助于加快过程,但是可以说安全性较低。

sudo openssl dhparam -out /etc/nginx/dh4096.pem 4096

8. 现在,我们需要对刚刚生成的三个证书文件进行 chmod。

sudo chmod 600 /etc/nginx/cert.pem
sudo chmod 600 /etc/nginx/cert.key
sudo chmod 600 /etc/nginx/dh4096.pem

9. 让我们清除服务器配置文件,因为我们将在其中复制并粘贴自己的版本。

sudo sh -c "echo '' > /etc/nginx/sites-available/default"

10. 现在,让我们配置 Web 服务器配置,以使其正确运行 Owncloud。

sudo nano /etc/nginx/sites-available/default

11. 现在,只需将以下代码复制并粘贴到文件中。

  upstream php-handler {
      server unix:/var/run/php/php7.2-fpm.sock;
  }

  server {
      listen 80;
      server_name _;

      #Allow letsencrypt through
      location /.well-known/acme-challenge/ {
          root /var/www/owncloud;
      }

      # enforce https
      location / {
          return 301 https://$host$request_uri;
      }
  }
  
  server {
      listen 443 ssl http2;
      server_name _;
  
      ssl_certificate /etc/nginx/cert.pem;
      ssl_certificate_key /etc/nginx/cert.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/dh4096.pem;
      ssl_prefer_server_ciphers on;
      keepalive_timeout    70;
      ssl_stapling on;
      ssl_stapling_verify on;
  
      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;
      }
  
      # The following 2 rules are only needed for the user_webfinger app.
      # Uncomment it if you're planning to use this app.
      #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
      #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
  
      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";
          # Before enabling Strict-Transport-Security headers please read into this topic first.
          #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;
      }
  }

12. 现在只需保存并退出。

13. 现在完成了,我们需要更新一些其他配置,首先通过输入打开 PHP 配置文件。

sudo nano /etc/php/7.2/fpm/php.ini

14. 在此文件中,我们要查找并更新以下几行。(Ctrl + w 允许您搜索)

upload_max_filesize = 2000M
post_max_size = 2000M

15. 完成后,保存然后退出。现在,我们还需要编辑 dphys-swapfile。为此,请输入以下内容打开文件:

sudo nano /etc/dphys-swapfile

16. 现在将 conf_swapsize 行更新为以下内容:

CONF_SWAPSIZE = 512

17. 输入以下命令重新启动树莓派:

sudo reboot

18. Pi 重新启动后,您将需要在 Raspberry Pi 上安装 Owncloud。通过输入以下命令来执行此操作:

sudo mkdir -p /var/www/owncloud
cd /var/www/
curl https://download.owncloud.org/community/owncloud-10.2.1.tar.bz2 | sudo tar -jxv
sudo chown -R www-data:www-data /var/www

19. 现在,我们需要打开.user.ini 文件,以实施我们在本教程前面所做的一些更改。

sudo nano /var/www/owncloud/.user.ini

20. 在此处更新以下值,使其为 2000M:

upload_max_filesize=2000M

post_max_size=2000M

memory_limit=2000M

21. 现在,我们应该能够通过您的 PI 的 IP 地址连接到 Owncloud。

在设置管理员帐户之前,您可能需要安装外部驱动器,因此您的 Raspberry Pi Owncloud Server 有很多磁盘空间。只需按照下一节中的说明进行操作即可。

安装和设置驱动器

设置外部驱动器虽然相对简单,但有时无法正常运行。

这些说明用于安装并允许 Owncloud 将文件存储到外部硬盘驱动器上。

1. 首先,如果您有 NTFS 驱动器,则需要输入以下内容来安装 NTFS 软件包:

sudo apt-get install ntfs-3g

2. 现在让我们建立一个可以挂载的目录。

sudo mkdir /media/ownclouddrive

3. 现在我们需要获取 GIDUIDUUID,因为我们将很快使用它们。为 GID 输入以下命令:

id -g www-data

4. 现在为 UID 输入以下命令:

id -u www-data

5. 同样,如果我们获得了硬盘驱动器的 UUID,即使您将其插入其他 USB 端口,Pi 也会记住该驱动器。

ls -l /dev/disk/by-uuid
UUID硬盘驱动器

复制最后一个条目的浅蓝色字母和数字(末尾应带有 -> ../../sda1 之类的内容)。

6. 现在,将驱动器添加到 fstab 文件中,以便它将以正确的权限启动。

sudo nano /etc/fstab

7. 现在,将以下行添加到文件底部,使用上面得到的值更新 UIDGUID 和 UUID。(以下内容应全部放在一行上)

UUID=DC72-0315 /media/ownclouddrive auto nofail,uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0

8. 重新启动 Raspberry Pi,驱动器应自动安装。如果安装了它们,我们都很好。

注意:如果在启动时出现错误,指出 Pi 处于紧急模式,则可能意味着 fstab 条目存在问题。只需编辑 fstab 文件(sudo nano /etc/fstab)并删除添加的行,或者查找错误并进行修复。

基本首次设置

我将在此处简要介绍设置 Owncloud Raspberry Pi 的基础知识。如果您想了解更多信息,我强烈建议您在其网站上查看这些手册,您可以在 Owncloud 手册站点上找到它们。

1. 在您的浏览器中,输入 Pi 的 IP 地址(本例中为 192.168.1.116)。

2. 转到 IP 后,您想获得证书错误,只需将其添加到例外列表中即可,因为这样可以安全进行。

3. 首次打开 ownCloud 时,应该显示一个简单的设置屏幕,并且没有错误。

4. 输入所需的用户名和密码。

5. 单击存储和数据库,然后输入外部驱动器 /media/ownclouddrive(如果未设置外部驱动器,请跳过此步骤)。

6. 单击完成设置。

Owncloud注册

如果您需要更新,但发现内部更新程序无法正常工作,则可能需要手动进行。您可以在owncloud 的更新手册页面上找到有关如何更新的详细过程。

端口转发和外部访问

如果您想访问本地网络以外的云驱动器,则需要设置端口转发并对我们的配置文件进行一些更改。

首先,我们需要返回默认文件并更改 server_name 值(其中有 2 个)。将它们更新为您的外部 IP 地址。您可以用我的 IP 地址获得 IP

如果您有动态 IP,则可能需要设置动态 DNS 并将其用作您的地址。您可以在我的端口转发指南中找到有关此信息。

输入以下内容以调出我们的默认服务器文件:

sudo nano /etc/nginx/sites-available/default

一旦更新了服务器文件中的 IP,就需要将外部 IP 添加到受信任的 IP 列表中,并确保 Owncloud 不会覆盖它。为此,请打开 Owncloud 配置文件并输入:

sudo nano /var/www/owncloud/config/config.php

在这里,将新项目添加到 “受信任的域” 阵列(这将是您的外部 IP 地址)。您的新条目应如下所示(x 只是占位符)。

1 => 'xxx.xxx.xxx.xxx',

最后,将 overwrite.cli.url 行的 URL 更新为您的 IP 地址。它应该看起来像这样。

'overwrite.cli.url' => 'https://xxx.xxx.xxx.xxx',

以下是完成的 config.txt 文件的示例。

外部IP更改示例

完成后,通过输入以下内容重新启动 Nginx 服务:

sudo service nginx restart

请务必查看我的端口转发指南,并将以下端口 443 用于内部端口,我建议将随机端口用作外部端口。设置外部端口时,请确保尚未为特定程序保留该端口。

从外部连接到 Owncloud 服务器时,您需要确保使用 https,否则将在浏览器中收到无效的请求。

设置端口转发非常容易,并且可以让您随时随地访问您的个人云。同样,完成此操作后,您仍然仍然可以通过本地 IP 进行连接。

我希望本教程可以帮助您制作自己的 Raspberry Pi OwnCloud。如果您有任何麻烦,请留下反馈,或者如果我有任何遗漏,请随时在下面给我们留言。